diff --git a/.editorconfig b/.editorconfig index a45bfa8c4b42..52065f8fe269 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,5 +11,5 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true -[{package.json,*.yml}] +[{*.json,*.yml}] indent_size = 2 diff --git a/.env.example b/.env.example index c68962a3b059..0ed277fe8322 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,13 @@ APP_ENV=production APP_DEBUG=false APP_URL=http://localhost -APP_KEY=SomeRandomString +APP_TIMEZONE=UTC +APP_KEY= +DEBUGBAR_ENABLED=false DB_DRIVER=mysql DB_HOST=localhost +DB_UNIX_SOCKET=null DB_DATABASE=cachet DB_USERNAME=homestead DB_PASSWORD=secret @@ -17,10 +20,11 @@ QUEUE_DRIVER=sync CACHET_BEACON=true CACHET_EMOJI=false +CACHET_AUTO_TWITTER=true -MAIL_DRIVER=smtp -MAIL_HOST=mailtrap.io -MAIL_PORT=2525 +MAIL_DRIVER=log +MAIL_HOST=null +MAIL_PORT=null MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ADDRESS=null @@ -32,3 +36,9 @@ REDIS_DATABASE=null REDIS_PORT=null GITHUB_TOKEN=null + +NEXMO_KEY=null +NEXMO_SECRET=null +NEXMO_SMS_FROM=Cachet + +TRUSTED_PROXIES= diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..98caa82825ca --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at james@alt-three.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000000..ccf9365d7aad --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,94 @@ +# Contribution Guidelines + +## Thank you + +Firstly, thank you for taking an interest in Cachet and for reading this guide. + +## Creating issues + +We track feature requests and bug reports on the [issue tracker](https://github.com/cachethq/Cachet/issues). Please send support requests to our support email; [support@alt-three.com](mailto:support@alt-three.com?subject=Cachet%20Support). + +**Always be respectful.** Organisation members reserve the right to lock topics if they feel necessary. + +## Languages + +This project accepts **English translations** only. Translations will be updated automatically through the [CrowdIn](https://translate.cachethq.io) integration. + +Please submit alternative translations to the [Cachet CrowdIn](https://translate.cachethq.io) project. CrowdIn will automatically send a Pull Request with your updates in. + +## Coding Standards + +Please try to follow existing coding standards. [StyleCI](https://styleci.io) will analyse and fix any discrepancies in coding standards. + +## Introduction into Git and GitHub + +If you are new to Git, GitHub and the whole open source software community, welcome! Here are some resources for getting started and understanding what it's all about. + +- [Try Git](https://try.github.io/levels/1/challenges/1) by Code School +- [GitHub Help](https://help.github.com) + +If you're not fond of the command line, you can get one of GitHub's free GUI desktop apps: + +- [GitHub for Mac](https://github.com/blog/1510-installing-git-from-github-for-mac) +- [GitHub for Windows](https://github.com/blog/1127-github-for-windows) + +If you're feeling adventurous, you can become a Git & GitHub master with the [Git Path on Code School](https://www.codeschool.com/paths/git). + +## .editorconfig + +You should also make use of the [.editorconfig](/.editorconfig) file found within the root of the repository. It'll make sure that your editor is setup with the same file settings. + +## Ways to help: + +Start by becoming familiar with Cachet. If you're already using Cachet, that's a great head start. If not, check out the latest [demo](https://dev.cachethq.io) and have a play. You can also download and install Cachet locally to familiarise yourself that way. + +You don't have to be a developer to help improve Cachet, infact there are lots of ways that you can help us. + +### Spread the word + +There are a lot of people who don't know about Cachet or what a status page is and how important it can be. [Tweet about Cachet](https://twitter.com/CachetHQ). Write blog posts about your success (or failures, we're not perfect) with Cachet and share what you took away from it. + +### Help with Documentation + +Cachet is in use around the world. Cachet speaks multiple languages. Our documentation doesn't and can be hard to understand for non-English speaking people. Documentation should be easy to understand and we need your help to make this possible. Check out [CachetHQ/Docs](https://github.com/CachetHQ/Docs) to contribute to our documentation. + +### As a non-developer/non-designer + +We're always looking for new [translations](#translations). + +Of course bug reports, feature requests and [documentation](https://docs.cachethq.io) are always appreciated. + +### As a designer + +As Cachet gains new features, the design and ideas that were once a perfect fit need updating and in some cases designing from scratch. This is where you come in! Fancy giving Cachet a lick of paint? Sweet! + +You'll need to install Node.js with NPM or Yarn. + +To get started you can do the following: + +1. Install Node.js and our dev dependencies. +2. Run `npm run dev` +3. Make your changes to the SCSS files in `./resources/assets/sass/` + +If you're making a lot of changes, you'll find that running `npm run watch` will make life easier for you! + +When you're happy with your changes, please run `npm run prod` to minify the assets. + +### As a developer + +Built using [Laravel](https://laravel.com). + +We use these extra dependencies to develop Cachet: + +- Node.js +- NPM or Yarn +- Composer +- Git + +Once cloned to your local machine, you'll need some demo data! Run `php artisan cachet:seed` to get the demo installation ready for action. + +### #YOLO JUST SUBMIT A PR + +_A great idea taken from https://github.com/metabase/metabase/blob/master/docs/contributing.md#yolo-just-submit-a-pr._ + +> If you come up with something really cool, and want to share it with us, just submit a PR. If it hasn't gone through the above process, we probably won't merge it as is, but if it's compelling, we're more than willing to help you via code review, design review and generally OCD nitpicking so that it fits into the rest of our codebase. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000000..cb0cea613ced --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,5 @@ +# These are supported funding model platforms + +github: + - jbrooksuk + - cachethq diff --git a/.gitignore b/.gitignore index 51669198babc..96cbe1660fda 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,12 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +/.idea +/.vagrant +Homestead.json +Homestead.yaml +npm-debug.log .env -node_modules -phpunit.xml -vendor +package-lock.json diff --git a/.travis.yml b/.travis.yml index c87caec3b4b0..8d0b77fd6958 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,38 @@ language: php - -php: - - 5.6 - - 7.0 - - 7.1 - +dist: trusty sudo: false +branches: + except: + - l10n_2.3 + - l10n_2.4 + before_install: - cp .env.example .env - - if [[ $TRAVIS_PHP_VERSION != 7.1 ]] ; then phpenv config-rm xdebug.ini; fi -install: travis_retry composer install --no-interaction --no-scripts --prefer-source --no-suggest +install: + - travis_retry composer install --no-interaction --no-suggest -script: vendor/bin/phpunit +jobs: + include: +# - stage: Security check +# script: +# - phpenv config-rm xdebug.ini || true +# - wget https://get.sensiolabs.org/security-checker.phar +# - php security-checker.phar security:check ./composer.lock +# php: 7.1 + - stage: Unit tests + script: + - phpenv config-rm xdebug.ini || true + - vendor/bin/phpunit + php: 7.1 + - stage: Unit tests + script: + - phpenv config-rm xdebug.ini || true + - vendor/bin/phpunit + php: 7.2 + - stage: Unit tests + script: + - phpenv config-rm xdebug.ini || true + - vendor/bin/phpunit + php: 7.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 452151f214e9..000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contribution Guidelines - -## Creating issues - -Feature requests and bug reports should be made by using the [issue tracker](https://github.com/cachethq/Cachet/issues). Support questions should be directed to our support email; [support@alt-three.com](mailto:support@alt-three.com?subject=Cachet Support). - -**Always be respectful.** Organization members reserve the right to lock topics if they feel necessary. - -## Languages - -Any non-English translations must be made on the [Cachet CrowdIn](https://translate.cachethq.io) project. This makes syncing translations much easier. - -## Coding Standards - -Please follow existing coding standards: - -```php - + + + Cachet Logo + +

-[![StyleCI](https://styleci.io/repos/26730195/shield)](https://styleci.io/repos/26730195/) -[![Build Status](https://img.shields.io/travis/CachetHQ/Cachet/2.4.svg?style=flat-square)](https://travis-ci.org/CachetHQ/Cachet) -[![Software License](https://img.shields.io/badge/license-BSD3-brightgreen.svg?style=flat-square)](LICENSE) -[![Crowdin](https://d322cqt584bo4o.cloudfront.net/cachet/localized.svg)](http://translate.cachethq.io/project/cachet) -[![Latest Release](https://img.shields.io/github/release/cachethq/cachet.svg?style=flat-square)](https://github.com/CachetHQ/Cachet/releases) +Cachet, the open-source status page system. -![Screenshot](https://cachethq.io/img/main-interface.jpg) +## Cachet 3.x Announcement -Cachet is a beautiful and powerful open source status page system. +We are shifting our attention and resources to Cachet 3.x and will no longer be supporting the 2.x version. + +For more information on the Cachet rebuild and our plans for 3.x, you can read the announcement [here](https://github.com/CachetHQ/Cachet/discussions/4342). ## Features -- List your services components -- Log incidents -- Apply custom CSS to the status page +- List your service components +- Report incidents +- Customise the look of your status page - Markdown support for incident messages -- JSON API -- Translated into eleven languages +- A powerful JSON API - Metrics -- Cross-database support: MySQL, PostgreSQL and SQLite -- Subscriber notifications via Email -- Two factor authentication using Google Authenticator +- Multi-lingual +- Subscriber notifications via email +- Two factor authentication ## Requirements -- PHP 5.5.9+ or newer -- HTTP server with PHP support (eg: Apache, Nginx, Caddy) +- PHP 7.1.3 – 7.3 +- HTTP server with PHP support (e.g.: Apache, Nginx, Caddy) - [Composer](https://getcomposer.org) - -## I'm looking to contribute to this awesome project! - -Sweet, we're always looking for contributions that improve Cachet! It's easy to get started and you don't even need to know how to write a single line of code! - -### Contributing as a non-developer/non-designer - -We're always looking for new [translations](#translations). - -Of course bug reports, feature requests and [documentation](https://docs.cachethq.io) are always appreciated. - -### Contributing as a designer - -As Cachet gains new features, the design and ideas that were once a perfect fit need updating and in some cases designing from scratch. This is where you come in! Fancy giving Cachet a lick of paint? Sweet! - -You'll need to install Node.js, Bower and Gulp. - -To get started you can do the following: - -1. Install Node.js and our dev dependencies. -2. Make your changes to the SCSS files in `./resources/assets/sass/` -3. Run `gulp` - -If you're making a lot of changes, you'll find that running `gulp watch` will make life easier for you! - -### Contributing as a developer - -Built using [Laravel](https://laravel.com). - -We use these extra dependencies to develop Cachet: - -- Node.js -- Gulp -- Git - -Once cloned to your local machine, you'll need some demo data! Run `php artisan cachet:seed` to get the demo installation ready for action. +- A supported database: MariaDB, MySQL, PostgreSQL or SQLite ## Installation, Upgrades and Documentation -Documentation is found at [https://docs.cachethq.io](https://docs.cachethq.io). +You can find documentation at [https://docs.cachethq.io](https://docs.cachethq.io). Here are some useful quick links: -- [Installing Cachet](https://docs.cachethq.io/docs/installing-cachet) -- [Getting started with Docker](https://docs.cachethq.io/docs/get-started-with-docker) +- [Installing Cachet](https://docs.cachethq.io/installation/) +- [Getting started with Docker](https://docs.cachethq.io/installation/docker) -### Demo Account +### Demo -To test out the demo, you may login to the [Dashboard](https://demo.cachethq.io/dashboard) with the following: +To test out the demo, you can log in to the [Cachet dashboard](https://demo.cachethq.io/dashboard) with the following credentials: -- **Username:** `test` or `test@test.com` +- **Username:** `test` or `test@example.com` - **Password:** `test123` -The demo is reset every half hour. - -## Translations - -If you'd like to contribute translations, please check out our [CrowdIn project](https://crowdin.com/project/cachet). - -> Thank you to our [translators](https://crowdin.com/project/cachet/activity_stream), who have allowed us to share Cachet with the world! - -## Show your support - -Cachet is a BSD-3-licensed open source project. If you'd like to support future development, check out the [Patreon campaign](https://patreon.com/jbrooksuk). - -## Professional Installation Service - -We offer a professional installation service. To find out more, email us at [support@alt-three.com](mailto:support@alt-three.com?Cachet Installation) +> **Note** +> The demo will automatically reset every 30 minutes. ## Security Vulnerabilities -If you discover a security vulnerability within Cachet, please send an e-mail to us at support@alt-three.com. We handle all security vulnerabilities on a case-by-case basis. +If you discover a security vulnerability within Cachet, please send an e-mail to [support@cachethq.io](mailto:support@cachethq.io?Cachet%20Security%20Vulnerability). All security vulnerabilities are reviewed on a case-by-case basis. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000000..5459a341d897 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,17 @@ +# Security Policy + +**PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, [SEE BELOW](#reporting-a-vulnerability).** + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 2.4 | :white_check_mark: | +| < 2.4 | :x: | + +## Reporting a Vulnerability + +If you discover a security vulnerability within Cachet, please email James Brooks at james@cachethq.io. All security vulnerabilities will be promptly addressed. diff --git a/VERSION b/VERSION index a724a9cd9094..005119baaa06 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.0-dev +2.4.1 diff --git a/app/Bus/Commands/Component/AddComponentCommand.php b/app/Bus/Commands/Component/CreateComponentCommand.php similarity index 65% rename from app/Bus/Commands/Component/AddComponentCommand.php rename to app/Bus/Commands/Component/CreateComponentCommand.php index b564300aa9cb..4244f42cbc61 100644 --- a/app/Bus/Commands/Component/AddComponentCommand.php +++ b/app/Bus/Commands/Component/CreateComponentCommand.php @@ -11,7 +11,12 @@ namespace CachetHQ\Cachet\Bus\Commands\Component; -final class AddComponentCommand +/** + * This is the create component command class. + * + * @author James Brooks + */ +final class CreateComponentCommand { /** * The component name. @@ -62,6 +67,20 @@ final class AddComponentCommand */ public $enabled; + /** + * JSON meta data for the component. + * + * @var array|null + */ + public $meta; + + /** + * Tags string. + * + * @var string + */ + public $tags; + /** * The validation rules. * @@ -69,28 +88,32 @@ final class AddComponentCommand */ public $rules = [ 'name' => 'required|string', - 'description' => 'required|string', + 'description' => 'nullable|string', 'status' => 'required|int|min:0|max:4', 'link' => 'nullable|url', 'order' => 'nullable|int', 'group_id' => 'nullable|int', 'enabled' => 'nullable|bool', + 'meta' => 'nullable|array', + 'tags' => 'nullable|string', ]; /** * Create a new add component command instance. * - * @param string $name - * @param string $description - * @param int $status - * @param string $link - * @param int $order - * @param int $group_id - * @param bool $enabled + * @param string $name + * @param string $description + * @param int $status + * @param string $link + * @param int $order + * @param int $group_id + * @param bool $enabled + * @param array|null $meta + * @param string|null $tags * * @return void */ - public function __construct($name, $description, $status, $link, $order, $group_id, $enabled) + public function __construct($name, $description, $status, $link, $order, $group_id, $enabled, $meta, $tags = null) { $this->name = $name; $this->description = $description; @@ -99,5 +122,7 @@ public function __construct($name, $description, $status, $link, $order, $group_ $this->order = $order; $this->group_id = $group_id; $this->enabled = $enabled; + $this->meta = $meta; + $this->tags = $tags; } } diff --git a/app/Bus/Commands/Component/UpdateComponentCommand.php b/app/Bus/Commands/Component/UpdateComponentCommand.php index d01458668851..9909339754c1 100644 --- a/app/Bus/Commands/Component/UpdateComponentCommand.php +++ b/app/Bus/Commands/Component/UpdateComponentCommand.php @@ -25,52 +25,73 @@ final class UpdateComponentCommand /** * The component name. * - * @var string + * @var string|null */ public $name; /** * The component description. * - * @var string + * @var string|null */ public $description; /** * The component status. * - * @var int + * @var int|null */ public $status; /** * The component link. * - * @var string + * @var string|null */ public $link; /** * The component order. * - * @var int + * @var int|null */ public $order; /** * The component group. * - * @var int + * @var int|null */ public $group_id; /** * Is the component enabled? * - * @var bool + * @var bool|null */ public $enabled; + /** + * JSON meta data for the component. + * + * @var array|null + */ + public $meta; + + /** + * The tags. + * + * @var string|null + */ + public $tags; + + /** + * If this is true, we won't notify subscribers of the change. + * + * @var bool + */ + public $silent; + /** * The validation rules. * @@ -84,31 +105,40 @@ final class UpdateComponentCommand 'order' => 'nullable|int', 'group_id' => 'nullable|int', 'enabled' => 'nullable|bool', + 'meta' => 'nullable|array', + 'silent' => 'nullable|bool', ]; /** * Create a new update component command instance. * * @param \CachetHQ\Cachet\Models\Component $component - * @param string $name - * @param string $description - * @param int $status - * @param string $link - * @param int $order - * @param int $group_id - * @param bool $enabled + * @param string|null $name + * @param string|null $description + * @param int|null $status + * @param string|null $link + * @param int|null $order + * @param int|null $group_id + * @param bool|null $enabled + * @param array|null $meta + * @param string|null $tags + * @param bool $silent * * @return void */ - public function __construct(Component $component, $name, $description, $status, $link, $order, $group_id, $enabled) + public function __construct(Component $component, $name = null, $description = null, $status = null, $link = null, $order = null, $group_id = null, $enabled = null, $meta = null, $tags = null, $silent = null) { $this->component = $component; $this->name = $name; $this->description = $description; - $this->status = (int) $status; + $this->status = $status; $this->link = $link; $this->order = $order; $this->group_id = $group_id; $this->enabled = $enabled; + $this->meta = $meta; + $this->tags = $tags; + $this->silent = $silent; + $this->tags = $tags; } } diff --git a/app/Bus/Commands/ComponentGroup/AddComponentGroupCommand.php b/app/Bus/Commands/ComponentGroup/CreateComponentGroupCommand.php similarity index 91% rename from app/Bus/Commands/ComponentGroup/AddComponentGroupCommand.php rename to app/Bus/Commands/ComponentGroup/CreateComponentGroupCommand.php index 601370a0c1fa..7bec1b5d666c 100644 --- a/app/Bus/Commands/ComponentGroup/AddComponentGroupCommand.php +++ b/app/Bus/Commands/ComponentGroup/CreateComponentGroupCommand.php @@ -12,11 +12,11 @@ namespace CachetHQ\Cachet\Bus\Commands\ComponentGroup; /** - * This is the add component group command. + * This is the create component group command. * * @author James Brooks */ -final class AddComponentGroupCommand +final class CreateComponentGroupCommand { /** * The component group name. @@ -54,7 +54,7 @@ final class AddComponentGroupCommand public $rules = [ 'name' => 'required|string', 'order' => 'required|int', - 'collapsed' => 'required|int|between:0,3', + 'collapsed' => 'required|int|between:0,4', 'visible' => 'required|bool', ]; diff --git a/app/Bus/Commands/ComponentGroup/UpdateComponentGroupCommand.php b/app/Bus/Commands/ComponentGroup/UpdateComponentGroupCommand.php index 2565e2cd8dbf..1067ef22fc0c 100644 --- a/app/Bus/Commands/ComponentGroup/UpdateComponentGroupCommand.php +++ b/app/Bus/Commands/ComponentGroup/UpdateComponentGroupCommand.php @@ -63,7 +63,7 @@ final class UpdateComponentGroupCommand public $rules = [ 'name' => 'nullable|string', 'order' => 'nullable|int', - 'collapsed' => 'nullable|int|between:0,3', + 'collapsed' => 'nullable|int|between:0,4', 'visible' => 'nullable|bool', ]; diff --git a/app/Bus/Commands/Incident/ReportIncidentCommand.php b/app/Bus/Commands/Incident/CreateIncidentCommand.php similarity index 79% rename from app/Bus/Commands/Incident/ReportIncidentCommand.php rename to app/Bus/Commands/Incident/CreateIncidentCommand.php index d74df68e5eb3..4f94f2f890d6 100644 --- a/app/Bus/Commands/Incident/ReportIncidentCommand.php +++ b/app/Bus/Commands/Incident/CreateIncidentCommand.php @@ -12,12 +12,12 @@ namespace CachetHQ\Cachet\Bus\Commands\Incident; /** - * This is the report incident command. + * This is the create incident command. * * @author Joseph Cohen * @author James Brooks */ -final class ReportIncidentCommand +final class CreateIncidentCommand { /** * The incident name. @@ -76,11 +76,11 @@ final class ReportIncidentCommand public $stickied; /** - * The date at which the incident occurred. + * The date at which the incident occurred at. * * @var string|null */ - public $incident_date; + public $occurred_at; /** * A given incident template. @@ -96,6 +96,13 @@ final class ReportIncidentCommand */ public $template_vars; + /** + * Meta key/value pairs. + * + * @var array + */ + public $meta = []; + /** * The validation rules. * @@ -104,18 +111,19 @@ final class ReportIncidentCommand public $rules = [ 'name' => 'required|string', 'status' => 'required|int|min:0|max:4', - 'message' => 'required|string', + 'message' => 'nullable|string', 'visible' => 'nullable|bool', 'component_id' => 'nullable|required_with:component_status|int', 'component_status' => 'nullable|required_with:component_id|int|min:0|max:4', 'notify' => 'nullable|bool', 'stickied' => 'required|bool', - 'incident_date' => 'nullable|string', + 'occurred_at' => 'nullable|string', 'template' => 'nullable|string', + 'meta' => 'nullable|array', ]; /** - * Create a new report incident command instance. + * Create a new create incident command instance. * * @param string $name * @param int $status @@ -125,13 +133,14 @@ final class ReportIncidentCommand * @param int $component_status * @param bool $notify * @param bool $stickied - * @param string|null $incident_date + * @param string|null $occurred_at * @param string|null $template * @param array $template_vars + * @param array $meta * * @return void */ - public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $incident_date, $template, array $template_vars = []) + public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], array $meta = []) { $this->name = $name; $this->status = $status; @@ -141,8 +150,9 @@ public function __construct($name, $status, $message, $visible, $component_id, $ $this->component_status = $component_status; $this->notify = $notify; $this->stickied = $stickied; - $this->incident_date = $incident_date; + $this->occurred_at = $occurred_at; $this->template = $template; $this->template_vars = $template_vars; + $this->meta = $meta; } } diff --git a/app/Bus/Commands/Incident/ReportMaintenanceCommand.php b/app/Bus/Commands/Incident/ReportMaintenanceCommand.php deleted file mode 100644 index 396f88b7278b..000000000000 --- a/app/Bus/Commands/Incident/ReportMaintenanceCommand.php +++ /dev/null @@ -1,73 +0,0 @@ - 'required|string', - 'message' => 'required|string', - 'notify' => 'nullable|bool', - 'timestamp' => 'required|string', - ]; - - /** - * Create a new report maintenance command instance. - * - * @param string $name - * @param string $message - * @param bool $notify - * @param string $timestamp - * - * @return void - */ - public function __construct($name, $message, $notify, $timestamp) - { - $this->name = $name; - $this->message = $message; - $this->notify = $notify; - $this->timestamp = $timestamp; - } -} diff --git a/app/Bus/Commands/Incident/UpdateIncidentCommand.php b/app/Bus/Commands/Incident/UpdateIncidentCommand.php index e9fd1a404c40..1328b37ca91a 100644 --- a/app/Bus/Commands/Incident/UpdateIncidentCommand.php +++ b/app/Bus/Commands/Incident/UpdateIncidentCommand.php @@ -13,6 +13,13 @@ use CachetHQ\Cachet\Models\Incident; +/** + * This is the update incident command. + * + * @author James Brooks + * @author Joseph Cohem + * @author Graham Campbell + */ final class UpdateIncidentCommand { /** @@ -79,11 +86,11 @@ final class UpdateIncidentCommand public $stickied; /** - * The date that the incident occurred on. + * The timestamp that the incident occurred at. * - * @var string + * @var string|null */ - public $incident_date; + public $occurred_at; /** * A given incident template. @@ -99,6 +106,13 @@ final class UpdateIncidentCommand */ public $template_vars; + /** + * Meta key/value pairs. + * + * @var array + */ + public $meta = []; + /** * The validation rules. * @@ -113,7 +127,9 @@ final class UpdateIncidentCommand 'component_status' => 'nullable|int|min:0|max:4|required_with:component_id', 'notify' => 'nullable|bool', 'stickied' => 'nullable|bool', + 'occurred_at' => 'nullable|string', 'template' => 'nullable|string', + 'meta' => 'nullable|array', ]; /** @@ -128,13 +144,14 @@ final class UpdateIncidentCommand * @param int $component_status * @param bool $notify * @param bool $stickied - * @param string|null $incident_date + * @param string|null $occurred_at * @param string|null $template * @param array $template_vars + * @param array $meta * * @return void */ - public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $incident_date, $template, array $template_vars = []) + public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], array $meta = []) { $this->incident = $incident; $this->name = $name; @@ -145,8 +162,9 @@ public function __construct(Incident $incident, $name, $status, $message, $visib $this->component_status = $component_status; $this->notify = $notify; $this->stickied = $stickied; - $this->incident_date = $incident_date; + $this->occurred_at = $occurred_at; $this->template = $template; $this->template_vars = $template_vars; + $this->meta = $meta; } } diff --git a/app/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommand.php b/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php similarity index 66% rename from app/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommand.php rename to app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php index d88e51401127..caa65a757975 100644 --- a/app/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommand.php +++ b/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php @@ -19,7 +19,7 @@ * * @author James Brooks */ -final class ReportIncidentUpdateCommand +final class CreateIncidentUpdateCommand { /** * The incident. @@ -41,7 +41,19 @@ final class ReportIncidentUpdateCommand * @var string */ public $message; + /** + * The incident component. + * + * @var int + */ + public $component_id; + /** + * The component status. + * + * @var int + */ + public $component_status; /** * The user. * @@ -55,10 +67,12 @@ final class ReportIncidentUpdateCommand * @var string[] */ public $rules = [ - 'incident' => 'required', - 'status' => 'required|int|min:1|max:4', - 'message' => 'required|string', - 'user' => 'required', + 'incident' => 'required', + 'status' => 'required|int|min:1|max:4', + 'message' => 'required|string', + 'component_id' => 'nullable|required_with:component_status|int', + 'component_status' => 'nullable|required_with:component_id|int|min:0|max:4', + 'user' => 'required', ]; /** @@ -71,11 +85,13 @@ final class ReportIncidentUpdateCommand * * @return void */ - public function __construct(Incident $incident, $status, $message, User $user) + public function __construct(Incident $incident, $status, $message, $component_id, $component_status, User $user) { $this->incident = $incident; $this->status = $status; $this->message = $message; + $this->component_id = $component_id; + $this->component_status = $component_status; $this->user = $user; } } diff --git a/app/Bus/Commands/Metric/AddMetricCommand.php b/app/Bus/Commands/Metric/CreateMetricCommand.php similarity index 85% rename from app/Bus/Commands/Metric/AddMetricCommand.php rename to app/Bus/Commands/Metric/CreateMetricCommand.php index 04ac77a9784b..01e31ed39016 100644 --- a/app/Bus/Commands/Metric/AddMetricCommand.php +++ b/app/Bus/Commands/Metric/CreateMetricCommand.php @@ -11,7 +11,13 @@ namespace CachetHQ\Cachet\Bus\Commands\Metric; -final class AddMetricCommand +/** + * This is the create metric command class. + * + * @author Joseph Cohen + * @author James Brooks + */ +final class CreateMetricCommand { /** * The metric name. @@ -83,6 +89,13 @@ final class AddMetricCommand */ public $order; + /** + * The visibility of the metric. + * + * @var int + */ + public $visible; + /** * The validation rules. * @@ -92,14 +105,14 @@ final class AddMetricCommand 'name' => 'required|string', 'suffix' => 'required|string', 'description' => 'nullable|string', - 'display_chart' => 'nullable|bool', 'default_value' => 'required|int', 'calc_type' => 'required|int', 'display_chart' => 'nullable|int', 'places' => 'nullable|int|between:0,4', 'default_view' => 'required|int|between:0,3', - 'threshold' => 'nullable|numeric|between:0,10', + 'threshold' => 'required|int', 'order' => 'nullable|int', + 'visible' => 'required|int|between:0,2', ]; /** @@ -115,10 +128,11 @@ final class AddMetricCommand * @param int $default_view * @param int $threshold * @param int $order + * @param int $visible * * @return void */ - public function __construct($name, $suffix, $description, $default_value, $calc_type, $display_chart, $places, $default_view, $threshold, $order = 0) + public function __construct($name, $suffix, $description, $default_value, $calc_type, $display_chart, $places, $default_view, $threshold, $order = 0, $visible = 1) { $this->name = $name; $this->suffix = $suffix; @@ -130,5 +144,6 @@ public function __construct($name, $suffix, $description, $default_value, $calc_ $this->default_view = $default_view; $this->threshold = $threshold; $this->order = $order; + $this->visible = $visible; } } diff --git a/app/Bus/Commands/Metric/AddMetricPointCommand.php b/app/Bus/Commands/Metric/CreateMetricPointCommand.php similarity index 78% rename from app/Bus/Commands/Metric/AddMetricPointCommand.php rename to app/Bus/Commands/Metric/CreateMetricPointCommand.php index 74c50b3db08b..3555f1945dab 100644 --- a/app/Bus/Commands/Metric/AddMetricPointCommand.php +++ b/app/Bus/Commands/Metric/CreateMetricPointCommand.php @@ -13,7 +13,13 @@ use CachetHQ\Cachet\Models\Metric; -final class AddMetricPointCommand +/** + * This is the create metric point command class. + * + * @author Joseph Cohen + * @author James Brooks + */ +final class CreateMetricPointCommand { /** * The metric to add. @@ -32,7 +38,7 @@ final class AddMetricPointCommand /** * The metric point created at. * - * @var string + * @var int */ public $created_at; @@ -43,7 +49,7 @@ final class AddMetricPointCommand */ public $rules = [ 'value' => 'required|numeric', - 'created_at' => 'required|string', + 'created_at' => 'nullable|int', ]; /** @@ -51,7 +57,7 @@ final class AddMetricPointCommand * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $value - * @param string $created_at + * @param int $created_at * * @return void */ diff --git a/app/Bus/Commands/Metric/UpdateMetricCommand.php b/app/Bus/Commands/Metric/UpdateMetricCommand.php index 5eb710390cef..535837f4ad23 100644 --- a/app/Bus/Commands/Metric/UpdateMetricCommand.php +++ b/app/Bus/Commands/Metric/UpdateMetricCommand.php @@ -92,6 +92,13 @@ final class UpdateMetricCommand */ public $order; + /** + * The visibility of the metric. + * + * @var int + */ + public $visible; + /** * The validation rules. * @@ -101,14 +108,14 @@ final class UpdateMetricCommand 'name' => 'nullable|string', 'suffix' => 'nullable|string', 'description' => 'nullable|string', - 'display_chart' => 'nullable|bool', 'default_value' => 'nullable|numeric', 'calc_type' => 'nullable|int|in:0,1', 'display_chart' => 'nullable|int', 'places' => 'nullable|numeric|between:0,4', 'default_view' => 'nullable|numeric|between:0,4', - 'threshold' => 'nullable|numeric|between:0,10', + 'threshold' => 'nullable|int', 'order' => 'nullable|int', + 'visible' => 'nullable|int|between:0,2', ]; /** @@ -125,10 +132,11 @@ final class UpdateMetricCommand * @param int $default_view * @param int $threshold * @param int|null $order + * @param int $visible * * @return void */ - public function __construct(Metric $metric, $name, $suffix, $description, $default_value, $calc_type, $display_chart, $places, $default_view, $threshold, $order = null) + public function __construct(Metric $metric, $name, $suffix, $description, $default_value, $calc_type, $display_chart, $places, $default_view, $threshold, $order = null, $visible = null) { $this->metric = $metric; $this->name = $name; @@ -141,5 +149,6 @@ public function __construct(Metric $metric, $name, $suffix, $description, $defau $this->default_view = $default_view; $this->threshold = $threshold; $this->order = $order; + $this->visible = $visible; } } diff --git a/app/Bus/Commands/Schedule/CreateScheduleCommand.php b/app/Bus/Commands/Schedule/CreateScheduleCommand.php new file mode 100644 index 000000000000..d40d68df1489 --- /dev/null +++ b/app/Bus/Commands/Schedule/CreateScheduleCommand.php @@ -0,0 +1,108 @@ + + */ +final class CreateScheduleCommand +{ + /** + * The schedule name. + * + * @var string + */ + public $name; + + /** + * The schedule message. + * + * @var string + */ + public $message; + + /** + * The schedule status. + * + * @var int + */ + public $status; + + /** + * The schedule date. + * + * @var string + */ + public $scheduled_at; + + /** + * The completed at date. + * + * @var string + */ + public $completed_at; + + /** + * The components affected by the schedule. + * + * @var array + */ + public $components; + + /** + * Whether to notify that the incident was reported. + * + * @var bool + */ + public $notify; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'name' => 'required|string', + 'message' => 'nullable|string', + 'status' => 'required|int|min:0|max:2', + 'scheduled_at' => 'required|string', + 'completed_at' => 'nullable|string', + 'components' => 'nullable|array', + 'notify' => 'nullable|bool', + ]; + + /** + * Create a new create schedule command instance. + * + * @param string $name + * @param string $message + * @param int $status + * @param string $scheduled_at + * @param string $completed_at + * @param array $components + * @param bool $notify + * + * @return void + */ + public function __construct($name, $message, $status, $scheduled_at, $completed_at, $components, $notify) + { + $this->name = $name; + $this->message = $message; + $this->status = $status; + $this->scheduled_at = $scheduled_at; + $this->completed_at = $completed_at; + $this->components = $components; + $this->notify = $notify; + } +} diff --git a/app/Bus/Commands/Schedule/DeleteScheduleCommand.php b/app/Bus/Commands/Schedule/DeleteScheduleCommand.php new file mode 100644 index 000000000000..572dcf52d805 --- /dev/null +++ b/app/Bus/Commands/Schedule/DeleteScheduleCommand.php @@ -0,0 +1,50 @@ + + */ +final class DeleteScheduleCommand +{ + /** + * The schedule to delete. + * + * @var \CachetHQ\Cachet\Models\Schedule + */ + public $schedule; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'schedule' => 'required', + ]; + + /** + * Create a new delete schedule command instance. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return void + */ + public function __construct(Schedule $schedule) + { + $this->schedule = $schedule; + } +} diff --git a/app/Bus/Commands/Schedule/UpdateScheduleCommand.php b/app/Bus/Commands/Schedule/UpdateScheduleCommand.php new file mode 100644 index 000000000000..bfe100d47a80 --- /dev/null +++ b/app/Bus/Commands/Schedule/UpdateScheduleCommand.php @@ -0,0 +1,110 @@ + + */ +final class UpdateScheduleCommand +{ + /** + * The schedule to update. + * + * @param \CachetHQ\Cachet\Models\Schedule + */ + public $schedule; + + /** + * The schedule name. + * + * @var string + */ + public $name; + + /** + * The schedule message. + * + * @var string + */ + public $message; + + /** + * The schedule status. + * + * @var int + */ + public $status; + + /** + * The schedule date. + * + * @var string + */ + public $scheduled_at; + + /** + * The completed at date. + * + * @var string + */ + public $completed_at; + + /** + * The components affected by the schedule. + * + * @var array + */ + public $components; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'schedule' => 'required', + 'name' => 'nullable|string', + 'message' => 'nullable|string', + 'status' => 'nullable|int|min:0|max:2', + 'scheduled_at' => 'nullable|string', + 'completed_at' => 'nullable|string', + 'components' => 'nullable|array', + ]; + + /** + * Create a new update schedule command instance. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * @param string $name + * @param string $message + * @param int $status + * @param string $scheduled_at + * @param string $completed_at + * @param array $components + * + * @return void + */ + public function __construct(Schedule $schedule, $name, $message, $status, $scheduled_at, $completed_at, array $components = []) + { + $this->schedule = $schedule; + $this->name = $name; + $this->message = $message; + $this->status = $status; + $this->scheduled_at = $scheduled_at; + $this->completed_at = $completed_at; + $this->components = $components; + } +} diff --git a/app/Bus/Commands/System/Config/UpdateConfigCommand.php b/app/Bus/Commands/System/Config/UpdateConfigCommand.php new file mode 100644 index 000000000000..9fb21610e1d3 --- /dev/null +++ b/app/Bus/Commands/System/Config/UpdateConfigCommand.php @@ -0,0 +1,39 @@ + + */ +final class UpdateConfigCommand +{ + /** + * This is the config key/values array. + * + * @var array + */ + public $values; + + /** + * Create a new update config command instance. + * + * @param array $values + * + * @return void + */ + public function __construct($values) + { + $this->values = $values; + } +} diff --git a/app/Bus/Commands/User/AddUserCommand.php b/app/Bus/Commands/User/CreateUserCommand.php similarity index 95% rename from app/Bus/Commands/User/AddUserCommand.php rename to app/Bus/Commands/User/CreateUserCommand.php index ef9ecdd69eee..fad590d3baf4 100644 --- a/app/Bus/Commands/User/AddUserCommand.php +++ b/app/Bus/Commands/User/CreateUserCommand.php @@ -12,11 +12,11 @@ namespace CachetHQ\Cachet\Bus\Commands\User; /** - * This is the add user command. + * This is the create user command. * * @author James Brooks */ -final class AddUserCommand +final class CreateUserCommand { /** * The user username. diff --git a/app/Bus/Commands/User/InviteUserCommand.php b/app/Bus/Commands/User/InviteUserCommand.php index 2585f09518e5..49f16d9a615e 100644 --- a/app/Bus/Commands/User/InviteUserCommand.php +++ b/app/Bus/Commands/User/InviteUserCommand.php @@ -31,7 +31,7 @@ final class InviteUserCommand * @var string[] */ public $rules = [ - 'emails' => 'required|array|email', + 'emails.*' => 'required|email', ]; /** diff --git a/tests/Foundation/Providers/RouteServiceProviderTest.php b/app/Bus/Events/ActionInterface.php similarity index 50% rename from tests/Foundation/Providers/RouteServiceProviderTest.php rename to app/Bus/Events/ActionInterface.php index 911c6f083fa7..ae1bc1c8a543 100644 --- a/tests/Foundation/Providers/RouteServiceProviderTest.php +++ b/app/Bus/Events/ActionInterface.php @@ -9,17 +9,20 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; - -use AltThree\TestBench\ServiceProviderTrait; -use CachetHQ\Tests\Cachet\AbstractTestCase; +namespace CachetHQ\Cachet\Bus\Events; /** - * This is the route service provider test class. + * This is the action interface. * * @author Graham Campbell + * @author James Brooks */ -class RouteServiceProviderTest extends AbstractTestCase +interface ActionInterface { - use ServiceProviderTrait; + /** + * Get the event action. + * + * @return array + */ + public function getAction(); } diff --git a/app/Bus/Events/Beacon/BeaconFailedToSendEvent.php b/app/Bus/Events/Beacon/BeaconFailedToSendEvent.php index 53ed3eefe5c1..932dab30d9d1 100644 --- a/app/Bus/Events/Beacon/BeaconFailedToSendEvent.php +++ b/app/Bus/Events/Beacon/BeaconFailedToSendEvent.php @@ -18,5 +18,13 @@ */ final class BeaconFailedToSendEvent implements BeaconEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Beacon failed to send.'; + } } diff --git a/app/Bus/Events/Beacon/BeaconWasSentEvent.php b/app/Bus/Events/Beacon/BeaconWasSentEvent.php index 1d485328be71..919f338f9c97 100644 --- a/app/Bus/Events/Beacon/BeaconWasSentEvent.php +++ b/app/Bus/Events/Beacon/BeaconWasSentEvent.php @@ -18,5 +18,13 @@ */ final class BeaconWasSentEvent implements BeaconEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Beacon was sent.'; + } } diff --git a/app/Bus/Events/Component/ComponentEventInterface.php b/app/Bus/Events/Component/ComponentEventInterface.php index 147c999c043a..281a811f7904 100644 --- a/app/Bus/Events/Component/ComponentEventInterface.php +++ b/app/Bus/Events/Component/ComponentEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the component event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface ComponentEventInterface extends EventInterface { // diff --git a/app/Bus/Events/Component/ComponentStatusWasChangedEvent.php b/app/Bus/Events/Component/ComponentStatusWasChangedEvent.php new file mode 100644 index 000000000000..4c987409b653 --- /dev/null +++ b/app/Bus/Events/Component/ComponentStatusWasChangedEvent.php @@ -0,0 +1,102 @@ + + */ +final class ComponentStatusWasChangedEvent implements ActionInterface, ComponentEventInterface +{ + /** + * The user who changed the component. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The component that was changed. + * + * @var \CachetHQ\Cachet\Models\Component + */ + public $component; + + /** + * The original status of the component. + * + * @var int + */ + public $original_status; + + /** + * The new status of the component. + * + * @var int + */ + public $new_status; + + /** + * If silent, we won't notify. + * + * @var bool + */ + public $silent; + + /** + * Create a new component was updated event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Component $component + * @param int $original_status + * @param int $new_status + * @param bool $silent + * + * @return void + */ + public function __construct(User $user, Component $component, $original_status, $new_status, $silent) + { + $this->user = $user; + $this->component = $component; + $this->original_status = $original_status; + $this->new_status = $new_status; + $this->silent = $silent; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component status was changed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Component/ComponentStatusWasUpdatedEvent.php b/app/Bus/Events/Component/ComponentStatusWasUpdatedEvent.php deleted file mode 100644 index 446463a572f6..000000000000 --- a/app/Bus/Events/Component/ComponentStatusWasUpdatedEvent.php +++ /dev/null @@ -1,59 +0,0 @@ - - */ -final class ComponentStatusWasUpdatedEvent implements ComponentEventInterface -{ - /** - * The component that was updated. - * - * @var \CachetHQ\Cachet\Models\Component - */ - public $component; - - /** - * The original status of the component. - * - * @var int - */ - public $original_status; - - /** - * The new status of the component. - * - * @var int - */ - public $new_status; - - /** - * Create a new component was updated event instance. - * - * @param \CachetHQ\Cachet\Models\Component $component - * @param int $original_status - * @param int $new_status - * - * @return void - */ - public function __construct(Component $component, $original_status, $new_status) - { - $this->component = $component; - $this->original_status = $original_status; - $this->new_status = $new_status; - } -} diff --git a/app/Bus/Events/Component/ComponentWasAddedEvent.php b/app/Bus/Events/Component/ComponentWasAddedEvent.php deleted file mode 100644 index 7c892a78f83d..000000000000 --- a/app/Bus/Events/Component/ComponentWasAddedEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -component = $component; - } -} diff --git a/app/Bus/Events/Component/ComponentWasCreatedEvent.php b/app/Bus/Events/Component/ComponentWasCreatedEvent.php new file mode 100644 index 000000000000..29b00da5950d --- /dev/null +++ b/app/Bus/Events/Component/ComponentWasCreatedEvent.php @@ -0,0 +1,75 @@ + + */ +final class ComponentWasCreatedEvent implements ActionInterface, ComponentEventInterface +{ + /** + * The user who added the component. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The component that was added. + * + * @var \CachetHQ\Cachet\Models\Component + */ + public $component; + + /** + * Create a new component was added event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Component $component + * + * @return void + */ + public function __construct(User $user, Component $component) + { + $this->user = $user; + $this->component = $component; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component was added.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Component/ComponentWasRemovedEvent.php b/app/Bus/Events/Component/ComponentWasRemovedEvent.php index f44839d347a8..02dc3e64910a 100644 --- a/app/Bus/Events/Component/ComponentWasRemovedEvent.php +++ b/app/Bus/Events/Component/ComponentWasRemovedEvent.php @@ -11,10 +11,24 @@ namespace CachetHQ\Cachet\Bus\Events\Component; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; -final class ComponentWasRemovedEvent implements ComponentEventInterface +/** + * This is the component was removed event class. + * + * @author James Brooks + */ +final class ComponentWasRemovedEvent implements ActionInterface, ComponentEventInterface { + /** + * The user who removed the component. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The component that was removed. * @@ -25,12 +39,37 @@ final class ComponentWasRemovedEvent implements ComponentEventInterface /** * Create a new component was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Component $component * * @return void */ - public function __construct(Component $component) + public function __construct(User $user, Component $component) { + $this->user = $user; $this->component = $component; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Component/ComponentWasUpdatedEvent.php b/app/Bus/Events/Component/ComponentWasUpdatedEvent.php index b58572513421..3349e4642fc0 100644 --- a/app/Bus/Events/Component/ComponentWasUpdatedEvent.php +++ b/app/Bus/Events/Component/ComponentWasUpdatedEvent.php @@ -11,10 +11,25 @@ namespace CachetHQ\Cachet\Bus\Events\Component; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; -final class ComponentWasUpdatedEvent implements ComponentEventInterface +/** + * This is the component was updated event class. + * + * @author James Brooks + * @author Graham Campbell + */ +final class ComponentWasUpdatedEvent implements ActionInterface, ComponentEventInterface { + /** + * The user who updated the component. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The component that was updated. * @@ -25,12 +40,37 @@ final class ComponentWasUpdatedEvent implements ComponentEventInterface /** * Create a new component was updated event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Component $component * * @return void */ - public function __construct(Component $component) + public function __construct(User $user, Component $component) { + $this->user = $user; $this->component = $component; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/ComponentGroup/ComponentGroupEventInterface.php b/app/Bus/Events/ComponentGroup/ComponentGroupEventInterface.php index 99d92b77dc8c..6e40f0ee24cf 100644 --- a/app/Bus/Events/ComponentGroup/ComponentGroupEventInterface.php +++ b/app/Bus/Events/ComponentGroup/ComponentGroupEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the component group event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface ComponentGroupEventInterface extends EventInterface { // diff --git a/app/Bus/Events/ComponentGroup/ComponentGroupWasAddedEvent.php b/app/Bus/Events/ComponentGroup/ComponentGroupWasAddedEvent.php deleted file mode 100644 index 2d8479fe3f1b..000000000000 --- a/app/Bus/Events/ComponentGroup/ComponentGroupWasAddedEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -group = $group; - } -} diff --git a/app/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEvent.php b/app/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEvent.php new file mode 100644 index 000000000000..97ad605786e2 --- /dev/null +++ b/app/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEvent.php @@ -0,0 +1,75 @@ + + */ +final class ComponentGroupWasCreatedEvent implements ActionInterface, ComponentGroupEventInterface +{ + /** + * The user who added the component group. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The component group that was added. + * + * @var \CachetHQ\Cachet\Models\ComponentGroup + */ + public $group; + + /** + * Create a new component group was added event instance. + * + * @param \CachetHQ\Cachet\Models\User $group + * @param \CachetHQ\Cachet\Models\ComponentGroup $group + * + * @return void + */ + public function __construct(User $user, ComponentGroup $group) + { + $this->user = $user; + $this->group = $group; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component Group was added.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEvent.php b/app/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEvent.php index 275449cef38f..1bf33fb08620 100644 --- a/app/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEvent.php +++ b/app/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\ComponentGroup; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\ComponentGroup; +use CachetHQ\Cachet\Models\User; -final class ComponentGroupWasRemovedEvent implements ComponentGroupEventInterface +final class ComponentGroupWasRemovedEvent implements ActionInterface, ComponentGroupEventInterface { + /** + * The user who removed the component group. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The component group that was removed. * @@ -25,12 +34,37 @@ final class ComponentGroupWasRemovedEvent implements ComponentGroupEventInterfac /** * Create a new component group was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return void */ - public function __construct(ComponentGroup $group) + public function __construct(User $user, ComponentGroup $group) { + $this->user = $user; $this->group = $group; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component Group was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEvent.php b/app/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEvent.php index 19138f75c5bc..5942f00c8b8e 100644 --- a/app/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEvent.php +++ b/app/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\ComponentGroup; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\ComponentGroup; +use CachetHQ\Cachet\Models\User; -final class ComponentGroupWasUpdatedEvent implements ComponentGroupEventInterface +final class ComponentGroupWasUpdatedEvent implements ActionInterface, ComponentGroupEventInterface { + /** + * The user who updated the component group. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The component group that was updated. * @@ -25,12 +34,37 @@ final class ComponentGroupWasUpdatedEvent implements ComponentGroupEventInterfac /** * Create a new component group was updated event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return void */ - public function __construct(ComponentGroup $group) + public function __construct(User $user, ComponentGroup $group) { + $this->user = $user; $this->group = $group; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Component Group was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/EventInterface.php b/app/Bus/Events/EventInterface.php index 53013dfdb3a6..41a58b735b76 100644 --- a/app/Bus/Events/EventInterface.php +++ b/app/Bus/Events/EventInterface.php @@ -11,6 +11,12 @@ namespace CachetHQ\Cachet\Bus\Events; +/** + * This is the event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface EventInterface { // diff --git a/app/Bus/Events/Incident/IncidentEventInterface.php b/app/Bus/Events/Incident/IncidentEventInterface.php index a4cb6054f88b..31418b55781c 100644 --- a/app/Bus/Events/Incident/IncidentEventInterface.php +++ b/app/Bus/Events/Incident/IncidentEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the incident event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface IncidentEventInterface extends EventInterface { // diff --git a/app/Bus/Events/Incident/IncidentWasCreatedEvent.php b/app/Bus/Events/Incident/IncidentWasCreatedEvent.php new file mode 100644 index 000000000000..c43d672b0c66 --- /dev/null +++ b/app/Bus/Events/Incident/IncidentWasCreatedEvent.php @@ -0,0 +1,79 @@ +user = $user; + $this->incident = $incident; + $this->notify = $notify; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident was reported.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Incident/IncidentWasRemovedEvent.php b/app/Bus/Events/Incident/IncidentWasRemovedEvent.php index ef6890b03ed9..78a95f76127f 100644 --- a/app/Bus/Events/Incident/IncidentWasRemovedEvent.php +++ b/app/Bus/Events/Incident/IncidentWasRemovedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Incident; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\User; -final class IncidentWasRemovedEvent implements IncidentEventInterface +final class IncidentWasRemovedEvent implements ActionInterface, IncidentEventInterface { + /** + * The user who removed the event. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The incident that has been removed. * @@ -25,12 +34,37 @@ final class IncidentWasRemovedEvent implements IncidentEventInterface /** * Create a new incident was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Incident $incident * * @return void */ - public function __construct(Incident $incident) + public function __construct(User $user, Incident $incident) { + $this->user = $user; $this->incident = $incident; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Incident/IncidentWasReportedEvent.php b/app/Bus/Events/Incident/IncidentWasReportedEvent.php deleted file mode 100644 index a93e7b02a291..000000000000 --- a/app/Bus/Events/Incident/IncidentWasReportedEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -incident = $incident; - } -} diff --git a/app/Bus/Events/Incident/IncidentWasUpdatedEvent.php b/app/Bus/Events/Incident/IncidentWasUpdatedEvent.php index 251bc781bebe..7aa11322af1a 100644 --- a/app/Bus/Events/Incident/IncidentWasUpdatedEvent.php +++ b/app/Bus/Events/Incident/IncidentWasUpdatedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Incident; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\User; -final class IncidentWasUpdatedEvent implements IncidentEventInterface +final class IncidentWasUpdatedEvent implements ActionInterface, IncidentEventInterface { + /** + * The user who updated the event. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The incident that has been updated. * @@ -25,12 +34,37 @@ final class IncidentWasUpdatedEvent implements IncidentEventInterface /** * Create a new incident has updated event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Incident $incident * * @return void */ - public function __construct(Incident $incident) + public function __construct(User $user, Incident $incident) { + $this->user = $user; $this->incident = $incident; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Incident/MaintenanceWasScheduledEvent.php b/app/Bus/Events/Incident/MaintenanceWasScheduledEvent.php deleted file mode 100644 index 2bf293817628..000000000000 --- a/app/Bus/Events/Incident/MaintenanceWasScheduledEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -incident = $incident; - } -} diff --git a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEvent.php b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEvent.php index 1fba40aeca55..8618457fac23 100644 --- a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEvent.php +++ b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEvent.php @@ -11,15 +11,24 @@ namespace CachetHQ\Cachet\Bus\Events\IncidentUpdate; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; /** * This is the incident update was removed event. * * @author James Brooks */ -final class IncidentUpdateWasRemovedEvent implements IncidentUpdateEventInterface +final class IncidentUpdateWasRemovedEvent implements ActionInterface, IncidentUpdateEventInterface { + /** + * The user who removed the incident update. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The incident update that has been removed. * @@ -30,12 +39,37 @@ final class IncidentUpdateWasRemovedEvent implements IncidentUpdateEventInterfac /** * Create a new incident update was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\IncidentUpdate $update * * @return void */ - public function __construct(IncidentUpdate $update) + public function __construct(User $user, IncidentUpdate $update) { + $this->user = $user; $this->update = $update; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident Update was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEvent.php b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEvent.php index e2cf892887c3..52dadf881029 100644 --- a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEvent.php +++ b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEvent.php @@ -11,15 +11,24 @@ namespace CachetHQ\Cachet\Bus\Events\IncidentUpdate; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; /** * This is the incident update was reported event. * * @author James Brooks */ -final class IncidentUpdateWasReportedEvent implements IncidentUpdateEventInterface +final class IncidentUpdateWasReportedEvent implements ActionInterface, IncidentUpdateEventInterface { + /** + * The user who reported the incident update. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The incident update that has been reported. * @@ -30,12 +39,37 @@ final class IncidentUpdateWasReportedEvent implements IncidentUpdateEventInterfa /** * Create a new incident update was reported event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\IncidentUpdate $update * * @return void */ - public function __construct(IncidentUpdate $update) + public function __construct(User $user, IncidentUpdate $update) { + $this->user = $user; $this->update = $update; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident Update was reported.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEvent.php b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEvent.php index 042b3af71225..20e3782d73e0 100644 --- a/app/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEvent.php +++ b/app/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEvent.php @@ -11,15 +11,24 @@ namespace CachetHQ\Cachet\Bus\Events\IncidentUpdate; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; /** * This is the incident update was updated event. * * @author James Brooks */ -final class IncidentUpdateWasUpdatedEvent implements IncidentUpdateEventInterface +final class IncidentUpdateWasUpdatedEvent implements ActionInterface, IncidentUpdateEventInterface { + /** + * The user who updated the incident update. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The incident update that has been updated. * @@ -34,8 +43,32 @@ final class IncidentUpdateWasUpdatedEvent implements IncidentUpdateEventInterfac * * @return void */ - public function __construct(IncidentUpdate $update) + public function __construct(User $user, IncidentUpdate $update) { + $this->user = $user; $this->update = $update; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Incident Update was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Invite/InviteEventInterface.php b/app/Bus/Events/Invite/InviteEventInterface.php index 35ccfc44ac69..63c199706b55 100644 --- a/app/Bus/Events/Invite/InviteEventInterface.php +++ b/app/Bus/Events/Invite/InviteEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the invite event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface InviteEventInterface extends EventInterface { // diff --git a/app/Bus/Events/Invite/InviteWasClaimedEvent.php b/app/Bus/Events/Invite/InviteWasClaimedEvent.php index b8a3c77d246a..02f950ee52df 100644 --- a/app/Bus/Events/Invite/InviteWasClaimedEvent.php +++ b/app/Bus/Events/Invite/InviteWasClaimedEvent.php @@ -31,4 +31,14 @@ public function __construct(Invite $invite) { $this->invite = $invite; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Invite was claimed.'; + } } diff --git a/app/Bus/Events/Metric/MetricEventInterface.php b/app/Bus/Events/Metric/MetricEventInterface.php index 104a381a37e6..631b45492089 100644 --- a/app/Bus/Events/Metric/MetricEventInterface.php +++ b/app/Bus/Events/Metric/MetricEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the metric event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface MetricEventInterface extends EventInterface { // diff --git a/app/Bus/Events/Metric/MetricPointWasAddedEvent.php b/app/Bus/Events/Metric/MetricPointWasAddedEvent.php deleted file mode 100644 index 7de09cf24fb7..000000000000 --- a/app/Bus/Events/Metric/MetricPointWasAddedEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -metricPoint = $metricPoint; - } -} diff --git a/app/Bus/Events/Metric/MetricPointWasCreatedEvent.php b/app/Bus/Events/Metric/MetricPointWasCreatedEvent.php new file mode 100644 index 000000000000..7137b8c119ce --- /dev/null +++ b/app/Bus/Events/Metric/MetricPointWasCreatedEvent.php @@ -0,0 +1,75 @@ + + */ +final class MetricPointWasCreatedEvent implements ActionInterface, MetricEventInterface +{ + /** + * The user who added the metric point. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The metric point that was added. + * + * @var \CachetHQ\Cachet\Models\MetricPoint + */ + public $metricPoint; + + /** + * Create a new metric point was added event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\MetricPoint $metricPoint + * + * @return void + */ + public function __construct(User $user, MetricPoint $metricPoint) + { + $this->user = $user; + $this->metricPoint = $metricPoint; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric Point was added.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Metric/MetricPointWasRemovedEvent.php b/app/Bus/Events/Metric/MetricPointWasRemovedEvent.php index 2d0b76ee341b..85718a41d5da 100644 --- a/app/Bus/Events/Metric/MetricPointWasRemovedEvent.php +++ b/app/Bus/Events/Metric/MetricPointWasRemovedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Metric; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\User; -final class MetricPointWasRemovedEvent implements MetricEventInterface +final class MetricPointWasRemovedEvent implements ActionInterface, MetricEventInterface { + /** + * The user who removed the metric point. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The metric point that was removed. * @@ -25,12 +34,37 @@ final class MetricPointWasRemovedEvent implements MetricEventInterface /** * Create a new metric point was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\MetricPoint $memtricPoint * * @return void */ - public function __construct(MetricPoint $metricPoint) + public function __construct(User $user, MetricPoint $metricPoint) { + $this->user = $user; $this->metricPoint = $metricPoint; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric Point was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Metric/MetricPointWasUpdatedEvent.php b/app/Bus/Events/Metric/MetricPointWasUpdatedEvent.php index 35e97f5d543b..b61a595d111c 100644 --- a/app/Bus/Events/Metric/MetricPointWasUpdatedEvent.php +++ b/app/Bus/Events/Metric/MetricPointWasUpdatedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Metric; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\User; -final class MetricPointWasUpdatedEvent implements MetricEventInterface +final class MetricPointWasUpdatedEvent implements ActionInterface, MetricEventInterface { + /** + * The user who updated the metric point. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The metric point that was updated. * @@ -25,12 +34,37 @@ final class MetricPointWasUpdatedEvent implements MetricEventInterface /** * Create a new metric point was updated event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\MetricPoint $metricPoint * * @return void */ - public function __construct(MetricPoint $metricPoint) + public function __construct(User $user, MetricPoint $metricPoint) { + $this->user = $user; $this->metricPoint = $metricPoint; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric Point was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Metric/MetricWasAddedEvent.php b/app/Bus/Events/Metric/MetricWasAddedEvent.php deleted file mode 100644 index 9d495c6eff92..000000000000 --- a/app/Bus/Events/Metric/MetricWasAddedEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -metric = $metric; - } -} diff --git a/app/Bus/Events/Metric/MetricWasCreatedEvent.php b/app/Bus/Events/Metric/MetricWasCreatedEvent.php new file mode 100644 index 000000000000..f3e123b8e5c2 --- /dev/null +++ b/app/Bus/Events/Metric/MetricWasCreatedEvent.php @@ -0,0 +1,75 @@ + + */ +final class MetricWasCreatedEvent implements ActionInterface, MetricEventInterface +{ + /** + * The user who added the metric. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The metric that was added. + * + * @var \CachetHQ\Cachet\Models\Metric + */ + public $metric; + + /** + * Create a new metric was added event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Metric $metric + * + * @return void + */ + public function __construct(User $user, Metric $metric) + { + $this->user = $user; + $this->metric = $metric; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric was added.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Metric/MetricWasRemovedEvent.php b/app/Bus/Events/Metric/MetricWasRemovedEvent.php index 67061cf11d61..7193f307f957 100644 --- a/app/Bus/Events/Metric/MetricWasRemovedEvent.php +++ b/app/Bus/Events/Metric/MetricWasRemovedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Metric; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\User; -final class MetricWasRemovedEvent implements MetricEventInterface +final class MetricWasRemovedEvent implements ActionInterface, MetricEventInterface { + /** + * The user who removed the metric. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The metric that was removed. * @@ -25,12 +34,37 @@ final class MetricWasRemovedEvent implements MetricEventInterface /** * Create a new metric was removed event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Metric $metric * * @return void */ - public function __construct(Metric $metric) + public function __construct(User $user, Metric $metric) { + $this->user = $user; $this->metric = $metric; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Metric/MetricWasUpdatedEvent.php b/app/Bus/Events/Metric/MetricWasUpdatedEvent.php index dd400eb33af9..48b1dc9cc6a7 100644 --- a/app/Bus/Events/Metric/MetricWasUpdatedEvent.php +++ b/app/Bus/Events/Metric/MetricWasUpdatedEvent.php @@ -11,10 +11,19 @@ namespace CachetHQ\Cachet\Bus\Events\Metric; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\User; -final class MetricWasUpdatedEvent implements MetricEventInterface +final class MetricWasUpdatedEvent implements ActionInterface, MetricEventInterface { + /** + * The user who update the metric. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + /** * The metric that was updated. * @@ -25,12 +34,37 @@ final class MetricWasUpdatedEvent implements MetricEventInterface /** * Create a new metric was updated event instance. * + * @param \CachetHQ\Cachet\Models\User $user * @param \CachetHQ\Cachet\Models\Metric $metric * * @return void */ - public function __construct(Metric $metric) + public function __construct(User $user, Metric $metric) { + $this->user = $user; $this->metric = $metric; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Metric was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/Schedule/ScheduleEventInterface.php b/app/Bus/Events/Schedule/ScheduleEventInterface.php new file mode 100644 index 000000000000..cd23ed511bc6 --- /dev/null +++ b/app/Bus/Events/Schedule/ScheduleEventInterface.php @@ -0,0 +1,24 @@ + + */ +interface ScheduleEventInterface extends EventInterface +{ + // +} diff --git a/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php new file mode 100644 index 000000000000..2438658d71be --- /dev/null +++ b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php @@ -0,0 +1,84 @@ + + */ +final class ScheduleWasCreatedEvent implements ActionInterface, ScheduleEventInterface +{ + /** + * The user that created the schedule. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The schedule that has been created. + * + * @var \CachetHQ\Cachet\Models\Schedule + */ + public $schedule; + + /** + * Whether to notify that the incident was reported. + * + * @var bool + */ + public $notify; + + /** + * Create a new schedule was created event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * @param bool notify + * + * @return void + */ + public function __construct(User $user, Schedule $schedule, $notify = false) + { + $this->user = $user; + $this->schedule = $schedule; + $this->notify = $notify; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Schedule was created.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Schedule/ScheduleWasRemovedEvent.php b/app/Bus/Events/Schedule/ScheduleWasRemovedEvent.php new file mode 100644 index 000000000000..525c77f79598 --- /dev/null +++ b/app/Bus/Events/Schedule/ScheduleWasRemovedEvent.php @@ -0,0 +1,75 @@ + + */ +final class ScheduleWasRemovedEvent implements ActionInterface, ScheduleEventInterface +{ + /** + * The user that removed the schedule. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The schedule that has been removed. + * + * @var \CachetHQ\Cachet\Models\Schedule + */ + public $schedule; + + /** + * Create a new schedule was removed event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return void + */ + public function __construct(User $user, Schedule $schedule) + { + $this->user = $user; + $this->schedule = $schedule; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Schedule was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Schedule/ScheduleWasUpdatedEvent.php b/app/Bus/Events/Schedule/ScheduleWasUpdatedEvent.php new file mode 100644 index 000000000000..18fc46aaf5dc --- /dev/null +++ b/app/Bus/Events/Schedule/ScheduleWasUpdatedEvent.php @@ -0,0 +1,75 @@ + + */ +final class ScheduleWasUpdatedEvent implements ActionInterface, ScheduleEventInterface +{ + /** + * The user that created the schedule. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The schedule that has been updated. + * + * @var \CachetHQ\Cachet\Models\Schedule + */ + public $schedule; + + /** + * Create a new schedule was updated event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return void + */ + public function __construct(User $user, Schedule $schedule) + { + $this->user = $user; + $this->schedule = $schedule; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Schedule was updated.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/Subscriber/SubscriberEventInterface.php b/app/Bus/Events/Subscriber/SubscriberEventInterface.php index 24ed5b5af6d7..d8ec141182ee 100644 --- a/app/Bus/Events/Subscriber/SubscriberEventInterface.php +++ b/app/Bus/Events/Subscriber/SubscriberEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the subscriber event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface SubscriberEventInterface extends EventInterface { // diff --git a/app/Bus/Events/Subscriber/SubscriberHasSubscribedEvent.php b/app/Bus/Events/Subscriber/SubscriberHasSubscribedEvent.php index c48668f53e68..2dc68624d195 100644 --- a/app/Bus/Events/Subscriber/SubscriberHasSubscribedEvent.php +++ b/app/Bus/Events/Subscriber/SubscriberHasSubscribedEvent.php @@ -33,4 +33,14 @@ public function __construct(Subscriber $subscriber) { $this->subscriber = $subscriber; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Subscriber has subscribed.'; + } } diff --git a/app/Bus/Events/Subscriber/SubscriberHasUnsubscribedEvent.php b/app/Bus/Events/Subscriber/SubscriberHasUnsubscribedEvent.php index 2d35fc2a3ee0..4e67f5c88837 100644 --- a/app/Bus/Events/Subscriber/SubscriberHasUnsubscribedEvent.php +++ b/app/Bus/Events/Subscriber/SubscriberHasUnsubscribedEvent.php @@ -33,4 +33,14 @@ public function __construct(Subscriber $subscriber) { $this->subscriber = $subscriber; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Subscriber has unsubscribed.'; + } } diff --git a/app/Bus/Events/Subscriber/SubscriberHasUpdatedSubscriptionsEvent.php b/app/Bus/Events/Subscriber/SubscriberHasUpdatedSubscriptionsEvent.php index 12f6e1ec195f..8f6c71b8bd47 100644 --- a/app/Bus/Events/Subscriber/SubscriberHasUpdatedSubscriptionsEvent.php +++ b/app/Bus/Events/Subscriber/SubscriberHasUpdatedSubscriptionsEvent.php @@ -38,4 +38,14 @@ public function __construct(Subscriber $subscriber) { $this->subscriber = $subscriber; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Subscriber has updated subscription.'; + } } diff --git a/app/Bus/Events/Subscriber/SubscriberHasVerifiedEvent.php b/app/Bus/Events/Subscriber/SubscriberHasVerifiedEvent.php index b0ed5a7d26ee..b621dda139fc 100644 --- a/app/Bus/Events/Subscriber/SubscriberHasVerifiedEvent.php +++ b/app/Bus/Events/Subscriber/SubscriberHasVerifiedEvent.php @@ -33,4 +33,14 @@ public function __construct(Subscriber $subscriber) { $this->subscriber = $subscriber; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'Subscriber has verified.'; + } } diff --git a/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php b/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php index e8da9d00504e..98481777d9ef 100644 --- a/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php +++ b/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php @@ -18,5 +18,13 @@ */ final class SystemCheckedForUpdatesEvent implements SystemEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'System checked for updated.'; + } } diff --git a/app/Bus/Events/System/SystemWasInstalledEvent.php b/app/Bus/Events/System/SystemWasInstalledEvent.php index 6f333f7c27d9..cfc47ea2fc00 100644 --- a/app/Bus/Events/System/SystemWasInstalledEvent.php +++ b/app/Bus/Events/System/SystemWasInstalledEvent.php @@ -18,5 +18,13 @@ */ final class SystemWasInstalledEvent implements SystemEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'System was installed.'; + } } diff --git a/app/Bus/Events/System/SystemWasResetEvent.php b/app/Bus/Events/System/SystemWasResetEvent.php index a2146c88b727..b96763f401fd 100644 --- a/app/Bus/Events/System/SystemWasResetEvent.php +++ b/app/Bus/Events/System/SystemWasResetEvent.php @@ -18,5 +18,13 @@ */ final class SystemWasResetEvent implements SystemEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'System was reset.'; + } } diff --git a/app/Bus/Events/System/SystemWasUpdatedEvent.php b/app/Bus/Events/System/SystemWasUpdatedEvent.php index 5157288819d2..faf0cf07e1a5 100644 --- a/app/Bus/Events/System/SystemWasUpdatedEvent.php +++ b/app/Bus/Events/System/SystemWasUpdatedEvent.php @@ -18,5 +18,13 @@ */ final class SystemWasUpdatedEvent implements SystemEventInterface { - // + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'System was updated.'; + } } diff --git a/app/Bus/Events/User/UserAcceptedInviteEvent.php b/app/Bus/Events/User/UserAcceptedInviteEvent.php new file mode 100644 index 000000000000..6148c3dc62d8 --- /dev/null +++ b/app/Bus/Events/User/UserAcceptedInviteEvent.php @@ -0,0 +1,75 @@ + + */ +final class UserAcceptedInviteEvent implements ActionInterface, UserEventInterface +{ + /** + * The user that accepted the invite. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * The invite that the user accepted. + * + * @var \CachetHQ\Cachet\Models\Invite + */ + public $invite; + + /** + * Create a new user accepted invite event class. + * + * @param \CachetHQ\Cachet\Models\User $user + * @param \CachetHQ\Cachet\Models\Invite $invite + * + * @return void + */ + public function __construct(User $user, Invite $invite) + { + $this->user = $user; + $this->invite = $invite; + } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User accepted invite.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } +} diff --git a/app/Bus/Events/User/UserDisabledTwoAuthEvent.php b/app/Bus/Events/User/UserDisabledTwoAuthEvent.php index 22316bdac13d..a7646dbaae78 100644 --- a/app/Bus/Events/User/UserDisabledTwoAuthEvent.php +++ b/app/Bus/Events/User/UserDisabledTwoAuthEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserDisabledTwoAuthEvent implements UserEventInterface +final class UserDisabledTwoAuthEvent implements ActionInterface, UserEventInterface { /** * The user that disabled two auth. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User disabled two-factor authentication.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserEnabledTwoAuthEvent.php b/app/Bus/Events/User/UserEnabledTwoAuthEvent.php index ad3a56b77d37..9a13d045d303 100644 --- a/app/Bus/Events/User/UserEnabledTwoAuthEvent.php +++ b/app/Bus/Events/User/UserEnabledTwoAuthEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserEnabledTwoAuthEvent implements UserEventInterface +final class UserEnabledTwoAuthEvent implements ActionInterface, UserEventInterface { /** * The user that enabled two auth. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User enabled two-factor authentication.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserEventInterface.php b/app/Bus/Events/User/UserEventInterface.php index f36a4819a54f..be886a83430c 100644 --- a/app/Bus/Events/User/UserEventInterface.php +++ b/app/Bus/Events/User/UserEventInterface.php @@ -13,6 +13,12 @@ use CachetHQ\Cachet\Bus\Events\EventInterface; +/** + * This is the user event interface. + * + * @author Graham Campbell + * @author James Brooks + */ interface UserEventInterface extends EventInterface { // diff --git a/app/Bus/Events/User/UserFailedTwoAuthEvent.php b/app/Bus/Events/User/UserFailedTwoAuthEvent.php index c416e317e175..6fa1b015375c 100644 --- a/app/Bus/Events/User/UserFailedTwoAuthEvent.php +++ b/app/Bus/Events/User/UserFailedTwoAuthEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserFailedTwoAuthEvent implements UserEventInterface +final class UserFailedTwoAuthEvent implements ActionInterface, UserEventInterface { /** * The user that failed two auth. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User failed two-factor authentication.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserLoggedInEvent.php b/app/Bus/Events/User/UserLoggedInEvent.php index a10d1547881a..06aafe4419dc 100644 --- a/app/Bus/Events/User/UserLoggedInEvent.php +++ b/app/Bus/Events/User/UserLoggedInEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserLoggedInEvent implements UserEventInterface +final class UserLoggedInEvent implements ActionInterface, UserEventInterface { /** * The user that logged in. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User logged in.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserLoggedOutEvent.php b/app/Bus/Events/User/UserLoggedOutEvent.php index 9c51c6e3fd03..98370606befb 100644 --- a/app/Bus/Events/User/UserLoggedOutEvent.php +++ b/app/Bus/Events/User/UserLoggedOutEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserLoggedOutEvent implements UserEventInterface +final class UserLoggedOutEvent implements ActionInterface, UserEventInterface { /** * The user that logged out. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User logged out.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserPassedTwoAuthEvent.php b/app/Bus/Events/User/UserPassedTwoAuthEvent.php index be775510e277..640938e5a682 100644 --- a/app/Bus/Events/User/UserPassedTwoAuthEvent.php +++ b/app/Bus/Events/User/UserPassedTwoAuthEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserPassedTwoAuthEvent implements UserEventInterface +final class UserPassedTwoAuthEvent implements ActionInterface, UserEventInterface { /** * The user that passed two auth. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User passed two-factor authentication.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php b/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php index 4797608f33c9..6dee91094fcd 100644 --- a/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php +++ b/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserRegeneratedApiTokenEvent implements UserEventInterface +final class UserRegeneratedApiTokenEvent implements ActionInterface, UserEventInterface { /** * The user that regenerated their api token. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User regenerated api token.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserWasAddedEvent.php b/app/Bus/Events/User/UserWasCreatedEvent.php similarity index 51% rename from app/Bus/Events/User/UserWasAddedEvent.php rename to app/Bus/Events/User/UserWasCreatedEvent.php index fffe48fb7cef..a013352a583b 100644 --- a/app/Bus/Events/User/UserWasAddedEvent.php +++ b/app/Bus/Events/User/UserWasCreatedEvent.php @@ -11,9 +11,15 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; -final class UserWasAddedEvent implements UserEventInterface +/** + * This is the user was created event class. + * + * @author James Brooks + */ +final class UserWasCreatedEvent implements ActionInterface, UserEventInterface { /** * The user that has been added. @@ -33,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User was created.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserWasInvitedEvent.php b/app/Bus/Events/User/UserWasInvitedEvent.php index 4bcada2f5d6d..c2a65db9c181 100644 --- a/app/Bus/Events/User/UserWasInvitedEvent.php +++ b/app/Bus/Events/User/UserWasInvitedEvent.php @@ -13,10 +13,17 @@ use CachetHQ\Cachet\Models\Invite; +/** + * This is the user was invited event class. + * + * @author Joseph Cohen + * @author Graham Campbell + * @author James Brooks + */ final class UserWasInvitedEvent implements UserEventInterface { /** - * The invite that has been added. + * The invite that has been created. * * @var \CachetHQ\Cachet\Models\Invite */ @@ -33,4 +40,14 @@ public function __construct(Invite $invite) { $this->invite = $invite; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User was invited.'; + } } diff --git a/app/Bus/Events/User/UserWasRemovedEvent.php b/app/Bus/Events/User/UserWasRemovedEvent.php index d7504e495efd..d44213403e51 100644 --- a/app/Bus/Events/User/UserWasRemovedEvent.php +++ b/app/Bus/Events/User/UserWasRemovedEvent.php @@ -11,9 +11,10 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; -final class UserWasRemovedEvent implements UserEventInterface +final class UserWasRemovedEvent implements ActionInterface, UserEventInterface { /** * The user that has been removed. @@ -33,4 +34,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User was removed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Events/User/UserWasWelcomedEvent.php b/app/Bus/Events/User/UserWasWelcomedEvent.php index a2f052d7a021..3f163cc5b6a1 100644 --- a/app/Bus/Events/User/UserWasWelcomedEvent.php +++ b/app/Bus/Events/User/UserWasWelcomedEvent.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Bus\Events\User; +use CachetHQ\Cachet\Bus\Events\ActionInterface; use CachetHQ\Cachet\Models\User; /** @@ -18,7 +19,7 @@ * * @author James Brooks */ -final class UserWasWelcomedEvent implements UserEventInterface +final class UserWasWelcomedEvent implements ActionInterface, UserEventInterface { /** * The user. @@ -38,4 +39,27 @@ public function __construct(User $user) { $this->user = $user; } + + /** + * Get the event description. + * + * @return string + */ + public function __toString() + { + return 'User was welcomed.'; + } + + /** + * Get the event action. + * + * @return array + */ + public function getAction() + { + return [ + 'user' => $this->user, + 'description' => (string) $this, + ]; + } } diff --git a/app/Bus/Exceptions/Component/ComponentExceptionInterface.php b/app/Bus/Exceptions/Component/ComponentExceptionInterface.php new file mode 100644 index 000000000000..211d81f7a71b --- /dev/null +++ b/app/Bus/Exceptions/Component/ComponentExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface ComponentExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/ComponentGroup/ComponentGroup.php b/app/Bus/Exceptions/ComponentGroup/ComponentGroup.php new file mode 100644 index 000000000000..8ca6edd05ee2 --- /dev/null +++ b/app/Bus/Exceptions/ComponentGroup/ComponentGroup.php @@ -0,0 +1,24 @@ + + */ +interface ComponentGroup extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/Incident/IncidentExceptionInterface.php b/app/Bus/Exceptions/Incident/IncidentExceptionInterface.php new file mode 100644 index 000000000000..f6aa9be71dac --- /dev/null +++ b/app/Bus/Exceptions/Incident/IncidentExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface IncidentExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/Incident/InvalidIncidentTimestampException.php b/app/Bus/Exceptions/Incident/InvalidIncidentTimestampException.php new file mode 100644 index 000000000000..8d5d8708cd03 --- /dev/null +++ b/app/Bus/Exceptions/Incident/InvalidIncidentTimestampException.php @@ -0,0 +1,24 @@ + + */ +class InvalidIncidentTimestampException extends Exception implements IncidentExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/IncidentUpdate/IncidentUpdateExceptionInterface.php b/app/Bus/Exceptions/IncidentUpdate/IncidentUpdateExceptionInterface.php new file mode 100644 index 000000000000..3abb87db89f2 --- /dev/null +++ b/app/Bus/Exceptions/IncidentUpdate/IncidentUpdateExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface IncidentUpdateExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/Metric/MetricExceptionInterface.php b/app/Bus/Exceptions/Metric/MetricExceptionInterface.php new file mode 100644 index 000000000000..51dd0f448601 --- /dev/null +++ b/app/Bus/Exceptions/Metric/MetricExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface MetricExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/MetricPoint/MetricPointExceptionInterface.php b/app/Bus/Exceptions/MetricPoint/MetricPointExceptionInterface.php new file mode 100644 index 000000000000..a0fe628cfa0f --- /dev/null +++ b/app/Bus/Exceptions/MetricPoint/MetricPointExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface MetricPointExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/Schedule/ScheduleExceptionInterface.php b/app/Bus/Exceptions/Schedule/ScheduleExceptionInterface.php new file mode 100644 index 000000000000..61059820f368 --- /dev/null +++ b/app/Bus/Exceptions/Schedule/ScheduleExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface ScheduleExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/Subscriber/SubscriberExceptionInterface.php b/app/Bus/Exceptions/Subscriber/SubscriberExceptionInterface.php new file mode 100644 index 000000000000..afee3735b88e --- /dev/null +++ b/app/Bus/Exceptions/Subscriber/SubscriberExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface SubscriberExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Exceptions/User/UserExceptionInterface.php b/app/Bus/Exceptions/User/UserExceptionInterface.php new file mode 100644 index 000000000000..e0b3d8aed1cf --- /dev/null +++ b/app/Bus/Exceptions/User/UserExceptionInterface.php @@ -0,0 +1,24 @@ + + */ +interface UserExceptionInterface extends ExceptionInterface +{ + // +} diff --git a/app/Bus/Handlers/Commands/Component/AddComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/AddComponentCommandHandler.php deleted file mode 100644 index 538d6391912e..000000000000 --- a/app/Bus/Handlers/Commands/Component/AddComponentCommandHandler.php +++ /dev/null @@ -1,59 +0,0 @@ -filter($command)); - - event(new ComponentWasAddedEvent($component)); - - return $component; - } - - /** - * Filter the command data. - * - * @param \CachetHQ\Cachet\Bus\Commands\Incident\AddComponentCommand $command - * - * @return array - */ - protected function filter(AddComponentCommand $command) - { - $params = [ - 'name' => $command->name, - 'description' => $command->description, - 'link' => $command->link, - 'status' => $command->status, - 'enabled' => $command->enabled, - 'order' => $command->order, - 'group_id' => $command->group_id, - ]; - - return array_filter($params, function ($val) { - return $val !== null; - }); - } -} diff --git a/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php new file mode 100644 index 000000000000..867f49fbeaa4 --- /dev/null +++ b/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php @@ -0,0 +1,94 @@ + + */ +class CreateComponentCommandHandler +{ + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove component command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + + /** + * Handle the add component command. + * + * @param \CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand $command + * + * @return \CachetHQ\Cachet\Models\Component + */ + public function handle(CreateComponentCommand $command) + { + $component = Component::create($this->filter($command)); + + // Sync the tags into the component. + if ($command->tags) { + collect(preg_split('/ ?, ?/', $command->tags))->filter()->map(function ($tag) { + return trim($tag); + })->pipe(function ($tags) use ($component) { + $component->attachTags($tags); + }); + } + + event(new ComponentWasCreatedEvent($this->auth->user(), $component)); + + return $component; + } + + /** + * Filter the command data. + * + * @param \CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand $command + * + * @return array + */ + protected function filter(CreateComponentCommand $command) + { + $params = [ + 'name' => $command->name, + 'description' => $command->description, + 'link' => $command->link, + 'status' => $command->status, + 'enabled' => $command->enabled, + 'order' => $command->order, + 'group_id' => $command->group_id, + 'meta' => $command->meta, + ]; + + return array_filter($params, function ($val) { + return $val !== null; + }); + } +} diff --git a/app/Bus/Handlers/Commands/Component/RemoveComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/RemoveComponentCommandHandler.php index 80451e2753d3..78e0acd71911 100644 --- a/app/Bus/Handlers/Commands/Component/RemoveComponentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Component/RemoveComponentCommandHandler.php @@ -13,9 +13,29 @@ use CachetHQ\Cachet\Bus\Commands\Component\RemoveComponentCommand; use CachetHQ\Cachet\Bus\Events\Component\ComponentWasRemovedEvent; +use Illuminate\Contracts\Auth\Guard; class RemoveComponentCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove component command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove component command. * @@ -27,7 +47,7 @@ public function handle(RemoveComponentCommand $command) { $component = $command->component; - event(new ComponentWasRemovedEvent($component)); + event(new ComponentWasRemovedEvent($this->auth->user(), $component)); $component->delete(); } diff --git a/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php index cf45d8bc5ebf..f0ad1e44faab 100644 --- a/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php @@ -12,12 +12,32 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\Component; use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; -use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent; use CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent; use CachetHQ\Cachet\Models\Component; +use Illuminate\Contracts\Auth\Guard; class UpdateComponentCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new update component command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the update component command. * @@ -30,11 +50,22 @@ public function handle(UpdateComponentCommand $command) $component = $command->component; $originalStatus = $component->status; - event(new ComponentStatusWasUpdatedEvent($component, $originalStatus, $command->status)); + if ($command->status && (int) $originalStatus !== (int) $command->status) { + event(new ComponentStatusWasChangedEvent($this->auth->user(), $component, $originalStatus, $command->status, $command->silent)); + } $component->update($this->filter($command)); - event(new ComponentWasUpdatedEvent($component)); + // Sync the tags into the component. + if ($command->tags) { + collect(preg_split('/ ?, ?/', $command->tags))->filter()->map(function ($tag) { + return trim($tag); + })->pipe(function ($tags) use ($component) { + $component->syncTags($tags); + }); + } + + event(new ComponentWasUpdatedEvent($this->auth->user(), $component)); return $component; } @@ -42,7 +73,7 @@ public function handle(UpdateComponentCommand $command) /** * Filter the command data. * - * @param \CachetHQ\Cachet\Bus\Commands\Incident\UpdateComponentCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand $command * * @return array */ @@ -56,6 +87,7 @@ protected function filter(UpdateComponentCommand $command) 'enabled' => $command->enabled, 'order' => $command->order, 'group_id' => $command->group_id, + 'meta' => $command->meta, ]; return array_filter($params, function ($val) { diff --git a/app/Bus/Handlers/Commands/ComponentGroup/AddComponentGroupCommandHandler.php b/app/Bus/Handlers/Commands/ComponentGroup/AddComponentGroupCommandHandler.php deleted file mode 100644 index b2a935a86e97..000000000000 --- a/app/Bus/Handlers/Commands/ComponentGroup/AddComponentGroupCommandHandler.php +++ /dev/null @@ -1,40 +0,0 @@ - $command->name, - 'order' => $command->order, - 'collapsed' => $command->collapsed, - 'visible' => $command->visible, - ]); - - event(new ComponentGroupWasAddedEvent($group)); - - return $group; - } -} diff --git a/app/Bus/Handlers/Commands/ComponentGroup/CreateComponentGroupCommandHandler.php b/app/Bus/Handlers/Commands/ComponentGroup/CreateComponentGroupCommandHandler.php new file mode 100644 index 000000000000..2169025baab7 --- /dev/null +++ b/app/Bus/Handlers/Commands/ComponentGroup/CreateComponentGroupCommandHandler.php @@ -0,0 +1,60 @@ +auth = $auth; + } + + /** + * Handle the create component group command. + * + * @param \CachetHQ\Cachet\Bus\Commands\ComponentGroup\CreateComponentGroupCommand $command + * + * @return \CachetHQ\Cachet\Models\ComponentGroup + */ + public function handle(CreateComponentGroupCommand $command) + { + $group = ComponentGroup::create([ + 'name' => $command->name, + 'order' => $command->order, + 'collapsed' => $command->collapsed, + 'visible' => $command->visible, + ]); + + event(new ComponentGroupWasCreatedEvent($this->auth->user(), $group)); + + return $group; + } +} diff --git a/app/Bus/Handlers/Commands/ComponentGroup/RemoveComponentGroupCommandHandler.php b/app/Bus/Handlers/Commands/ComponentGroup/RemoveComponentGroupCommandHandler.php index d74301494f5e..eef3b14e9304 100644 --- a/app/Bus/Handlers/Commands/ComponentGroup/RemoveComponentGroupCommandHandler.php +++ b/app/Bus/Handlers/Commands/ComponentGroup/RemoveComponentGroupCommandHandler.php @@ -13,9 +13,29 @@ use CachetHQ\Cachet\Bus\Commands\ComponentGroup\RemoveComponentGroupCommand; use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasRemovedEvent; +use Illuminate\Contracts\Auth\Guard; class RemoveComponentGroupCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove component group command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove component group command. * @@ -27,7 +47,7 @@ public function handle(RemoveComponentGroupCommand $command) { $group = $command->group; - event(new ComponentGroupWasRemovedEvent($group)); + event(new ComponentGroupWasRemovedEvent($this->auth->user(), $group)); // Remove the group id from all component. $group->components->map(function ($component) { diff --git a/app/Bus/Handlers/Commands/ComponentGroup/UpdateComponentGroupCommandHandler.php b/app/Bus/Handlers/Commands/ComponentGroup/UpdateComponentGroupCommandHandler.php index ef0f3a07ef88..394b73c93400 100644 --- a/app/Bus/Handlers/Commands/ComponentGroup/UpdateComponentGroupCommandHandler.php +++ b/app/Bus/Handlers/Commands/ComponentGroup/UpdateComponentGroupCommandHandler.php @@ -13,9 +13,29 @@ use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand; use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasUpdatedEvent; +use Illuminate\Contracts\Auth\Guard; class UpdateComponentGroupCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new update component command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the update component group command. * @@ -28,7 +48,7 @@ public function handle(UpdateComponentGroupCommand $command) $group = $command->group; $group->update($this->filter($command)); - event(new ComponentGroupWasUpdatedEvent($group)); + event(new ComponentGroupWasUpdatedEvent($this->auth->user(), $group)); return $group; } diff --git a/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php new file mode 100644 index 000000000000..2b3bcf77b8be --- /dev/null +++ b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php @@ -0,0 +1,198 @@ + + */ +class CreateIncidentCommandHandler +{ + use StoresMeta; + + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * The date factory instance. + * + * @var \CachetHQ\Cachet\Services\Dates\DateFactory + */ + protected $dates; + + protected $twigConfig; + + /** + * Create a new create incident command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * + * @return void + */ + public function __construct(Guard $auth, DateFactory $dates) + { + $this->auth = $auth; + $this->dates = $dates; + + $this->twigConfig = config('cachet.twig'); + } + + /** + * Handle the create incident command. + * + * @param \CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand $command + * + * @return \CachetHQ\Cachet\Models\Incident + */ + public function handle(CreateIncidentCommand $command) + { + $data = [ + 'user_id' => $this->auth->user()->id, + 'name' => $command->name, + 'status' => $command->status, + 'visible' => $command->visible, + 'stickied' => $command->stickied, + ]; + + if ($template = IncidentTemplate::where('slug', '=', $command->template)->first()) { + $data['message'] = $this->parseTemplate($template, $command); + } else { + $data['message'] = $command->message; + } + + // Link with the component. + if ($command->component_id) { + $data['component_id'] = $command->component_id; + } + + // The incident occurred at a different time. + if ($occurredAt = $command->occurred_at) { + if ($date = $this->dates->create('Y-m-d H:i', $occurredAt)) { + $data['occurred_at'] = $date; + } else { + throw new InvalidIncidentTimestampException("Unable to pass timestamp {$occurredAt}"); + } + } else { + $data['occurred_at'] = Carbon::now(); + } + + // Create the incident + $incident = Incident::create($data); + + // Store any meta? + if ($meta = $command->meta) { + $this->storeMeta($command->meta, 'incidents', $incident->id); + } + + // Update the component. + if ($component = Component::find($command->component_id)) { + execute(new UpdateComponentCommand( + Component::find($command->component_id), + null, + null, + $command->component_status, + null, + null, + null, + null, + null, + null, + true // Silent mode + )); + } + + event(new IncidentWasCreatedEvent($this->auth->user(), $incident, (bool) $command->notify)); + + return $incident; + } + + protected function sandboxedTwigTemplateData(string $templateData) + { + if (!$templateData) { + return ''; + } + + $policy = new \Twig\Sandbox\SecurityPolicy( + $this->twigConfig['tags'], + $this->twigConfig['filters'], + $this->twigConfig['methods'], + $this->twigConfig['props'], + $this->twigConfig['functions'] + ); + + $sandbox = new \Twig\Extension\SandboxExtension($policy); + + $templateBasicLoader = new Twig_Loader_Array([ + 'firstStageLoader' => $templateData, + ]); + + $sandBoxBasicLoader = new Twig_Loader_Array([ + 'secondStageLoader' => '{% sandbox %}{% include "firstStageLoader" %} {% endsandbox %}', + ]); + + $hardenedLoader = new \Twig\Loader\ChainLoader([$templateBasicLoader, $sandBoxBasicLoader]); + $twig = new Twig_Environment($hardenedLoader); + $twig->addExtension($sandbox); + + return $twig; + } + + /** + * Compiles an incident template into an incident message. + * + * @param \CachetHQ\Cachet\Models\IncidentTemplate $template + * @param \CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand $command + * + * @return string + */ + protected function parseTemplate(IncidentTemplate $template, CreateIncidentCommand $command) + { + $template = $this->sandboxedTwigTemplateData($template->template); + + $vars = array_merge($command->template_vars, [ + 'incident' => [ + 'name' => $command->name, + 'status' => $command->status, + 'message' => $command->message, + 'visible' => $command->visible, + 'notify' => $command->notify, + 'stickied' => $command->stickied, + 'occurred_at' => $command->occurred_at, + 'component' => Component::find($command->component_id) ?: null, + 'component_status' => $command->component_status, + ], + ]); + + return $template->render('secondStageLoader', $vars); + } +} diff --git a/app/Bus/Handlers/Commands/Incident/RemoveIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/RemoveIncidentCommandHandler.php index 38196c666fac..5fa7fbf3730a 100644 --- a/app/Bus/Handlers/Commands/Incident/RemoveIncidentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Incident/RemoveIncidentCommandHandler.php @@ -13,9 +13,29 @@ use CachetHQ\Cachet\Bus\Commands\Incident\RemoveIncidentCommand; use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent; +use Illuminate\Contracts\Auth\Guard; class RemoveIncidentCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove incident command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove incident command. * @@ -27,7 +47,7 @@ public function handle(RemoveIncidentCommand $command) { $incident = $command->incident; - event(new IncidentWasRemovedEvent($incident)); + event(new IncidentWasRemovedEvent($this->auth->user(), $incident)); $incident->delete(); } diff --git a/app/Bus/Handlers/Commands/Incident/ReportIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/ReportIncidentCommandHandler.php deleted file mode 100644 index 28271b72e5a2..000000000000 --- a/app/Bus/Handlers/Commands/Incident/ReportIncidentCommandHandler.php +++ /dev/null @@ -1,138 +0,0 @@ - - */ -class ReportIncidentCommandHandler -{ - /** - * The date factory instance. - * - * @var \CachetHQ\Cachet\Dates\DateFactory - */ - protected $dates; - - /** - * Create a new report incident command handler instance. - * - * @param \CachetHQ\Cachet\Dates\DateFactory $dates - * - * @return void - */ - public function __construct(DateFactory $dates) - { - $this->dates = $dates; - } - - /** - * Handle the report incident command. - * - * @param \CachetHQ\Cachet\Bus\Commands\Incident\ReportIncidentCommand $command - * - * @return \CachetHQ\Cachet\Models\Incident - */ - public function handle(ReportIncidentCommand $command) - { - $data = [ - 'name' => $command->name, - 'status' => $command->status, - 'visible' => $command->visible, - 'stickied' => $command->stickied, - ]; - - if ($template = IncidentTemplate::where('slug', '=', $command->template)->first()) { - $data['message'] = $this->parseTemplate($template, $command); - } else { - $data['message'] = $command->message; - } - - // Link with the component. - if ($command->component_id) { - $data['component_id'] = $command->component_id; - } - - // The incident occurred at a different time. - if ($command->incident_date) { - $incidentDate = $this->dates->create('d/m/Y H:i', $command->incident_date); - - $data['created_at'] = $incidentDate; - $data['updated_at'] = $incidentDate; - } - - // Create the incident - $incident = Incident::create($data); - - // Update the component. - if ($component = Component::find($command->component_id)) { - dispatch(new UpdateComponentCommand( - Component::find($command->component_id), - null, - null, - $command->component_status, - null, - null, - null, - null - )); - } - - $incident->notify = (bool) $command->notify; - - event(new IncidentWasReportedEvent($incident)); - - return $incident; - } - - /** - * Compiles an incident template into an incident message. - * - * @param \CachetHQ\Cachet\Models\IncidentTemplate $template - * @param \CachetHQ\Cachet\Bus\Commands\Incident\ReportIncidentCommand $command - * - * @return string - */ - protected function parseTemplate(IncidentTemplate $template, ReportIncidentCommand $command) - { - $env = new Twig_Environment(new Twig_Loader_Array([])); - $template = $env->createTemplate($template->template); - - $vars = array_merge($command->template_vars, [ - 'incident' => [ - 'name' => $command->name, - 'status' => $command->status, - 'message' => $command->message, - 'visible' => $command->visible, - 'notify' => $command->notify, - 'stickied' => $command->stickied, - 'incident_date' => $command->incident_date, - 'component' => Component::find($command->component_id) ?: null, - 'component_status' => $command->component_status, - ], - ]); - - return $template->render($vars); - } -} diff --git a/app/Bus/Handlers/Commands/Incident/ReportMaintenanceCommandHandler.php b/app/Bus/Handlers/Commands/Incident/ReportMaintenanceCommandHandler.php deleted file mode 100644 index b63b767ac4f8..000000000000 --- a/app/Bus/Handlers/Commands/Incident/ReportMaintenanceCommandHandler.php +++ /dev/null @@ -1,66 +0,0 @@ -dates = $dates; - } - - /** - * Handle the report maintenance command. - * - * @param \CachetHQ\Cachet\Bus\Commands\Incident\ReportMaintenanceCommand $command - * - * @return \CachetHQ\Cachet\Models\Incident - */ - public function handle(ReportMaintenanceCommand $command) - { - $scheduledAt = $this->dates->create('d/m/Y H:i', $command->timestamp); - - $maintenanceEvent = Incident::create([ - 'name' => $command->name, - 'message' => $command->message, - 'scheduled_at' => $scheduledAt, - 'status' => 0, - 'visible' => 1, - 'stickied' => false, - ]); - - $maintenanceEvent->notify = (bool) $command->notify; - - event(new MaintenanceWasScheduledEvent($maintenanceEvent)); - - return $maintenanceEvent; - } -} diff --git a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php index 665e49a8c8cd..c85920253832 100644 --- a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php @@ -14,12 +14,13 @@ use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand; use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Bus\Exceptions\Incident\InvalidIncidentTimestampException; +use CachetHQ\Cachet\Bus\Handlers\Traits\StoresMeta; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\IncidentTemplate; -use Twig_Environment; -use Twig_Loader_Array; +use CachetHQ\Cachet\Services\Dates\DateFactory; +use Illuminate\Contracts\Auth\Guard; /** * This is the update incident command handler. @@ -28,23 +29,41 @@ */ class UpdateIncidentCommandHandler { + use StoresMeta; + + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + /** * The date factory instance. * - * @var \CachetHQ\Cachet\Dates\DateFactory + * @var \CachetHQ\Cachet\Services\Dates\DateFactory */ protected $dates; + /** + * Twig configuration array. + */ + protected $twigConfig; + /** * Create a new update incident command handler instance. * - * @param \CachetHQ\Cachet\Dates\DateFactory $dates + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates * * @return void */ - public function __construct(DateFactory $dates) + public function __construct(Guard $auth, DateFactory $dates) { + $this->auth = $auth; $this->dates = $dates; + + $this->twigConfig = $twigConfig = config('cachet.twig'); } /** @@ -61,21 +80,28 @@ public function handle(UpdateIncidentCommand $command) } $incident = $command->incident; - $incident->update($this->filter($command)); + $incident->fill($this->filter($command)); // The incident occurred at a different time. - if ($command->incident_date) { - $incidentDate = $this->dates->create('d/m/Y H:i', $command->incident_date); + if ($occurredAt = $command->occurred_at) { + if ($date = $this->dates->create('Y-m-d H:i', $occurredAt)) { + $incident->fill(['occurred_at' => $date]); + } else { + throw new InvalidIncidentTimestampException("Unable to pass timestamp {$occurredAt}"); + } + } + + // Rather than making lots of updates, just fill and save. + $incident->save(); - $incident->update([ - 'created_at' => $incidentDate, - 'updated_at' => $incidentDate, - ]); + // Store any meta? + if ($meta = $command->meta) { + $this->storeMeta($command->meta, 'incidents', $incident->id); } // Update the component. if ($component = Component::find($command->component_id)) { - dispatch(new UpdateComponentCommand( + execute(new UpdateComponentCommand( Component::find($command->component_id), null, null, @@ -83,11 +109,14 @@ public function handle(UpdateIncidentCommand $command) null, null, null, - null + null, + null, + null, + true // Silent mode )); } - event(new IncidentWasUpdatedEvent($incident)); + event(new IncidentWasUpdatedEvent($this->auth->user(), $incident)); return $incident; } @@ -117,6 +146,32 @@ protected function filter(UpdateIncidentCommand $command) }); } + protected function sandboxedTwigTemplateData(string $templateData) + { + $policy = new \Twig\Sandbox\SecurityPolicy( + $this->twigConfig['tags'], + $this->twigConfig['filters'], + $this->twigConfig['methods'], + $this->twigConfig['props'], + $this->twigConfig['functions'] + ); + $sandbox = new \Twig\Extension\SandboxExtension($policy); + + $templateBasicLoader = new \Twig\Loader\ArrayLoader([ + 'firstStageLoader' => $templateData, + ]); + + $sandBoxBasicLoader = new \Twig\Loader\ArrayLoader([ + 'secondStageLoader' => '{% sandbox %}{% include "firstStageLoader" %} {% endsandbox %}', + ]); + + $hardenedLoader = new \Twig\Loader\ChainLoader([$templateBasicLoader, $sandBoxBasicLoader]); + $twig = new \Twig\Environment($hardenedLoader); + $twig->addExtension($sandbox); + + return $twig; + } + /** * Compiles an incident template into an incident message. * @@ -127,8 +182,7 @@ protected function filter(UpdateIncidentCommand $command) */ protected function parseTemplate(IncidentTemplate $template, UpdateIncidentCommand $command) { - $env = new Twig_Environment(new Twig_Loader_Array([])); - $template = $env->createTemplate($template->template); + $template = $this->sandboxedTwigTemplateData($template->template); $vars = array_merge($command->template_vars, [ 'incident' => [ @@ -138,12 +192,12 @@ protected function parseTemplate(IncidentTemplate $template, UpdateIncidentComma 'visible' => $command->visible, 'notify' => $command->notify, 'stickied' => $command->stickied, - 'incident_date' => $command->incident_date, + 'occurred_at' => $command->occurred_at, 'component' => Component::find($command->component_id) ?: null, 'component_status' => $command->component_status, ], ]); - return $template->render($vars); + return $template->render('secondStageLoader', $vars); } } diff --git a/app/Bus/Handlers/Commands/IncidentUpdate/ReportIncidentUpdateCommandHandler.php b/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php similarity index 62% rename from app/Bus/Handlers/Commands/IncidentUpdate/ReportIncidentUpdateCommandHandler.php rename to app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php index 3ede0f6e73c9..20dd2c84a933 100644 --- a/app/Bus/Handlers/Commands/IncidentUpdate/ReportIncidentUpdateCommandHandler.php +++ b/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php @@ -12,25 +12,45 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\IncidentUpdate; use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand; -use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\ReportIncidentUpdateCommand; +use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\CreateIncidentUpdateCommand; use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasReportedEvent; use CachetHQ\Cachet\Models\IncidentUpdate; +use Illuminate\Contracts\Auth\Guard; /** * This is the report incident update command handler. * * @author James Brooks */ -class ReportIncidentUpdateCommandHandler +class CreateIncidentUpdateCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new report incident update command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the report incident command. * - * @param \CachetHQ\Cachet\Bus\Commands\IncidentUpdate\ReportIncidentUpdateCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\IncidentUpdate\CreateIncidentUpdateCommand $command * * @return \CachetHQ\Cachet\Models\IncidentUpdate */ - public function handle(ReportIncidentUpdateCommand $command) + public function handle(CreateIncidentUpdateCommand $command) { $data = [ 'incident_id' => $command->incident->id, @@ -43,7 +63,7 @@ public function handle(ReportIncidentUpdateCommand $command) $update = IncidentUpdate::create($data); // Update the original incident with the new status. - dispatch(new UpdateIncidentCommand( + execute(new UpdateIncidentCommand( $command->incident, null, $command->status, @@ -58,7 +78,7 @@ public function handle(ReportIncidentUpdateCommand $command) [] )); - event(new IncidentUpdateWasReportedEvent($update)); + event(new IncidentUpdateWasReportedEvent($this->auth->user(), $update)); return $update; } diff --git a/app/Bus/Handlers/Commands/IncidentUpdate/RemoveIncidentUpdateCommandHandler.php b/app/Bus/Handlers/Commands/IncidentUpdate/RemoveIncidentUpdateCommandHandler.php index 40bc6def6298..ee5cc5b7894e 100644 --- a/app/Bus/Handlers/Commands/IncidentUpdate/RemoveIncidentUpdateCommandHandler.php +++ b/app/Bus/Handlers/Commands/IncidentUpdate/RemoveIncidentUpdateCommandHandler.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\RemoveIncidentUpdateCommand; use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasRemovedEvent; +use Illuminate\Contracts\Auth\Guard; /** * This is the remove incident update command handler. @@ -21,6 +22,25 @@ */ class RemoveIncidentUpdateCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove incident update command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove incident update command. * @@ -32,7 +52,7 @@ public function handle(RemoveIncidentUpdateCommand $command) { $update = $command->incidentUpdate; - event(new IncidentUpdateWasRemovedEvent($update)); + event(new IncidentUpdateWasRemovedEvent($this->auth->user(), $update)); $update->delete(); } diff --git a/app/Bus/Handlers/Commands/IncidentUpdate/UpdateIncidentUpdateCommandHandler.php b/app/Bus/Handlers/Commands/IncidentUpdate/UpdateIncidentUpdateCommandHandler.php index e65939803327..c3086ea7d747 100644 --- a/app/Bus/Handlers/Commands/IncidentUpdate/UpdateIncidentUpdateCommandHandler.php +++ b/app/Bus/Handlers/Commands/IncidentUpdate/UpdateIncidentUpdateCommandHandler.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\UpdateIncidentUpdateCommand; use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasUpdatedEvent; +use Illuminate\Contracts\Auth\Guard; /** * This is the update incident update command handler. @@ -21,6 +22,25 @@ */ class UpdateIncidentUpdateCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new update incident update command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the update incident update command. * @@ -32,7 +52,7 @@ public function handle(UpdateIncidentUpdateCommand $command) { $command->update->update($this->filter($command)); - event(new IncidentUpdateWasUpdatedEvent($command->update)); + event(new IncidentUpdateWasUpdatedEvent($this->auth->user(), $command->update)); return $command->update; } diff --git a/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php b/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php index ba669a8ff4f4..bd2603bebbd0 100644 --- a/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php +++ b/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php @@ -20,7 +20,7 @@ class ClaimInviteCommandHandler /** * Handle the claim invite command. * - * @param \CachetHQ\Cachet\Bus\Commands\User\ClaimInviteCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\Invite\ClaimInviteCommand $command * * @return void */ @@ -28,8 +28,7 @@ public function handle(ClaimInviteCommand $command) { $invite = $command->invite; - $invite->claimed_at = Carbon::now(); - $invite->save(); + $invite->update(['claimed_at' => Carbon::now()]); event(new InviteWasClaimedEvent($invite)); } diff --git a/app/Bus/Handlers/Commands/Metric/AddMetricCommandHandler.php b/app/Bus/Handlers/Commands/Metric/CreateMetricCommandHandler.php similarity index 55% rename from app/Bus/Handlers/Commands/Metric/AddMetricCommandHandler.php rename to app/Bus/Handlers/Commands/Metric/CreateMetricCommandHandler.php index a5733b280be1..cc410ce0b242 100644 --- a/app/Bus/Handlers/Commands/Metric/AddMetricCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/CreateMetricCommandHandler.php @@ -11,20 +11,40 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\Metric; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricCommand; -use CachetHQ\Cachet\Bus\Events\Metric\MetricWasAddedEvent; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricCommand; +use CachetHQ\Cachet\Bus\Events\Metric\MetricWasCreatedEvent; use CachetHQ\Cachet\Models\Metric; +use Illuminate\Contracts\Auth\Guard; -class AddMetricCommandHandler +class CreateMetricCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new add metric command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the add metric command. * - * @param \CachetHQ\Cachet\Bus\Commands\Metric\AddMetricCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricCommand $command * * @return \CachetHQ\Cachet\Models\Metric */ - public function handle(AddMetricCommand $command) + public function handle(CreateMetricCommand $command) { $metric = Metric::create([ 'name' => $command->name, @@ -37,9 +57,10 @@ public function handle(AddMetricCommand $command) 'default_view' => $command->default_view, 'threshold' => $command->threshold, 'order' => $command->order, + 'visible' => $command->visible, ]); - event(new MetricWasAddedEvent($metric)); + event(new MetricWasCreatedEvent($this->auth->user(), $metric)); return $metric; } diff --git a/app/Bus/Handlers/Commands/Metric/AddMetricPointCommandHandler.php b/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php similarity index 51% rename from app/Bus/Handlers/Commands/Metric/AddMetricPointCommandHandler.php rename to app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php index 90e2f5f0831b..8fdbe1ca21c6 100644 --- a/app/Bus/Handlers/Commands/Metric/AddMetricPointCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php @@ -11,41 +11,51 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\Metric; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricPointCommand; -use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasAddedEvent; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricPointCommand; +use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasCreatedEvent; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Services\Dates\DateFactory; use Carbon\Carbon; +use Illuminate\Contracts\Auth\Guard; -class AddMetricPointCommandHandler +class CreateMetricPointCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + /** * The date factory instance. * - * @var \CachetHQ\Cachet\Dates\DateFactory + * @var \CachetHQ\Cachet\Services\Dates\DateFactory */ protected $dates; /** * Create a new add metric point command handler instance. * - * @param \CachetHQ\Cachet\Dates\DateFactory $dates + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates * * @return void */ - public function __construct(DateFactory $dates) + public function __construct(Guard $auth, DateFactory $dates) { + $this->auth = $auth; $this->dates = $dates; } /** * Handle the add metric point command. * - * @param \CachetHQ\Cachet\Bus\Commands\Metric\AddMetricPointCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricPointCommand $command * * @return \CachetHQ\Cachet\Models\MetricPoint */ - public function handle(AddMetricPointCommand $command) + public function handle(CreateMetricPointCommand $command) { $metric = $command->metric; $createdAt = $command->created_at; @@ -55,17 +65,23 @@ public function handle(AddMetricPointCommand $command) $point->increment('counter', 1); - event(new MetricPointWasAddedEvent($point)); + event(new MetricPointWasCreatedEvent($this->auth->user(), $point)); return $point; } - protected function findOrCreatePoint(AddMetricPointCommand $command) + /** + * Find or create a metric point. + * + * @param \CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricPointCommand $command + * + * @return \CachetHQ\Cachet\Models\MetricPoint + */ + protected function findOrCreatePoint(CreateMetricPointCommand $command) { - $buffer = Carbon::now()->subMinutes($command->metric->threshold); - $point = MetricPoint::where('metric_id', '=', $command->metric->id)->where('value', '=', $command->value)->where('created_at', '>=', $buffer)->first(); + $buffer = Carbon::now()->subMinutes($command->metric->threshold - 1)->startOfMinute(); - if ($point) { + if ($point = MetricPoint::where('metric_id', '=', $command->metric->id)->where('value', '=', $command->value)->where('created_at', '>=', $buffer)->first()) { return $point; } diff --git a/app/Bus/Handlers/Commands/Metric/RemoveMetricCommandHandler.php b/app/Bus/Handlers/Commands/Metric/RemoveMetricCommandHandler.php index cd15e0ebf5de..478d29523bce 100644 --- a/app/Bus/Handlers/Commands/Metric/RemoveMetricCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/RemoveMetricCommandHandler.php @@ -14,9 +14,29 @@ use CachetHQ\Cachet\Bus\Commands\Metric\RemoveMetricCommand; use CachetHQ\Cachet\Bus\Events\Metric\MetricWasRemovedEvent; use CachetHQ\Cachet\Models\Metric; +use Illuminate\Contracts\Auth\Guard; class RemoveMetricCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove metric command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove metric command. * @@ -28,7 +48,7 @@ public function handle(RemoveMetricCommand $command) { $metric = $command->metric; - event(new MetricWasRemovedEvent($metric)); + event(new MetricWasRemovedEvent($this->auth->user(), $metric)); $metric->delete(); } diff --git a/app/Bus/Handlers/Commands/Metric/RemoveMetricPointCommandHandler.php b/app/Bus/Handlers/Commands/Metric/RemoveMetricPointCommandHandler.php index f7d6f6d7a26d..7679942ee5b5 100644 --- a/app/Bus/Handlers/Commands/Metric/RemoveMetricPointCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/RemoveMetricPointCommandHandler.php @@ -14,9 +14,29 @@ use CachetHQ\Cachet\Bus\Commands\Metric\RemoveMetricPointCommand; use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasRemovedEvent; use CachetHQ\Cachet\Models\Metric; +use Illuminate\Contracts\Auth\Guard; class RemoveMetricPointCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new remove metric point command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the remove metric point command. * @@ -28,7 +48,7 @@ public function handle(RemoveMetricPointCommand $command) { $metricPoint = $command->metricPoint; - event(new MetricPointWasRemovedEvent($metricPoint)); + event(new MetricPointWasRemovedEvent($this->auth->user(), $metricPoint)); $metricPoint->delete(); } diff --git a/app/Bus/Handlers/Commands/Metric/UpdateMetricCommandHandler.php b/app/Bus/Handlers/Commands/Metric/UpdateMetricCommandHandler.php index e8abda242818..1ba3636be28d 100644 --- a/app/Bus/Handlers/Commands/Metric/UpdateMetricCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/UpdateMetricCommandHandler.php @@ -14,9 +14,29 @@ use CachetHQ\Cachet\Bus\Commands\Metric\UpdateMetricCommand; use CachetHQ\Cachet\Bus\Events\Metric\MetricWasUpdatedEvent; use CachetHQ\Cachet\Models\Metric; +use Illuminate\Contracts\Auth\Guard; class UpdateMetricCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new update metric command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Handle the update metric command. * @@ -30,7 +50,7 @@ public function handle(UpdateMetricCommand $command) $metric->update($this->filter($command)); - event(new MetricWasUpdatedEvent($metric)); + event(new MetricWasUpdatedEvent($this->auth->user(), $metric)); return $metric; } @@ -55,6 +75,7 @@ protected function filter(UpdateMetricCommand $command) 'default_view' => $command->default_view, 'threshold' => $command->threshold, 'order' => $command->order, + 'visible' => $command->visible, ]; return array_filter($params, function ($val) { diff --git a/app/Bus/Handlers/Commands/Metric/UpdateMetricPointCommandHandler.php b/app/Bus/Handlers/Commands/Metric/UpdateMetricPointCommandHandler.php index aec34b631012..f61e1733375e 100644 --- a/app/Bus/Handlers/Commands/Metric/UpdateMetricPointCommandHandler.php +++ b/app/Bus/Handlers/Commands/Metric/UpdateMetricPointCommandHandler.php @@ -13,26 +13,36 @@ use CachetHQ\Cachet\Bus\Commands\Metric\UpdateMetricPointCommand; use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasUpdatedEvent; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Services\Dates\DateFactory; +use Illuminate\Contracts\Auth\Guard; class UpdateMetricPointCommandHandler { + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + /** * The date factory instance. * - * @var \CachetHQ\Cachet\Dates\DateFactory + * @var \CachetHQ\Cachet\Services\Dates\DateFactory */ protected $dates; /** * Create a new update metric point command handler instance. * - * @param \CachetHQ\Cachet\Dates\DateFactory $dates + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates * * @return void */ - public function __construct(DateFactory $dates) + public function __construct(Guard $auth, DateFactory $dates) { + $this->auth = $auth; $this->dates = $dates; } @@ -60,7 +70,7 @@ public function handle(UpdateMetricPointCommand $command) $point->update($data); - event(new MetricPointWasUpdatedEvent($point)); + event(new MetricPointWasUpdatedEvent($this->auth->user(), $point)); return $point; } diff --git a/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php new file mode 100644 index 000000000000..9069eadb9c01 --- /dev/null +++ b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php @@ -0,0 +1,107 @@ + + */ +class CreateScheduleCommandHandler +{ + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * The date factory instance. + * + * @var \CachetHQ\Cachet\Services\Dates\DateFactory + */ + protected $dates; + + /** + * Create a new update schedule command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * + * @return void + */ + public function __construct(Guard $auth, DateFactory $dates) + { + $this->auth = $auth; + $this->dates = $dates; + } + + /** + * Handle the create schedule command. + * + * @param \CachetHQ\Cachet\Bus\Commands\Schedule\CreateScheduleCommand $command + * + * @return \CachetHQ\Cachet\Models\Schedule + */ + public function handle(CreateScheduleCommand $command) + { + try { + $schedule = Schedule::create($this->filter($command)); + event(new ScheduleWasCreatedEvent($this->auth->user(), $schedule, (bool) $command->notify)); + } catch (InvalidArgumentException $e) { + throw new ValidationException(new MessageBag([$e->getMessage()])); + } + + return $schedule; + } + + /** + * Filter the command data. + * + * @param \CachetHQ\Cachet\Bus\Commands\Schedule\CreateScheduleCommand $command + * + * @return array + */ + protected function filter(CreateScheduleCommand $command) + { + $scheduledAt = $this->dates->create('Y-m-d H:i', $command->scheduled_at); + + if ($completedAt = $command->completed_at) { + $completedAt = $this->dates->create('Y-m-d H:i', $command->completed_at); + } + + $params = [ + 'name' => $command->name, + 'message' => $command->message, + 'status' => $command->status, + 'scheduled_at' => $scheduledAt, + 'completed_at' => $completedAt, + 'notify' => $command->notify, + ]; + + $availableParams = array_filter($params, function ($val) { + return $val !== null && $val !== ''; + }); + + return $availableParams; + } +} diff --git a/app/Bus/Handlers/Commands/Schedule/DeleteScheduleCommandHandler.php b/app/Bus/Handlers/Commands/Schedule/DeleteScheduleCommandHandler.php new file mode 100644 index 000000000000..cf5f62278a54 --- /dev/null +++ b/app/Bus/Handlers/Commands/Schedule/DeleteScheduleCommandHandler.php @@ -0,0 +1,59 @@ + + */ +class DeleteScheduleCommandHandler +{ + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new delete schedule command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + + /** + * Handle the delete schedule command. + * + * @param \CachetHQ\Cachet\Bus\Commands\Schedule\DeleteScheduleCommand $command + * + * @return void + */ + public function handle(DeleteScheduleCommand $command) + { + $schedule = $command->schedule; + + event(new ScheduleWasRemovedEvent($this->auth->user(), $schedule)); + + $schedule->delete(); + } +} diff --git a/app/Bus/Handlers/Commands/Schedule/UpdateScheduleCommandHandler.php b/app/Bus/Handlers/Commands/Schedule/UpdateScheduleCommandHandler.php new file mode 100644 index 000000000000..72f743280104 --- /dev/null +++ b/app/Bus/Handlers/Commands/Schedule/UpdateScheduleCommandHandler.php @@ -0,0 +1,102 @@ + + */ +class UpdateScheduleCommandHandler +{ + /** + * The authentication guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * The date factory instance. + * + * @var \CachetHQ\Cachet\Services\Dates\DateFactory + */ + protected $dates; + + /** + * Create a new update schedule command handler instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * + * @return void + */ + public function __construct(Guard $auth, DateFactory $dates) + { + $this->auth = $auth; + $this->dates = $dates; + } + + /** + * Handle the update schedule command. + * + * @param \CachetHQ\Cachet\Bus\Commands\Schedule\UpdateScheduleCommand $command + * + * @return \CachetHQ\Cachet\Models\Schedule + */ + public function handle(UpdateScheduleCommand $command) + { + $schedule = $command->schedule; + + $schedule->update($this->filter($command)); + + event(new ScheduleWasUpdatedEvent($this->auth->user(), $schedule)); + + return $schedule; + } + + /** + * Filter the command data. + * + * @param \CachetHQ\Cachet\Bus\Commands\Schedule\UpdateScheduleCommand $command + * + * @return array + */ + protected function filter(UpdateScheduleCommand $command) + { + $params = [ + 'name' => $command->name, + 'message' => $command->message, + 'status' => $command->status, + ]; + + if ($scheduledAt = $command->scheduled_at) { + $params['scheduled_at'] = $this->dates->create('Y-m-d H:i', $scheduledAt); + } + + if ($completedAt = $command->completed_at) { + $params['completed_at'] = $this->dates->create('Y-m-d H:i', $completedAt); + } + + $availableParams = array_filter($params, function ($val) { + return $val !== null; + }); + + return $availableParams; + } +} diff --git a/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php index dba6948f26de..1dde43da4a84 100644 --- a/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php +++ b/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php @@ -17,6 +17,7 @@ use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Models\Subscription; +use CachetHQ\Cachet\Notifications\Subscriber\VerifySubscriptionNotification; /** * This is the subscribe subscriber command handler. @@ -49,7 +50,7 @@ public function handle(SubscribeSubscriberCommand $command) $components = Component::all(); } - $components->map(function ($component) use ($subscriber) { + $components->each(function ($component) use ($subscriber) { Subscription::create([ 'subscriber_id' => $subscriber->id, 'component_id' => $component->id, @@ -57,11 +58,13 @@ public function handle(SubscribeSubscriberCommand $command) }); if ($command->verified) { - dispatch(new VerifySubscriberCommand($subscriber)); + execute(new VerifySubscriberCommand($subscriber)); } else { - event(new SubscriberHasSubscribedEvent($subscriber)); + $subscriber->notify(new VerifySubscriptionNotification()); } + event(new SubscriberHasSubscribedEvent($subscriber)); + $subscriber->load('subscriptions'); return $subscriber; diff --git a/app/Bus/Handlers/Commands/Subscriber/UnsubscribeSubscriberCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/UnsubscribeSubscriberCommandHandler.php index 7dac8828fdd6..be0dd0217528 100644 --- a/app/Bus/Handlers/Commands/Subscriber/UnsubscribeSubscriberCommandHandler.php +++ b/app/Bus/Handlers/Commands/Subscriber/UnsubscribeSubscriberCommandHandler.php @@ -13,8 +13,14 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriberCommand; use CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasUnsubscribedEvent; -use CachetHQ\Cachet\Models\Subscriber; +/** + * This is the unsubscribe subscriber command class. + * + * @author Joseph Cohem + * @author Graham Campbell + * @author James Brooks + */ class UnsubscribeSubscriberCommandHandler { /** @@ -28,8 +34,12 @@ public function handle(UnsubscribeSubscriberCommand $command) { $subscriber = $command->subscriber; + // First remove subscriptions. + $subscriber->subscriptions()->delete(); + event(new SubscriberHasUnsubscribedEvent($subscriber)); + // Then remove the subscriber. $subscriber->delete(); } } diff --git a/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php index 6ac9d2c0b02b..5e8a1dd5a8c7 100644 --- a/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php +++ b/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php @@ -36,7 +36,7 @@ public function handle(UpdateSubscriberSubscriptionCommand $command) $subscriber = $command->subscriber; $subscriptions = $command->subscriptions ?: []; - $components = Component::all(); + $components = Component::enabled()->get(); $updateSubscriptions = $components->filter(function ($item) use ($subscriptions) { return in_array($item->id, $subscriptions); @@ -47,12 +47,12 @@ public function handle(UpdateSubscriberSubscriptionCommand $command) $subscriber->subscriptions()->delete(); if (!$updateSubscriptions->isEmpty()) { - foreach ($updateSubscriptions as $subscription) { + $updateSubscriptions->each(function ($subscription) use ($subscriber) { Subscription::firstOrCreate([ 'subscriber_id' => $subscriber->id, 'component_id' => $subscription->id, ]); - } + }); } $subscriber->save(); diff --git a/app/Bus/Handlers/Commands/Subscriber/VerifySubscriberCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/VerifySubscriberCommandHandler.php index b5c104f681bb..d56f928f5450 100644 --- a/app/Bus/Handlers/Commands/Subscriber/VerifySubscriberCommandHandler.php +++ b/app/Bus/Handlers/Commands/Subscriber/VerifySubscriberCommandHandler.php @@ -30,8 +30,7 @@ public function handle(VerifySubscriberCommand $command) $subscriber = $command->subscriber; // Mark the subscriber as verified. - $subscriber->verified_at = Carbon::now(); - $subscriber->save(); + $subscriber->update(['verified_at' => Carbon::now()]); event(new SubscriberHasVerifiedEvent($subscriber)); } diff --git a/app/Bus/Handlers/Commands/System/Config/UpdateConfigCommandHandler.php b/app/Bus/Handlers/Commands/System/Config/UpdateConfigCommandHandler.php new file mode 100644 index 000000000000..ff7d1f4e101e --- /dev/null +++ b/app/Bus/Handlers/Commands/System/Config/UpdateConfigCommandHandler.php @@ -0,0 +1,68 @@ + + */ +class UpdateConfigCommandHandler +{ + /** + * Handle update config command handler instance. + * + * @param \CachetHQ\Cachet\Bus\Commands\System\Config\UpdateConfigCommand $command + * + * @return void + */ + public function handle(UpdateConfigCommand $command) + { + foreach ($command->values as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Writes to the .env file with given parameters. + * + * @param string $key + * @param mixed $value + * + * @return void + */ + protected function writeEnv($key, $value) + { + $dir = app()->environmentPath(); + $file = app()->environmentFile(); + $path = "{$dir}/{$file}"; + + try { + (new Dotenv($dir, $file))->load(); + + $envKey = strtoupper($key); + $envValue = env($envKey) ?: 'null'; + + file_put_contents($path, str_replace( + "{$envKey}={$envValue}", + "{$envKey}={$value}", + file_get_contents($path) + )); + } catch (InvalidPathException $e) { + throw $e; + } + } +} diff --git a/app/Bus/Handlers/Commands/User/AddUserCommandHandler.php b/app/Bus/Handlers/Commands/User/CreateUserCommandHandler.php similarity index 66% rename from app/Bus/Handlers/Commands/User/AddUserCommandHandler.php rename to app/Bus/Handlers/Commands/User/CreateUserCommandHandler.php index 856e33bbb0d7..9ae22e67b846 100644 --- a/app/Bus/Handlers/Commands/User/AddUserCommandHandler.php +++ b/app/Bus/Handlers/Commands/User/CreateUserCommandHandler.php @@ -11,25 +11,25 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\User; -use CachetHQ\Cachet\Bus\Commands\User\AddUserCommand; -use CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent; +use CachetHQ\Cachet\Bus\Commands\User\CreateUserCommand; +use CachetHQ\Cachet\Bus\Events\User\UserWasCreatedEvent; use CachetHQ\Cachet\Models\User; /** - * This is the add user command handler. + * This is the create user command handler. * * @author James Brooks */ -class AddUserCommandHandler +class CreateUserCommandHandler { /** * Handle the add user command. * - * @param \CachetHQ\Cachet\Bus\Commands\User\AddUserCommand $command + * @param \CachetHQ\Cachet\Bus\Commands\User\CreateUserCommand $command * * @return \CachetHQ\Cachet\Models\User */ - public function handle(AddUserCommand $command) + public function handle(CreateUserCommand $command) { $user = User::create([ 'username' => $command->username, @@ -38,7 +38,7 @@ public function handle(AddUserCommand $command) 'level' => $command->level, ]); - event(new UserWasAddedEvent($user)); + event(new UserWasCreatedEvent($user)); return $user; } diff --git a/app/Bus/Handlers/Commands/User/GenerateApiTokenCommandHandler.php b/app/Bus/Handlers/Commands/User/GenerateApiTokenCommandHandler.php index 99efbe41e3a3..f7b8ab539092 100644 --- a/app/Bus/Handlers/Commands/User/GenerateApiTokenCommandHandler.php +++ b/app/Bus/Handlers/Commands/User/GenerateApiTokenCommandHandler.php @@ -12,6 +12,7 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\User; use CachetHQ\Cachet\Bus\Commands\User\GenerateApiTokenCommand; +use CachetHQ\Cachet\Bus\Events\User\UserRegeneratedApiTokenEvent; use CachetHQ\Cachet\Models\User; class GenerateApiTokenCommandHandler @@ -27,9 +28,8 @@ public function handle(GenerateApiTokenCommand $command) { $user = $command->user; - $user->api_key = User::generateApiKey(); - $user->save(); + $user->update(['api_key' => User::generateApiKey()]); - //event(new GeneratedApiTokenEvent($user)); + event(new UserRegeneratedApiTokenEvent($user)); } } diff --git a/app/Bus/Handlers/Commands/User/InviteUserCommandHandler.php b/app/Bus/Handlers/Commands/User/InviteUserCommandHandler.php index fc515d5e6c1c..164a4220308b 100644 --- a/app/Bus/Handlers/Commands/User/InviteUserCommandHandler.php +++ b/app/Bus/Handlers/Commands/User/InviteUserCommandHandler.php @@ -14,6 +14,7 @@ use CachetHQ\Cachet\Bus\Commands\User\InviteUserCommand; use CachetHQ\Cachet\Bus\Events\User\UserWasInvitedEvent; use CachetHQ\Cachet\Models\Invite; +use CachetHQ\Cachet\Notifications\User\InviteUserNotification; /** * This is the invite user command handler. @@ -36,6 +37,8 @@ public function handle(InviteUserCommand $command) 'email' => $email, ]); + $invite->notify(new InviteUserNotification()); + event(new UserWasInvitedEvent($invite)); } } diff --git a/app/Bus/Handlers/Commands/User/SignupUserCommandHandler.php b/app/Bus/Handlers/Commands/User/SignupUserCommandHandler.php index 740b8a4c0eab..bb274a2faac0 100644 --- a/app/Bus/Handlers/Commands/User/SignupUserCommandHandler.php +++ b/app/Bus/Handlers/Commands/User/SignupUserCommandHandler.php @@ -12,7 +12,7 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\User; use CachetHQ\Cachet\Bus\Commands\User\SignupUserCommand; -use CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\User\UserWasCreatedEvent; use CachetHQ\Cachet\Models\User; class SignupUserCommandHandler @@ -33,7 +33,7 @@ public function handle(SignupUserCommand $command) 'level' => User::LEVEL_USER, ]); - event(new UserWasAddedEvent($user)); + event(new UserWasCreatedEvent($user)); return $user; } diff --git a/app/Bus/Handlers/Events/ActionStorageHandler.php b/app/Bus/Handlers/Events/ActionStorageHandler.php new file mode 100644 index 000000000000..3ccc7a0fbe38 --- /dev/null +++ b/app/Bus/Handlers/Events/ActionStorageHandler.php @@ -0,0 +1,49 @@ + + * @author James Brooks + */ +class ActionStorageHandler +{ + /** + * Handle the any actions that need storing. + * + * @param \CachetHQ\Cachet\Bus\Events\ActionInterface $event + * + * @return void + */ + public function handle(ActionInterface $event) + { + $data = $event->getAction(); + + $action = [ + 'class_name' => get_class($event), + 'user_id' => $data['user']->id, + 'username' => $data['user']->username, + 'description' => $data['description'], + ]; + + if (isset($data['information'])) { + $action['information'] = $data['information']; + } + + Action::create($action); + } +} diff --git a/app/Bus/Handlers/Events/Beacon/LogBeaconFailedHandler.php b/app/Bus/Handlers/Events/Beacon/LogBeaconFailedHandler.php new file mode 100644 index 000000000000..f69cf49f2c0a --- /dev/null +++ b/app/Bus/Handlers/Events/Beacon/LogBeaconFailedHandler.php @@ -0,0 +1,34 @@ + + */ +class LogBeaconFailedHandler +{ + /** + * Handle the event. + * + * @param \CachetHQ\Cachet\Bus\Events\Beacon\BeaconFailedToSendEvent $event + * + * @return void + */ + public function handle(BeaconFailedToSendEvent $event) + { + logger('Beacon failed.'); + } +} diff --git a/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php b/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php index 7ed768a3868c..6ecdbfca3a0f 100644 --- a/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php +++ b/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php @@ -11,20 +11,20 @@ namespace CachetHQ\Cachet\Bus\Handlers\Events\Component; -use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Subscriber; -use Illuminate\Contracts\Mail\MailQueue; -use McCool\LaravelAutoPresenter\Facades\AutoPresenter; +use CachetHQ\Cachet\Notifications\Component\ComponentStatusChangedNotification; class SendComponentUpdateEmailNotificationHandler { /** - * The mailer instance. + * The system instance. * - * @var \Illuminate\Contracts\Mail\Mailer + * @var \CachetHQ\Cachet\Integrations\Contracts\System */ - protected $mailer; + protected $system; /** * The subscriber instance. @@ -36,28 +36,32 @@ class SendComponentUpdateEmailNotificationHandler /** * Create a new send incident email notification handler. * - * @param \Illuminate\Contracts\Mail\Mailer $mailer * @param \CachetHQ\Cachet\Models\Subscriber $subscriber * * @return void */ - public function __construct(MailQueue $mailer, Subscriber $subscriber) + public function __construct(System $system, Subscriber $subscriber) { - $this->mailer = $mailer; + $this->system = $system; $this->subscriber = $subscriber; } /** * Handle the event. * - * @param \CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent $event + * @param \CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent $event * * @return void */ - public function handle(ComponentStatusWasUpdatedEvent $event) + public function handle(ComponentStatusWasChangedEvent $event) { $component = $event->component; + // If we're silent or the notifications are suppressed don't send this. + if ($event->silent || !$this->system->canNotifySubscribers()) { + return; + } + // Don't email anything if the status hasn't changed. if ($event->original_status === $event->new_status) { return; @@ -66,9 +70,9 @@ public function handle(ComponentStatusWasUpdatedEvent $event) // First notify all global subscribers. $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); - foreach ($globalSubscribers as $subscriber) { - $this->notify($component, $subscriber); - } + $globalSubscribers->each(function ($subscriber) use ($component, $event) { + $subscriber->notify(new ComponentStatusChangedNotification($component, $event->new_status)); + }); $notified = $globalSubscribers->pluck('id')->all(); @@ -81,37 +85,8 @@ public function handle(ComponentStatusWasUpdatedEvent $event) return in_array($subscriber->id, $notified); }); - foreach ($componentSubscribers as $subscriber) { - $this->notify($component, $subscriber); - } - } - - /** - * Send notification to subscriber. - * - * @param \CachetHQ\Cachet\Models\Component $component - * @param \CachetHQ\Cachet\Models\Subscriber $subscriber - * - * @return \Illuminate\Database\Eloquent\Collection - */ - public function notify(Component $component, Subscriber $subscriber) - { - $component = AutoPresenter::decorate($component); - - $mail = [ - 'subject' => trans('cachet.subscriber.email.component.subject'), - 'component_name' => $component->name, - 'component_human_status' => $component->human_status, - ]; - - $mail['email'] = $subscriber->email; - $mail['manage_link'] = cachet_route('subscribe.manage', [$subscriber->verify_code]); - - $this->mailer->queue([ - 'html' => 'emails.components.update-html', - 'text' => 'emails.components.update-text', - ], $mail, function ($message) use ($mail) { - $message->to($mail['email'])->subject($mail['subject']); + $componentSubscribers->each(function ($subscriber) use ($component, $event) { + $subscriber->notify(new ComponentStatusChangedNotification($component, $event->new_status)); }); } } diff --git a/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php b/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php index 24b10c7d0e70..d30916d10de3 100644 --- a/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php +++ b/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php @@ -11,20 +11,19 @@ namespace CachetHQ\Cachet\Bus\Handlers\Events\Incident; -use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasReportedEvent; +use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\Subscriber; -use Illuminate\Contracts\Mail\MailQueue; -use Illuminate\Mail\Message; -use McCool\LaravelAutoPresenter\Facades\AutoPresenter; +use CachetHQ\Cachet\Notifications\Incident\NewIncidentNotification; class SendIncidentEmailNotificationHandler { /** - * The mailer instance. + * The system instance. * - * @var \Illuminate\Contracts\Mail\Mailer + * @var \CachetHQ\Cachet\Integrations\Contracts\System */ - protected $mailer; + protected $system; /** * The subscriber instance. @@ -36,43 +35,45 @@ class SendIncidentEmailNotificationHandler /** * Create a new send incident email notification handler. * - * @param \Illuminate\Contracts\Mail\Mailer $mailer - * @param \CachetHQ\Cachet\Models\Subscriber $subscriber + * @param \CachetHQ\Cachet\Integrations\Contracts\System $system + * @param \CachetHQ\Cachet\Models\Subscriber $subscriber * * @return void */ - public function __construct(MailQueue $mailer, Subscriber $subscriber) + public function __construct(System $system, Subscriber $subscriber) { - $this->mailer = $mailer; + $this->system = $system; $this->subscriber = $subscriber; } /** * Handle the event. * - * @param \CachetHQ\Cachet\Bus\Events\Incident\IncidentWasReportedEvent $event + * @param \CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent $event * * @return void */ - public function handle(IncidentWasReportedEvent $event) + public function handle(IncidentWasCreatedEvent $event) { - if (!$event->incident->notify) { + $incident = $event->incident; + + if (!$event->notify || !$this->system->canNotifySubscribers()) { return false; } // Only send emails for public incidents. - if ($event->incident->visible === 0) { + if (!$incident->visible) { return; } // First notify all global subscribers. $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); - foreach ($globalSubscribers as $subscriber) { - $this->notify($event, $subscriber); - } + $globalSubscribers->each(function ($subscriber) use ($incident) { + $subscriber->notify(new NewIncidentNotification($incident)); + }); - if (!$event->incident->component) { + if (!$incident->component) { return; } @@ -81,53 +82,12 @@ public function handle(IncidentWasReportedEvent $event) // Notify the remaining component specific subscribers. $componentSubscribers = $this->subscriber ->isVerified() - ->forComponent($event->incident->component->id) + ->forComponent($incident->component->id) ->get() ->reject(function ($subscriber) use ($notified) { return in_array($subscriber->id, $notified); + })->each(function ($subscriber) use ($incident) { + $subscriber->notify(new NewIncidentNotification($incident)); }); - - foreach ($componentSubscribers as $subscriber) { - $this->notify($event, $subscriber); - } - } - - /** - * Send notification to subscriber. - * - * @param \CachetHQ\Cachet\Bus\Events\IncidentWasReportedEvent $event - * @param \CachetHQ\Cachet\Models\Subscriber $subscriber - * - * @return \Illuminate\Database\Eloquent\Collection - */ - public function notify(IncidentWasReportedEvent $event, $subscriber) - { - $incident = AutoPresenter::decorate($event->incident); - $component = AutoPresenter::decorate($event->incident->component); - - $mail = [ - 'email' => $subscriber->email, - 'subject' => trans('cachet.subscriber.email.incident.subject', [ - 'status' => $incident->human_status, - 'name' => $incident->name, - ]), - 'has_component' => ($event->incident->component) ? true : false, - 'component_name' => $component ? $component->name : null, - 'name' => $incident->name, - 'timestamp' => $incident->created_at_formatted, - 'status' => $incident->human_status, - 'html_content' => $incident->formattedMessage, - 'text_content' => $incident->message, - 'token' => $subscriber->token, - 'manage_link' => cachet_route('subscribe.manage', [$subscriber->verify_code]), - 'unsubscribe_link' => cachet_route('subscribe.unsubscribe', [$subscriber->verify_code]), - ]; - - $this->mailer->queue([ - 'html' => 'emails.incidents.new-html', - 'text' => 'emails.incidents.new-text', - ], $mail, function (Message $message) use ($mail) { - $message->to($mail['email'])->subject($mail['subject']); - }); } } diff --git a/app/Bus/Handlers/Events/Incident/SendMaintenanceEmailNotificationHandler.php b/app/Bus/Handlers/Events/Incident/SendMaintenanceEmailNotificationHandler.php deleted file mode 100644 index 8c922ea59427..000000000000 --- a/app/Bus/Handlers/Events/Incident/SendMaintenanceEmailNotificationHandler.php +++ /dev/null @@ -1,130 +0,0 @@ -mailer = $mailer; - $this->subscriber = $subscriber; - } - - /** - * Handle the event. - * - * @param \CachetHQ\Cachet\Bus\Events\MaintenanceWasScheduledEvent $event - * - * @return void - */ - public function handle(MaintenanceWasScheduledEvent $event) - { - if (!$event->incident->notify) { - return false; - } - - // Only send emails for public incidents. - if ($event->incident->visible === 0) { - return; - } - - // First notify all global subscribers. - $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); - - foreach ($globalSubscribers as $subscriber) { - $this->notify($event, $subscriber); - } - - if (!$event->incident->component) { - return; - } - - $notified = $globalSubscribers->pluck('id')->all(); - - // Notify the remaining component specific subscribers. - $componentSubscribers = $this->subscriber - ->isVerified() - ->forComponent($event->incident->component->id) - ->get() - ->reject(function ($subscriber) use ($notified) { - return in_array($subscriber->id, $notified); - }); - - foreach ($componentSubscribers as $subscriber) { - $this->notify($event, $subscriber); - } - } - - /** - * Send notification to subscriber. - * - * @param \CachetHQ\Cachet\Bus\Events\MaintenanceWasScheduledEvent $event - * @param \CachetHQ\Cachet\Models\Subscriber $subscriber - * - * @return \Illuminate\Database\Eloquent\Collection - */ - public function notify(MaintenanceWasScheduledEvent $event, $subscriber) - { - $incident = AutoPresenter::decorate($event->incident); - $component = AutoPresenter::decorate($event->incident->component); - - $mail = [ - 'email' => $subscriber->email, - 'subject' => trans('cachet.subscriber.email.maintenance.subject', [ - 'name' => $incident->name, - ]), - 'name' => $incident->name, - 'timestamp' => $incident->scheduled_at_formatted, - 'status' => $incident->human_status, - 'html_content' => $incident->formattedMessage, - 'text_content' => $incident->message, - 'token' => $subscriber->token, - 'manage_link' => cachet_route('subscribe.manage', [$subscriber->verify_code]), - 'unsubscribe_link' => cachet_route('subscribe.unsubscribe', [$subscriber->verify_code]), - ]; - - $this->mailer->queue([ - 'html' => 'emails.incidents.maintenance-html', - 'text' => 'emails.incidents.maintenance-text', - ], $mail, function (Message $message) use ($mail) { - $message->to($mail['email'])->subject($mail['subject']); - }); - } -} diff --git a/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php b/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php new file mode 100644 index 000000000000..447604816e4d --- /dev/null +++ b/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php @@ -0,0 +1,90 @@ +system = $system; + $this->subscriber = $subscriber; + } + + /** + * Handle the event. + * + * @param \CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasReportedEvent $event + * + * @return void + */ + public function handle(IncidentUpdateWasReportedEvent $event) + { + $update = $event->update; + $incident = $update->incident; + + // Only send emails for public incidents while the system is not under scheduled maintenance. + if (!$incident->visible || !$this->system->canNotifySubscribers()) { + return; + } + + // First notify all global subscribers. + $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); + + $globalSubscribers->each(function ($subscriber) use ($update) { + $subscriber->notify(new IncidentUpdatedNotification($update)); + }); + + if (!$incident->component) { + return; + } + + $notified = $globalSubscribers->pluck('id')->all(); + + // Notify the remaining component specific subscribers. + $componentSubscribers = $this->subscriber + ->isVerified() + ->forComponent($incident->component->id) + ->get() + ->reject(function ($subscriber) use ($notified) { + return in_array($subscriber->id, $notified); + })->each(function ($subscriber) use ($update) { + $subscriber->notify(new IncidentUpdatedNotification($update)); + }); + } +} diff --git a/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php new file mode 100644 index 000000000000..84e9db31d616 --- /dev/null +++ b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php @@ -0,0 +1,63 @@ + + */ +class SendScheduleEmailNotificationHandler +{ + /** + * The subscriber instance. + * + * @var \CachetHQ\Cachet\Models\Subscriber + */ + protected $subscriber; + + /** + * Create a new send schedule email notification handler. + * + * @param \CachetHQ\Cachet\Models\Subscriber $subscriber + * + * @return void + */ + public function __construct(Subscriber $subscriber) + { + $this->subscriber = $subscriber; + } + + /** + * Handle the event. + * + * @param \CachetHQ\Cachet\Bus\Events\Schedule\ScheduleEventInterface $event + * + * @return void + */ + public function handle(ScheduleEventInterface $event) + { + $schedule = $event->schedule; + if (!$event->notify) { + return false; + } + + // First notify all global subscribers. + $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get()->each(function ($subscriber) use ($schedule) { + $subscriber->notify(new NewScheduleNotification($schedule)); + }); + } +} diff --git a/app/Bus/Handlers/Events/Subscriber/SendSubscriberVerificationEmailHandler.php b/app/Bus/Handlers/Events/Subscriber/SendSubscriberVerificationEmailHandler.php deleted file mode 100644 index fc07b4057915..000000000000 --- a/app/Bus/Handlers/Events/Subscriber/SendSubscriberVerificationEmailHandler.php +++ /dev/null @@ -1,61 +0,0 @@ -mailer = $mailer; - } - - /** - * Handle the event. - * - * @param \CachetHQ\Cachet\Bus\Events\SubscriberHasSubscribedEvent $event - * - * @return void - */ - public function handle(SubscriberHasSubscribedEvent $event) - { - $mail = [ - 'email' => $event->subscriber->email, - 'subject' => 'Confirm your subscription.', - 'link' => cachet_route('subscribe.verify', ['code' => $event->subscriber->verify_code]), - ]; - - $this->mailer->queue([ - 'html' => 'emails.subscribers.verify-html', - 'text' => 'emails.subscribers.verify-text', - ], $mail, function (Message $message) use ($mail) { - $message->to($mail['email'])->subject($mail['subject']); - }); - } -} diff --git a/app/Bus/Handlers/Events/User/SendInviteUserEmailHandler.php b/app/Bus/Handlers/Events/User/SendInviteUserEmailHandler.php deleted file mode 100644 index 12111cdf78bf..000000000000 --- a/app/Bus/Handlers/Events/User/SendInviteUserEmailHandler.php +++ /dev/null @@ -1,61 +0,0 @@ -mailer = $mailer; - } - - /** - * Handle the event. - * - * @param \CachetHQ\Cachet\Bus\Events\UserWasInvitedEvent $event - * - * @return void - */ - public function handle(UserWasInvitedEvent $event) - { - $mail = [ - 'email' => $event->invite->email, - 'subject' => 'You have been invited.', - 'link' => cachet_route('signup.invite', [$event->invite->code]), - ]; - - $this->mailer->queue([ - 'html' => 'emails.users.invite-html', - 'text' => 'emails.users.invite-text', - ], $mail, function (Message $message) use ($mail) { - $message->to($mail['email'])->subject($mail['subject']); - }); - } -} diff --git a/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php b/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php index 0d3025dc6650..da0eb87d1bb7 100644 --- a/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php +++ b/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php @@ -44,7 +44,7 @@ public function __construct(Beacon $beacon) /** * Handle the send beacon job. * - * @param \CachetHQ\Cachet\Bus\Jobs\SendBeaconJob $job + * @param \CachetHQ\Cachet\Bus\Jobs\System\SendBeaconJob $job * * @return void */ diff --git a/app/Bus/Handlers/Traits/StoresMeta.php b/app/Bus/Handlers/Traits/StoresMeta.php new file mode 100644 index 000000000000..e5272ba51b45 --- /dev/null +++ b/app/Bus/Handlers/Traits/StoresMeta.php @@ -0,0 +1,81 @@ + $value) { + $modelInstance = call_user_func( + [$metaModel, 'firstOrNew'], + [ + 'key' => $key, + 'meta_type' => $metaType, + 'meta_id' => $metaId, + ] + ); + + $value = $this->removeEmptyValues($value); + if (!empty($value)) { + $modelInstance->setAttribute('value', $value); + $modelInstance->save(); + continue; + } + + // The value is empty, remove the row + if ($modelInstance->exists) { + $modelInstance->delete(); + } + } + } + + /** + * Determine if a Value is empty. + * + * @param mixed $values + * + * @return array|mixed + */ + protected function removeEmptyValues($values) + { + if (!is_array($values)) { + return empty($values) ? null : $values; + } + + foreach ($values as $key => $value) { + if (!empty($value)) { + continue; + } + unset($values[$key]); + } + + return $values; + } +} diff --git a/app/Composers/AppComposer.php b/app/Composers/AppComposer.php index 5c0c2b7be783..822b30f2615a 100644 --- a/app/Composers/AppComposer.php +++ b/app/Composers/AppComposer.php @@ -11,13 +11,13 @@ namespace CachetHQ\Cachet\Composers; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Services\Dates\DateFactory; use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Contracts\Config\Repository; use Illuminate\Contracts\View\View; /** - * This is the app composer. + * This is the app composer class. * * @author James Brooks * @author Graham Campbell @@ -27,7 +27,7 @@ class AppComposer /** * The date factory instance. * - * @var \CachetHQ\Cachet\Dates\DateFactory + * @var \CachetHQ\Cachet\Services\Dates\DateFactory */ protected $dates; @@ -41,8 +41,8 @@ class AppComposer /** * Create a new app composer instance. * - * @param \CachetHQ\Cachet\Dates\DateFactory $dates - * @param \Illuminate\Contracts\Config\Repository $config + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * @param \Illuminate\Contracts\Config\Repository $config * * @return void */ @@ -61,7 +61,13 @@ public function __construct(DateFactory $dates, Repository $config) */ public function compose(View $view) { - $view->withAboutApp(Markdown::convertToHtml($this->config->get('setting.app_about'))); + if ($this->config->get('setting.app_about')) { + $about = Markdown::convertToHtml($this->config->get('setting.app_about')); + } else { + $about = ''; + } + + $view->withAboutApp($about); $view->withAppAnalytics($this->config->get('setting.app_analytics')); $view->withAppAnalyticsGoSquared($this->config->get('setting.app_analytics_gs')); $view->withAppAnalyticsPiwikUrl($this->config->get('setting.app_analytics_piwik_url')); @@ -81,10 +87,12 @@ public function compose(View $view) $view->withAutomaticLocalization($this->config->get('setting.automatic_localization')); $view->withEnableExternalDependencies($this->config->get('setting.enable_external_dependencies')); $view->withShowTimezone($this->config->get('setting.show_timezone')); + $view->withAppRefreshRate($this->config->get('setting.app_refresh_rate')); $view->withTimezone($this->dates->getTimezone()); $view->withSiteTitle($this->config->get('setting.app_name')); $view->withFontSubset($this->config->get('langs.'.$this->config->get('app.locale').'.subset', 'latin')); $view->withOnlyDisruptedDays($this->config->get('setting.only_disrupted_days')); $view->withDashboardLink($this->config->get('setting.dashboard_login_link')); + $view->withEnableSubscribers($this->config->get('setting.enable_subscribers')); } } diff --git a/app/Composers/Modules/ComponentsComposer.php b/app/Composers/ComponentsComposer.php similarity index 93% rename from app/Composers/Modules/ComponentsComposer.php rename to app/Composers/ComponentsComposer.php index 10555c21d889..1fac9423df71 100644 --- a/app/Composers/Modules/ComponentsComposer.php +++ b/app/Composers/ComponentsComposer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\ComponentGroup; @@ -53,7 +53,7 @@ public function __construct(Guard $guard) public function compose(View $view) { $componentGroups = $this->getVisibleGroupedComponents(); - $ungroupedComponents = Component::ungrouped()->get(); + $ungroupedComponents = Component::ungrouped()->orderBy('status', 'desc')->get(); $view->withComponentGroups($componentGroups) ->withUngroupedComponents($ungroupedComponents); diff --git a/app/Composers/CurrentUserComposer.php b/app/Composers/CurrentUserComposer.php index b90f6272b2df..d7afe3b9603d 100644 --- a/app/Composers/CurrentUserComposer.php +++ b/app/Composers/CurrentUserComposer.php @@ -13,9 +13,10 @@ use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; +use McCool\LaravelAutoPresenter\Facades\AutoPresenter; /** - * This is the current user composer. + * This is the current user composer class. * * @author Joseph Cohen * @author James Brooks @@ -32,6 +33,6 @@ class CurrentUserComposer */ public function compose(View $view) { - $view->withCurrentUser(Auth::user()); + $view->withCurrentUser(AutoPresenter::decorate(Auth::user())); } } diff --git a/app/Composers/DashboardComposer.php b/app/Composers/DashboardComposer.php index e30145f04343..c5ccef937ce1 100644 --- a/app/Composers/DashboardComposer.php +++ b/app/Composers/DashboardComposer.php @@ -14,17 +14,81 @@ use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\IncidentTemplate; +use CachetHQ\Cachet\Models\Schedule; use CachetHQ\Cachet\Models\Subscriber; use Illuminate\Contracts\View\View; /** - * This is the dashboard composer. + * This is the dashboard composer class. * * @author James Brooks * @author Graham Campbell */ class DashboardComposer { + /** + * The component count. + * + * @var int + */ + protected $componentCount; + + /** + * The incident count. + * + * @var int + */ + protected $incidentCount; + + /** + * The incident template count. + * + * @var int + */ + protected $incidentTemplateCount; + + /** + * The schedule count. + * + * @var int + */ + protected $scheduleCount; + + /** + * The subscriber count. + * + * @var int + */ + protected $subscriberCount; + + /** + * Create a new dashboard composer instance. + * + * @return void + */ + public function __construct() + { + if (is_null($this->componentCount)) { + $this->componentCount = Component::count(); + } + + if (is_null($this->incidentCount)) { + $this->incidentCount = Incident::count(); + } + + if (is_null($this->incidentTemplateCount)) { + $this->incidentTemplateCount = IncidentTemplate::count(); + } + + if (is_null($this->scheduleCount)) { + $this->scheduleCount = Schedule::count(); + } + + if (is_null($this->subscriberCount)) { + $this->subscriberCount = Subscriber::isVerified()->count(); + } + } + /** * Bind data to the view. * @@ -34,9 +98,11 @@ class DashboardComposer */ public function compose(View $view) { - $view->withIncidentCount(Incident::notScheduled()->count()); - $view->withIncidentTemplateCount(IncidentTemplate::count()); - $view->withComponentCount(Component::all()->count()); - $view->withSubscriberCount(Subscriber::isVerified()->count()); + $view->withComponentCount($this->componentCount); + $view->withIncidentCount($this->incidentCount); + $view->withIncidentTemplateCount($this->incidentTemplateCount); + $view->withScheduleCount($this->scheduleCount); + $view->withSubscriberCount($this->subscriberCount); + $view->withIsWriteable(is_writable(app()->bootstrapPath().'/cachet')); } } diff --git a/app/Composers/Modules/MetricsComposer.php b/app/Composers/MetricsComposer.php similarity index 53% rename from app/Composers/Modules/MetricsComposer.php rename to app/Composers/MetricsComposer.php index cc0c38a352c4..e6e32e9f7f19 100644 --- a/app/Composers/Modules/MetricsComposer.php +++ b/app/Composers/MetricsComposer.php @@ -9,9 +9,10 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; use CachetHQ\Cachet\Models\Metric; +use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Config\Repository; use Illuminate\Contracts\View\View; @@ -30,16 +31,25 @@ class MetricsComposer */ protected $config; + /** + * The user session object. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $guard; + /** * Create a new metrics composer instance. * * @param \Illuminate\Contracts\Config\Repository $config + * @param \Illuminate\Contracts\Auth\Guard $guard * * @return void */ - public function __construct(Repository $config) + public function __construct(Repository $config, Guard $guard) { $this->config = $config; + $this->guard = $guard; } /** @@ -51,12 +61,32 @@ public function __construct(Repository $config) */ public function compose(View $view) { - $metrics = null; - if ($displayMetrics = $this->config->get('setting.display_graphs')) { - $metrics = Metric::displayable()->orderBy('order')->orderBy('id')->get(); - } + $displayMetrics = $this->config->get('setting.display_graphs'); + $metrics = $this->getVisibleMetrics($displayMetrics); $view->withDisplayMetrics($displayMetrics) ->withMetrics($metrics); } + + /** + * Get visible grouped components. + * + * @param bool $displayMetrics + * + * @return \Illuminate\Support\Collection|void + */ + protected function getVisibleMetrics($displayMetrics) + { + if (!$displayMetrics) { + return; + } + + $metrics = Metric::displayable(); + + if (!$this->guard->check()) { + $metrics->visible(); + } + + return $metrics->orderBy('order')->orderBy('id')->get(); + } } diff --git a/app/Composers/ModuleComposer.php b/app/Composers/ModuleComposer.php deleted file mode 100644 index b758401bb3f0..000000000000 --- a/app/Composers/ModuleComposer.php +++ /dev/null @@ -1,76 +0,0 @@ - - */ -class ModuleComposer -{ - /** - * The application instance. - * - * @var \Illuminate\Contracts\Foundation\Application - */ - protected $app; - - /** - * The modules manager instance. - * - * @var \CachetHQ\Cachet\Services\Modules\Manager - */ - protected $manager; - - /** - * Create a new modules composer. - * - * @param \Illuminate\Contracts\Foundation\Application $app - * @param \CachetHQ\Cachet\Services\Modules\Manager $manager - * - * @return void - */ - public function __construct(Application $app, Manager $manager) - { - $this->app = $app; - $this->manager = $manager; - } - - /** - * Bind data to the view. - * - * @param \Illuminate\Contracts\View\View $view - * - * @return void - */ - public function compose(View $view) - { - $key = $view->getName(); - - $view->with('view', $key); - - $modules = "view.modules: {$key}"; - $groups = "view.groups: {$key}"; - - $modules = $this->app->bound($modules) ? $this->app[$modules] : []; - $groups = $this->app->bound($groups) ? $this->app[$groups] : []; - - $modules = $this->manager->groupModules($modules, $groups); - - $view->withModules($modules); - } -} diff --git a/app/Composers/Modules/ScheduledComposer.php b/app/Composers/ScheduledComposer.php similarity index 79% rename from app/Composers/Modules/ScheduledComposer.php rename to app/Composers/ScheduledComposer.php index d2f3a927221a..0e65b4a89245 100644 --- a/app/Composers/Modules/ScheduledComposer.php +++ b/app/Composers/ScheduledComposer.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; -use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\Schedule; use Illuminate\Contracts\View\View; /** @@ -31,7 +31,7 @@ class ScheduledComposer */ public function compose(View $view) { - $scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get(); + $scheduledMaintenance = Schedule::uncompleted()->orderBy('scheduled_at')->get(); $view->withScheduledMaintenance($scheduledMaintenance); } diff --git a/app/Composers/SettingsComposer.php b/app/Composers/SettingsComposer.php new file mode 100644 index 000000000000..aa0ff2fac6c3 --- /dev/null +++ b/app/Composers/SettingsComposer.php @@ -0,0 +1,80 @@ + + */ +class SettingsComposer +{ + /** + * Array of cache drivers. + * + * @var string[] + */ + protected $cacheDrivers = [ + 'apc' => 'APC(u)', + 'array' => 'Array', + 'database' => 'Database', + 'file' => 'File', + 'memcached' => 'Memcached', + 'redis' => 'Redis', + ]; + + /** + * Array of cache drivers. + * + * @var string[] + */ + protected $mailDrivers = [ + 'smtp' => 'SMTP', + 'mail' => 'Mail', + 'sendmail' => 'Sendmail', + 'mailgun' => 'Mailgun', + 'mandrill' => 'Mandrill', + 'ses' => 'Amazon SES', + 'sparkpost' => 'SparkPost', + 'log' => 'Log (Testing)', + ]; + + /** + * Array of queue drivers. + * + * @var string[] + */ + protected $queueDrivers = [ + 'null' => 'None', + 'sync' => 'Synchronous', + 'database' => 'Database', + 'beanstalkd' => 'Beanstalk', + 'sqs' => 'Amazon SQS', + 'redis' => 'Redis', + ]; + + /** + * Bind data to the view. + * + * @param \Illuminate\Contracts\View\View $view + * + * @return void + */ + public function compose(View $view) + { + $view->withCacheDrivers($this->cacheDrivers); + $view->withMailDrivers($this->mailDrivers); + $view->withQueueDrivers($this->queueDrivers); + } +} diff --git a/app/Composers/Modules/StatusComposer.php b/app/Composers/StatusComposer.php similarity index 80% rename from app/Composers/Modules/StatusComposer.php rename to app/Composers/StatusComposer.php index 6449bfe5da8e..6b953343e9a7 100644 --- a/app/Composers/Modules/StatusComposer.php +++ b/app/Composers/StatusComposer.php @@ -9,10 +9,11 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; use CachetHQ\Cachet\Integrations\Contracts\System; use Illuminate\Contracts\View\View; +use Illuminate\Support\Arr; /** * This is the status composer. @@ -50,6 +51,9 @@ public function __construct(System $system) */ public function compose(View $view) { - $view->with($this->system->getStatus()); + $status = $this->system->getStatus(); + + $view->withSystemStatus(Arr::get($status, 'system_status')); + $view->withSystemMessage(Arr::get($status, 'system_message')); } } diff --git a/app/Composers/Modules/StickiedComposer.php b/app/Composers/StickiedComposer.php similarity index 71% rename from app/Composers/Modules/StickiedComposer.php rename to app/Composers/StickiedComposer.php index 084c9ff61b42..82e357f395e2 100644 --- a/app/Composers/Modules/StickiedComposer.php +++ b/app/Composers/StickiedComposer.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Services\Dates\DateFactory; use Illuminate\Contracts\View\View; /** @@ -33,9 +33,10 @@ class StickiedComposer */ public function compose(View $view) { - $stickiedIncidents = Incident::stickied()->orderBy('scheduled_at', 'desc')->orderBy('created_at', 'desc')->get()->groupBy(function (Incident $incident) { - return app(DateFactory::class)->make($incident->is_scheduled ? $incident->scheduled_at : $incident->created_at)->toDateString(); + $stickiedIncidents = Incident::stickied()->orderBy('occurred_at', 'desc')->get()->groupBy(function (Incident $incident) { + return app(DateFactory::class)->make($incident->is_scheduled ? $incident->scheduled_at : $incident->occurred_at)->toDateString(); }); + $view->withStickiedIncidents($stickiedIncidents); } } diff --git a/app/Composers/ThemeComposer.php b/app/Composers/ThemeComposer.php index 852f3162085c..0153a35f9d46 100644 --- a/app/Composers/ThemeComposer.php +++ b/app/Composers/ThemeComposer.php @@ -15,7 +15,7 @@ use Illuminate\Contracts\View\View; /** - * This is the theme composer. + * This is the theme composer class. * * @author James Brooks * @author Graham Campbell @@ -50,19 +50,18 @@ public function __construct(Repository $config) */ public function compose(View $view) { - // Theme colors. $view->withThemeBackgroundColor($this->config->get('setting.style_background_color', '#F0F3F4')); $view->withThemeBackgroundFills($this->config->get('setting.style_background_fills', '#FFFFFF')); $view->withThemeBannerBackgroundColor($this->config->get('setting.style_banner_background_color', '')); $view->withThemeBannerPadding($this->config->get('setting.style_banner_padding', '40px 0')); $view->withThemeTextColor($this->config->get('setting.style_text_color', '#333333')); - $view->withThemeReds($this->config->get('setting.style_reds', '#ff6f6f')); - $view->withThemeBlues($this->config->get('setting.style_blues', '#3498db')); + $view->withThemeReds($this->config->get('setting.style_reds', '#FF6F6F')); + $view->withThemeBlues($this->config->get('setting.style_blues', '#3498DB')); $view->withThemeGreens($this->config->get('setting.style_greens', '#7ED321')); $view->withThemeYellows($this->config->get('setting.style_yellows', '#F7CA18')); $view->withThemeOranges($this->config->get('setting.style_oranges', '#FF8800')); $view->withThemeGreys($this->config->get('setting.style_greys', '#888888')); - $view->withThemeMetrics($this->config->get('setting.style_metrics', '#0dccc0')); + $view->withThemeMetrics($this->config->get('setting.style_metrics', '#0DCCC0')); $view->withThemeLinks($this->config->get('setting.style_links', '#7ED321')); } } diff --git a/app/Composers/Modules/TimelineComposer.php b/app/Composers/TimelineComposer.php similarity index 93% rename from app/Composers/Modules/TimelineComposer.php rename to app/Composers/TimelineComposer.php index 7064a00ccbd4..0206a2dc7220 100644 --- a/app/Composers/Modules/TimelineComposer.php +++ b/app/Composers/TimelineComposer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Composers\Modules; +namespace CachetHQ\Cachet\Composers; use Illuminate\Contracts\View\View; diff --git a/app/Composers/TimezoneLocaleComposer.php b/app/Composers/TimezoneLocaleComposer.php index a262cc3f1fff..5e3712d8e58a 100644 --- a/app/Composers/TimezoneLocaleComposer.php +++ b/app/Composers/TimezoneLocaleComposer.php @@ -15,9 +15,10 @@ use DateTimeZone; use Illuminate\Contracts\Config\Repository; use Illuminate\Contracts\View\View; +use Illuminate\Support\Arr; /** - * This is the timezone locale composer. + * This is the timezone locale composer class. * * @author Joseph Cohen * @author James Brooks @@ -58,7 +59,10 @@ public function compose(View $view) $langs = array_map(function ($lang) use ($enabledLangs) { $locale = basename($lang); - return [$locale => $enabledLangs[$locale]]; + return [$locale => Arr::get($enabledLangs, $locale, [ + 'name' => $locale, + 'subset' => null, + ])]; }, glob(base_path('resources/lang').'/*')); $langs = call_user_func_array('array_merge', $langs); diff --git a/app/Console/Commands/AppResetCommand.php b/app/Console/Commands/AppResetCommand.php new file mode 100644 index 000000000000..3add76aa5c62 --- /dev/null +++ b/app/Console/Commands/AppResetCommand.php @@ -0,0 +1,76 @@ + + */ +class AppResetCommand extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'app:reset'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Resets and installs the application'; + + /** + * The events instance. + * + * @var \Illuminate\Contracts\Events\Dispatcher + */ + protected $events; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct(Dispatcher $events) + { + $this->events = $events; + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $this->events->fire('command.resetting', $this); + $this->events->fire('command.generatekey', $this); + $this->events->fire('command.cacheconfig', $this); + $this->events->fire('command.cacheroutes', $this); + $this->events->fire('command.publishvendors', $this); + $this->events->fire('command.resetmigrations', $this); + $this->events->fire('command.runmigrations', $this); + $this->events->fire('command.runseeding', $this); + $this->events->fire('command.updatecache', $this); + $this->events->fire('command.extrastuff', $this); + $this->events->fire('command.reset', $this); + } +} diff --git a/app/Console/Commands/AppUpdateCommand.php b/app/Console/Commands/AppUpdateCommand.php new file mode 100644 index 000000000000..1aa4bd975eb0 --- /dev/null +++ b/app/Console/Commands/AppUpdateCommand.php @@ -0,0 +1,73 @@ + + */ +class AppUpdateCommand extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'app:update'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Updates the application'; + + /** + * The events instance. + * + * @var \Illuminate\Contracts\Events\Dispatcher + */ + protected $events; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct(Dispatcher $events) + { + $this->events = $events; + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $this->events->fire('command.updating', $this); + $this->events->fire('command.cacheconfig', $this); + $this->events->fire('command.cacheroutes', $this); + $this->events->fire('command.publishvendors', $this); + $this->events->fire('command.runmigrations', $this); + $this->events->fire('command.updatecache', $this); + $this->events->fire('command.extrastuff', $this); + $this->events->fire('command.updated', $this); + } +} diff --git a/app/Console/Commands/BeaconCommand.php b/app/Console/Commands/BeaconCommand.php index 0425b048ad75..27cad3f06843 100644 --- a/app/Console/Commands/BeaconCommand.php +++ b/app/Console/Commands/BeaconCommand.php @@ -33,14 +33,14 @@ class BeaconCommand extends Command * * @var string */ - protected $description = 'Communicate with the Cachet Beacon.'; + protected $description = 'Communicate with the Cachet Beacon server'; /** * Execute the console command. * * @return void */ - public function fire() + public function handle() { dispatch(new SendBeaconJob()); } diff --git a/app/Console/Commands/DemoMetricPointSeederCommand.php b/app/Console/Commands/DemoMetricPointSeederCommand.php index 2399a2df2ef9..d4e16235849f 100644 --- a/app/Console/Commands/DemoMetricPointSeederCommand.php +++ b/app/Console/Commands/DemoMetricPointSeederCommand.php @@ -12,8 +12,6 @@ namespace CachetHQ\Cachet\Console\Commands; use CachetHQ\Cachet\Models\MetricPoint; -use DateInterval; -use DateTime; use Illuminate\Console\Command; use Illuminate\Console\ConfirmableTrait; use Symfony\Component\Console\Input\InputOption; @@ -39,14 +37,14 @@ class DemoMetricPointSeederCommand extends Command * * @var string */ - protected $description = 'Seeds the demo Cachet metrics with points.'; + protected $description = 'Seeds the demo Cachet metrics with points'; /** * Execute the console command. * * @return void */ - public function fire() + public function handle() { if (!$this->confirmToProceed()) { return; @@ -66,16 +64,26 @@ protected function seedMetricPoints() { MetricPoint::truncate(); - // Generate 11 hours of metric points - for ($i = 0; $i < 11; $i++) { - $metricTime = (new DateTime())->sub(new DateInterval('PT'.$i.'H')); + $points = []; - MetricPoint::create([ - 'metric_id' => 1, - 'value' => random_int(1, 10), - 'created_at' => $metricTime, - 'updated_at' => $metricTime, - ]); + // Generate 24 hours of metric points + for ($i = 0; $i <= 23; $i++) { + for ($j = 0; $j <= 59; $j++) { + $this->info("{$i}:{$j}"); + + $pointTime = date("Y-m-d {$i}:{$j}:00"); + + $points[] = [ + 'metric_id' => 1, + 'value' => random_int(1, 10), + 'created_at' => $pointTime, + 'updated_at' => $pointTime, + ]; + } + } + + foreach (array_chunk($points, 100) as $chunk) { + MetricPoint::insert($chunk); } } diff --git a/app/Console/Commands/DemoSeederCommand.php b/app/Console/Commands/DemoSeederCommand.php index 477e02b610bd..3d496ca06674 100644 --- a/app/Console/Commands/DemoSeederCommand.php +++ b/app/Console/Commands/DemoSeederCommand.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Console\Commands; +use CachetHQ\Cachet\Models\Action; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Cachet\Models\Incident; @@ -18,9 +19,11 @@ use CachetHQ\Cachet\Models\IncidentUpdate; use CachetHQ\Cachet\Models\Metric; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\Schedule; use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Models\User; use CachetHQ\Cachet\Settings\Repository; +use Carbon\Carbon; use DateInterval; use DateTime; use Illuminate\Console\Command; @@ -48,19 +51,19 @@ class DemoSeederCommand extends Command * * @var string */ - protected $description = 'Seeds Cachet with demo data.'; + protected $description = 'Seeds Cachet with demo data'; /** * The settings repository. * - * @var \CachetHQ\Cache\Settings\Repository + * @var \CachetHQ\Cachet\Settings\Repository */ protected $settings; /** * Create a new demo seeder command instance. * - * @param \CachetHQ\Cache\Settings\Repository $settings + * @param \CachetHQ\Cachet\Settings\Repository $settings * * @return void */ @@ -76,25 +79,37 @@ public function __construct(Repository $settings) * * @return void */ - public function fire() + public function handle() { if (!$this->confirmToProceed()) { return; } + $this->seedUsers(); + $this->seedActions(); $this->seedComponentGroups(); $this->seedComponents(); $this->seedIncidents(); $this->seedIncidentTemplates(); $this->seedMetricPoints(); $this->seedMetrics(); + $this->seedSchedules(); $this->seedSettings(); $this->seedSubscribers(); - $this->seedUsers(); $this->info('Database seeded with demo data successfully!'); } + /** + * Seed the actions table. + * + * @return void + */ + protected function seedActions() + { + Action::truncate(); + } + /** * Seed the component groups table. * @@ -109,7 +124,7 @@ protected function seedComponentGroups() 'collapsed' => 0, 'visible' => ComponentGroup::VISIBLE_AUTHENTICATED, ], [ - 'name' => 'Alt Three', + 'name' => 'Services', 'order' => 2, 'collapsed' => 1, 'visible' => ComponentGroup::VISIBLE_GUEST, @@ -153,26 +168,26 @@ protected function seedComponents() 'group_id' => 1, 'link' => 'https://cachethq.io', ], [ - 'name' => 'Blog', - 'description' => 'The Alt Three Blog.', + 'name' => 'Laravel Artisan Cheatsheet', + 'description' => 'A searchable, bookmarkable cheatsheet for Laravel\'s Artisan commands.', 'status' => 1, 'order' => 0, 'group_id' => 2, - 'link' => 'https://blog.alt-three.com', + 'link' => 'https://artisan.page', ], [ - 'name' => 'StyleCI', - 'description' => 'The PHP Coding Style Service.', + 'name' => 'Checkmango', + 'description' => 'The Full-Stack A/B Testing Platform', 'status' => 1, 'order' => 1, 'group_id' => 2, - 'link' => 'https://styleci.io', + 'link' => 'https://checkmango.com', ], [ - 'name' => 'Patreon Page', - 'description' => 'Support future development of Cachet.', + 'name' => 'GitHub', + 'description' => '', 'status' => 1, 'order' => 0, 'group_id' => 0, - 'link' => 'https://patreon.com/jbrooksuk', + 'link' => 'https://github.com/cachethq/cachet', ], ]; @@ -206,18 +221,20 @@ protected function seedIncidents() 'message' => 'We\'re investigating an issue with our monkeys not performing as they should be.', 'status' => Incident::INVESTIGATING, 'component_id' => 0, - 'scheduled_at' => null, 'visible' => 1, 'stickied' => false, + 'user_id' => 1, + 'occurred_at' => Carbon::now(), ], [ 'name' => 'This is an unresolved incident', 'message' => 'Unresolved incidents are left without a **Fixed** update.', 'status' => Incident::INVESTIGATING, 'component_id' => 0, - 'scheduled_at' => null, 'visible' => 1, 'stickied' => false, + 'user_id' => 1, + 'occurred_at' => Carbon::now(), ], ]; @@ -329,6 +346,29 @@ protected function seedMetrics() } } + /** + * Seed the schedules table. + * + * @return void + */ + protected function seedSchedules() + { + $defaultSchedules = [ + [ + 'name' => 'Demo resets every half hour!', + 'message' => 'You can schedule downtime for _your_ service!', + 'status' => Schedule::UPCOMING, + 'scheduled_at' => (new DateTime())->add(new DateInterval('PT2H')), + ], + ]; + + Schedule::truncate(); + + foreach ($defaultSchedules as $schedule) { + Schedule::create($schedule); + } + } + /** * Seed the settings table. * @@ -356,20 +396,20 @@ protected function seedSettings() 'key' => 'app_incident_days', 'value' => '7', ], [ - 'key' => 'app_analytics', - 'value' => 'UA-58442674-3', - ], [ - 'key' => 'app_analytics_gs', - 'value' => 'GSN-712462-P', + 'key' => 'app_refresh_rate', + 'value' => '0', ], [ 'key' => 'display_graphs', 'value' => '1', ], [ 'key' => 'app_about', - 'value' => 'This is the demo instance of [Cachet](https://cachethq.io?ref=demo). The open source status page system, for everyone. An [Alt Three](https://alt-three.com) product.', + 'value' => 'This is the demo instance of [Cachet](https://cachethq.io?ref=demo). The open-source status page system, for everyone. 3.x is coming soon! [Read the announcement](https://github.com/cachethq/cachet/discussions/4342).', ], [ 'key' => 'enable_subscribers', 'value' => '0', + ], [ + 'key' => 'header', + 'value' => '', ], ]; @@ -401,7 +441,7 @@ protected function seedUsers() [ 'username' => 'test', 'password' => 'test123', - 'email' => 'test@test.com', + 'email' => 'test@example.com', 'level' => User::LEVEL_ADMIN, 'api_key' => '9yMHsdioQosnyVK4iCVR', ], diff --git a/app/Console/Commands/InstallCommand.php b/app/Console/Commands/InstallCommand.php new file mode 100644 index 000000000000..7c71cbc0de2e --- /dev/null +++ b/app/Console/Commands/InstallCommand.php @@ -0,0 +1,448 @@ + + */ +class InstallCommand extends Command +{ + /** + * The console command name. + * + * @var string + */ + protected $name = 'cachet:install'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Install Cachet'; + + /** + * The events instance. + * + * @var \Illuminate\Contracts\Events\Dispatcher + */ + protected $events; + + /** + * Create a new command instance. + * + * @param Dispatcher $events + */ + public function __construct(Dispatcher $events) + { + $this->events = $events; + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + if ($this->confirm('Do you want to configure Cachet before installing?')) { + $this->configureEnvironmentFile(); + $this->configureKey(); + $this->configureDatabase(); + $this->configureDrivers(); + $this->configureMail(); + $this->configureCachet(); + $this->configureUser(); + } + + $this->line('Installing Cachet...'); + + $this->events->fire('command.installing', $this); + $this->events->fire('command.generatekey', $this); + $this->events->fire('command.cacheconfig', $this); + $this->events->fire('command.cacheroutes', $this); + $this->events->fire('command.publishvendors', $this); + $this->events->fire('command.runmigrations', $this); + $this->events->fire('command.runseeding', $this); + $this->events->fire('command.updatecache', $this); + $this->events->fire('command.linkstorage', $this); + $this->events->fire('command.extrastuff', $this); + $this->events->fire('command.installed', $this); + + $this->info('Cachet is installed ⚡'); + } + + /** + * Copy the environment file. + * + * @return void + */ + protected function configureEnvironmentFile() + { + $dir = app()->environmentPath(); + $file = app()->environmentFile(); + $path = "{$dir}/{$file}"; + + if (file_exists($path)) { + $this->line('Environment file already exists. Moving on.'); + + return; + } + + copy("$path.example", $path); + } + + /** + * Generate the app key. + * + * @return void + */ + protected function configureKey() + { + $this->call('key:generate'); + } + + /** + * Configure the database. + * + * @param array $default + * + * @return void + */ + protected function configureDatabase(array $default = []) + { + $config = array_merge([ + 'DB_DRIVER' => null, + 'DB_HOST' => null, + 'DB_DATABASE' => null, + 'DB_USERNAME' => null, + 'DB_PASSWORD' => null, + 'DB_PORT' => null, + 'DB_PREFIX' => null, + ], $default); + + $config['DB_DRIVER'] = $this->choice('Which database driver do you want to use?', [ + 'mysql' => 'MySQL', + 'pgsql' => 'PostgreSQL', + 'sqlite' => 'SQLite', + ], $config['DB_DRIVER']); + + if ($config['DB_DRIVER'] === 'sqlite') { + $config['DB_DATABASE'] = $this->ask('Please provide the full path to your SQLite file.', $config['DB_DATABASE']); + } else { + $config['DB_HOST'] = $this->ask("What is the host of your {$config['DB_DRIVER']} database?", $config['DB_HOST']); + if ($config['DB_HOST'] === 'localhost' && $config['DB_DRIVER'] === 'mysql') { + $this->warn("Using 'localhost' will result in the usage of a local unix socket. Use 127.0.0.1 if you want to connect over TCP"); + } + + $config['DB_DATABASE'] = $this->ask('What is the name of the database that Cachet should use?', $config['DB_DATABASE']); + + $config['DB_USERNAME'] = $this->ask('What username should we connect with?', $config['DB_USERNAME']); + + $config['DB_PASSWORD'] = $this->secret('What password should we connect with?', $config['DB_PASSWORD']); + + $config['DB_PORT'] = $config['DB_DRIVER'] === 'mysql' ? 3306 : 5432; + if ($this->confirm('Is your database listening on a non-standard port number?')) { + $config['DB_PORT'] = $this->anticipate('What port number is your database using?', [3306, 5432], $config['DB_PORT']); + } + } + + if ($this->confirm('Do you want to use a prefix on the table names?')) { + $config['DB_PREFIX'] = $this->ask('Please enter the prefix now...', $config['DB_PREFIX']); + } + + // Format the settings ready to display them in the table. + $this->formatConfigsTable($config); + + if (!$this->confirm('Are these settings correct?')) { + return $this->configureDatabase($config); + } + + foreach ($config as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Configure other drivers. + * + * @param array $default + * + * @return void + */ + protected function configureDrivers(array $default = []) + { + $config = array_merge([ + 'CACHE_DRIVER' => null, + 'SESSION_DRIVER' => null, + 'QUEUE_DRIVER' => null, + ], $default); + + // Format the settings ready to display them in the table. + $this->formatConfigsTable($config); + + $config['CACHE_DRIVER'] = $this->choice('Which cache driver do you want to use?', [ + 'apc' => 'APC(u)', + 'array' => 'Array', + 'database' => 'Database', + 'file' => 'File', + 'memcached' => 'Memcached', + 'redis' => 'Redis', + ], $config['CACHE_DRIVER']); + + // We need to configure Redis. + if ($config['CACHE_DRIVER'] === 'redis') { + $this->configureRedis(); + } + + $config['SESSION_DRIVER'] = $this->choice('Which session driver do you want to use?', [ + 'apc' => 'APC(u)', + 'array' => 'Array', + 'database' => 'Database', + 'file' => 'File', + 'memcached' => 'Memcached', + 'redis' => 'Redis', + ], $config['SESSION_DRIVER']); + + // We need to configure Redis. + if ($config['SESSION_DRIVER'] === 'redis') { + $this->configureRedis(); + } + + $config['QUEUE_DRIVER'] = $this->choice('Which queue driver do you want to use?', [ + 'null' => 'None', + 'sync' => 'Synchronous', + 'database' => 'Database', + 'beanstalkd' => 'Beanstalk', + 'sqs' => 'Amazon SQS', + 'redis' => 'Redis', + ], $config['QUEUE_DRIVER']); + + // We need to configure Redis, but only if the cache driver wasn't redis. + if ($config['QUEUE_DRIVER'] === 'redis' && ($config['SESSION_DRIVER'] !== 'redis' || $config['CACHE_DRIVER'] !== 'redis')) { + $this->configureRedis(); + } + + // Format the settings ready to display them in the table. + $this->formatConfigsTable($config); + + if (!$this->confirm('Are these settings correct?')) { + return $this->configureDrivers($config); + } + + foreach ($config as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Configure mail. + * + * @param array $config + * + * @return void + */ + protected function configureMail(array $config = []) + { + $config = array_merge([ + 'MAIL_DRIVER' => null, + 'MAIL_HOST' => null, + 'MAIL_PORT' => null, + 'MAIL_USERNAME' => null, + 'MAIL_PASSWORD' => null, + 'MAIL_ADDRESS' => null, + 'MAIL_NAME' => null, + 'MAIL_ENCRYPTION' => null, + ], $config); + + // Don't continue with these settings if we're not interested in notifications. + if (!$this->confirm('Do you want Cachet to send mail notifications?')) { + return; + } + + $config['MAIL_DRIVER'] = $this->choice('What driver do you want to use to send notifications?', [ + 'smtp' => 'SMTP', + 'mail' => 'Mail', + 'sendmail' => 'Sendmail', + 'mailgun' => 'Mailgun', + 'mandrill' => 'Mandrill', + 'ses' => 'Amazon SES', + 'sparkpost' => 'SparkPost', + 'log' => 'Log (Testing)', + ]); + + if (!$config['MAIL_DRIVER'] === 'log') { + if ($config['MAIL_DRIVER'] === 'smtp') { + $config['MAIL_HOST'] = $this->ask('Please supply your mail server host'); + } + + $config['MAIL_ADDRESS'] = $this->ask('What email address should we send notifications from?'); + $config['MAIL_USERNAME'] = $this->ask('What username should we connect as?'); + $config['MAIL_PASSWORD'] = $this->secret('What password should we connect with?'); + } + + // Format the settings ready to display them in the table. + $this->formatConfigsTable($config); + + if (!$this->confirm('Are these settings correct?')) { + return $this->configureMail($config); + } + + foreach ($config as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Configure Cachet. + * + * @param array $config + * + * @return void + */ + protected function configureCachet(array $config = []) + { + $config = []; + if ($this->confirm('Do you wish to use Cachet Beacon?')) { + $config['CACHET_BEACON'] = 'true'; + } + + if ($this->confirm('Do you wish to use Emoji? This requires a GitHub oAuth Token!')) { + $config['GITHUB_TOKEN'] = $this->ask('Please enter your GitHub oAuth Token'); + $config['CACHET_EMOJI'] = 'true'; + } + + foreach ($config as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Configure the first user. + * + * @return void + */ + protected function configureUser() + { + if (!$this->confirm('Do you want to create an admin user?')) { + return; + } + + // We need to refresh the config to get access to the newly connected database. + $this->getFreshConfiguration(); + + // Now we need to install the application. + // $this->call('cachet:install'); + + $user = [ + 'username' => $this->ask('Please enter your username'), + 'email' => $this->ask('Please enter your email'), + 'password' => $this->secret('Please enter your password'), + 'level' => User::LEVEL_ADMIN, + ]; + + User::create($user); + } + + /** + * Configure the redis connection. + * + * @return void + */ + protected function configureRedis() + { + $config = [ + 'REDIS_HOST' => null, + 'REDIS_DATABASE' => null, + 'REDIS_PORT' => null, + ]; + + $config['REDIS_HOST'] = $this->ask('What is the host of your redis server?'); + $config['REDIS_DATABASE'] = $this->ask('What is the name of the database that Cachet should use?'); + $config['REDIS_PORT'] = $this->ask('What port should Cachet use?', 6379); + + foreach ($config as $setting => $value) { + $this->writeEnv($setting, $value); + } + } + + /** + * Format the configs into a pretty table that we can easily read. + * + * @param array $config + * + * @return void + */ + protected function formatConfigsTable(array $config) + { + $configRows = []; + + foreach ($config as $setting => $value) { + $configRows[] = compact('setting', 'value'); + } + + $this->table(['Setting', 'Value'], $configRows); + } + + /** + * Boot a fresh copy of the application configuration. + * + * @return void + */ + protected function getFreshConfiguration() + { + $app = require $this->laravel->bootstrapPath().'/app.php'; + $app->make(Kernel::class)->bootstrap(); + } + + /** + * Writes to the .env file with given parameters. + * + * @param string $key + * @param mixed $value + * + * @return void + */ + protected function writeEnv($key, $value) + { + $dir = app()->environmentPath(); + $file = app()->environmentFile(); + $path = "{$dir}/{$file}"; + + try { + (new Dotenv($dir, $file))->load(); + + $envKey = strtoupper($key); + $envValue = env($envKey) ?: 'null'; + + $envFileContents = file_get_contents($path); + $envFileContents = str_replace("{$envKey}={$envValue}", "{$envKey}={$value}", $envFileContents, $count); + if ($count < 1 && $envValue === 'null') { + $envFileContents = str_replace("{$envKey}=", "{$envKey}={$value}", $envFileContents); + } + file_put_contents($path, $envFileContents); + } catch (InvalidPathException $e) { + throw $e; + } + } +} diff --git a/app/Console/Commands/VersionCommand.php b/app/Console/Commands/VersionCommand.php new file mode 100644 index 000000000000..e093fe7a07f4 --- /dev/null +++ b/app/Console/Commands/VersionCommand.php @@ -0,0 +1,46 @@ + + */ +class VersionCommand extends Command +{ + /** + * The console command name. + * + * @var string + */ + protected $name = 'cachet:version'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Display the version of Cachet'; + + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + $this->info('Cachet '.CACHET_VERSION.' is installed ⚡'); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 059aa0cc1c04..12bc4a2ab21c 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -11,9 +11,13 @@ namespace CachetHQ\Cachet\Console; +use CachetHQ\Cachet\Console\Commands\AppResetCommand; +use CachetHQ\Cachet\Console\Commands\AppUpdateCommand; use CachetHQ\Cachet\Console\Commands\BeaconCommand; use CachetHQ\Cachet\Console\Commands\DemoMetricPointSeederCommand; use CachetHQ\Cachet\Console\Commands\DemoSeederCommand; +use CachetHQ\Cachet\Console\Commands\InstallCommand; +use CachetHQ\Cachet\Console\Commands\VersionCommand; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -32,9 +36,13 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ + AppResetCommand::class, + AppUpdateCommand::class, BeaconCommand::class, DemoMetricPointSeederCommand::class, DemoSeederCommand::class, + InstallCommand::class, + VersionCommand::class, ]; /** diff --git a/app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php b/app/Exceptions/Displayers/JsonValidationDisplayer.php similarity index 90% rename from app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php rename to app/Exceptions/Displayers/JsonValidationDisplayer.php index 02fd20ad3cba..bb3d0c5014e4 100644 --- a/app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php +++ b/app/Exceptions/Displayers/JsonValidationDisplayer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers; +namespace CachetHQ\Cachet\Exceptions\Displayers; use AltThree\Validator\ValidationException; use Exception; @@ -29,7 +29,7 @@ class JsonValidationDisplayer extends JsonDisplayer implements DisplayerInterfac * * @return \Symfony\Component\HttpFoundation\Response */ - public function display(Exception $exception, $id, $code, array $headers) + public function display(Exception $exception, string $id, int $code, array $headers) { $info = $this->info->generate($exception, $id, 400); @@ -47,7 +47,7 @@ public function display(Exception $exception, $id, $code, array $headers) * * @return bool */ - public function canDisplay(Exception $original, Exception $transformed, $code) + public function canDisplay(Exception $original, Exception $transformed, int $code) { return $transformed instanceof ValidationException; } diff --git a/app/Exceptions/Displayers/MaintenanceDisplayer.php b/app/Exceptions/Displayers/MaintenanceDisplayer.php new file mode 100644 index 000000000000..20b4a16d5e75 --- /dev/null +++ b/app/Exceptions/Displayers/MaintenanceDisplayer.php @@ -0,0 +1,104 @@ + + */ +class MaintenanceDisplayer implements DisplayerInterface +{ + /** + * The view factory instance. + * + * @var \Illuminate\Contracts\View\Factory + */ + protected $view; + + /** + * Create a new maintenance displayer instance. + * + * @param \Illuminate\Contracts\View\Factory $view + * + * @return void + */ + public function __construct(Factory $view) + { + $this->view = $view; + } + + /** + * Get the error response associated with the given exception. + * + * @param \Exception $exception + * @param string $id + * @param int $code + * @param string[] $headers + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function display(Exception $exception, string $id, int $code, array $headers) + { + return new Response($this->render(), $code, array_merge($headers, ['Content-Type' => $this->contentType()])); + } + + /** + * Render the page. + * + * @return string + */ + protected function render() + { + return $this->view->make('errors.maintenance')->render(); + } + + /** + * Get the supported content type. + * + * @return string + */ + public function contentType() + { + return 'text/html'; + } + + /** + * Can we display the exception? + * + * @param \Exception $original + * @param \Exception $transformed + * @param int $code + * + * @return bool + */ + public function canDisplay(Exception $original, Exception $transformed, int $code) + { + return $transformed instanceof MaintenanceModeException; + } + + /** + * Do we provide verbose information about the exception? + * + * @return bool + */ + public function isVerbose() + { + return false; + } +} diff --git a/app/Foundation/Exceptions/Displayers/RedirectDisplayer.php b/app/Exceptions/Displayers/RedirectDisplayer.php similarity index 92% rename from app/Foundation/Exceptions/Displayers/RedirectDisplayer.php rename to app/Exceptions/Displayers/RedirectDisplayer.php index 147a2c97618e..7a1670cbf77f 100644 --- a/app/Foundation/Exceptions/Displayers/RedirectDisplayer.php +++ b/app/Exceptions/Displayers/RedirectDisplayer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers; +namespace CachetHQ\Cachet\Exceptions\Displayers; use Exception; use GrahamCampbell\Exceptions\Displayers\DisplayerInterface; @@ -47,7 +47,7 @@ public function __construct(Request $request) * * @return \Symfony\Component\HttpFoundation\Response */ - public function display(Exception $exception, $id, $code, array $headers) + public function display(Exception $exception, string $id, int $code, array $headers) { return redirect()->guest('auth/login'); } @@ -71,7 +71,7 @@ public function contentType() * * @return bool */ - public function canDisplay(Exception $original, Exception $transformed, $code) + public function canDisplay(Exception $original, Exception $transformed, int $code) { $redirect = $transformed instanceof HttpExceptionInterface && $transformed->getStatusCode() === 401; diff --git a/app/Exceptions/Displayers/SettingsDisplayer.php b/app/Exceptions/Displayers/SettingsDisplayer.php new file mode 100644 index 000000000000..d3a76d0408a5 --- /dev/null +++ b/app/Exceptions/Displayers/SettingsDisplayer.php @@ -0,0 +1,88 @@ +request = $request; + } + + /** + * Get the error response associated with the given exception. + * + * @param \Exception $exception + * @param string $id + * @param int $code + * @param string[] $headers + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function display(Exception $exception, string $id, int $code, array $headers) + { + return cachet_redirect('setup'); + } + + /** + * Get the supported content type. + * + * @return string + */ + public function contentType() + { + return 'text/html'; + } + + /** + * Can we display the exception? + * + * @param \Exception $original + * @param \Exception $transformed + * @param int $code + * + * @return bool + */ + public function canDisplay(Exception $original, Exception $transformed, int $code) + { + return ($transformed instanceof ReadException) && !$this->request->is('setup*'); + } + + /** + * Do we provide verbose information about the exception? + * + * @return bool + */ + public function isVerbose() + { + return false; + } +} diff --git a/app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php b/app/Exceptions/Displayers/ThrottleDisplayer.php similarity index 87% rename from app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php rename to app/Exceptions/Displayers/ThrottleDisplayer.php index f36871db9215..5f1907c7d7db 100644 --- a/app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php +++ b/app/Exceptions/Displayers/ThrottleDisplayer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers; +namespace CachetHQ\Cachet\Exceptions\Displayers; use Exception; use GrahamCampbell\Exceptions\Displayers\DisplayerInterface; @@ -47,9 +47,9 @@ public function __construct(Request $request) * * @return \Symfony\Component\HttpFoundation\Response */ - public function display(Exception $exception, $id, $code, array $headers) + public function display(Exception $exception, string $id, int $code, array $headers) { - return redirect()->route('auth.login')->withError(trans('forms.login.rate-limit')); + return cachet_redirect('auth.login')->withError(trans('forms.login.rate-limit')); } /** @@ -71,7 +71,7 @@ public function contentType() * * @return bool */ - public function canDisplay(Exception $original, Exception $transformed, $code) + public function canDisplay(Exception $original, Exception $transformed, int $code) { return $transformed instanceof TooManyRequestsHttpException && $this->request->is('auth*'); } diff --git a/app/Foundation/Exceptions/Filters/ApiFilter.php b/app/Exceptions/Filters/ApiFilter.php similarity index 84% rename from app/Foundation/Exceptions/Filters/ApiFilter.php rename to app/Exceptions/Filters/ApiFilter.php index e824de2a4957..8d12e4dbffc2 100644 --- a/app/Foundation/Exceptions/Filters/ApiFilter.php +++ b/app/Exceptions/Filters/ApiFilter.php @@ -9,10 +9,11 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Exceptions\Filters; +namespace CachetHQ\Cachet\Exceptions\Filters; use Exception; use Illuminate\Http\Request; +use Illuminate\Support\Str; class ApiFilter { @@ -27,11 +28,11 @@ class ApiFilter * * @return \GrahamCampbell\Exceptions\Displayers\DisplayerInterface[] */ - public function filter(array $displayers, Request $request, Exception $original, Exception $transformed, $code) + public function filter(array $displayers, Request $request, Exception $original, Exception $transformed, int $code) { if ($request->is('api*')) { foreach ($displayers as $index => $displayer) { - if (!str_contains($displayer->contentType(), 'application/')) { + if (!Str::contains($displayer->contentType(), 'application/')) { unset($displayers[$index]); } } diff --git a/app/Foundation/Exceptions/Transformers/BusTransformer.php b/app/Exceptions/Transformers/BusTransformer.php similarity index 93% rename from app/Foundation/Exceptions/Transformers/BusTransformer.php rename to app/Exceptions/Transformers/BusTransformer.php index 6ffd879a2e96..be0b2fe5cb18 100644 --- a/app/Foundation/Exceptions/Transformers/BusTransformer.php +++ b/app/Exceptions/Transformers/BusTransformer.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Exceptions\Transformers; +namespace CachetHQ\Cachet\Exceptions\Transformers; use CachetHQ\Cachet\Bus\Exceptions\ExceptionInterface; use Exception; diff --git a/app/Foundation/Providers/ModuleServiceProvider.php b/app/Foundation/Providers/ModuleServiceProvider.php deleted file mode 100644 index b4181c6141eb..000000000000 --- a/app/Foundation/Providers/ModuleServiceProvider.php +++ /dev/null @@ -1,95 +0,0 @@ - [ - ['group' => 'messages', 'partial' => 'partials.modules.messages'], - ['group' => 'status', 'partial' => 'partials.modules.status'], - ['group' => 'components', 'partial' => 'partials.modules.components'], - ['group' => 'metrics', 'partial' => 'partials.modules.metrics'], - ['group' => 'stickied', 'partial' => 'partials.modules.stickied'], - ['group' => 'scheduled', 'partial' => 'partials.modules.scheduled'], - ['group' => 'timeline', 'partial' => 'partials.modules.timeline'], - ], - ]; - - /** - * The group definitions. - * - * @var array - */ - protected $groups = [ - 'index' => [ - 'messages' => 10000, - 'status' => 20000, - 'components' => 30000, - 'metrics' => 40000, - 'scheduled' => 50000, - 'stickied' => 60000, - 'timeline' => 70000, - ], - ]; - - /** - * Boot the service provider. - * - * @param \Illuminate\View\Compilers\BladeCompiler $blade - */ - public function boot(BladeCompiler $blade) - { - $blade->directive('modules', function ($group) { - return sprintf( - 'call(\'%s@%s\', [ - \'factory\' => $__env, - \'data\' => array_except(get_defined_vars(), array(\'__data\', \'__path\')), - \'modules\' => $modules, - \'group\' => %s, - ]); ?>', - ModulesRenderer::class, - 'renderModules', - empty($group) ? 'null' : $group - ); - }); - } - - /** - * Register the service provider. - * - * @return void - */ - public function register() - { - foreach ($this->modules as $key => $modules) { - $this->app->singleton("view.modules: {$key}", function () use ($modules) { - return $modules; - }); - } - - foreach ($this->groups as $key => $groups) { - $this->app->singleton("view.groups: {$key}", function () use ($groups) { - return $groups; - }); - } - } -} diff --git a/app/Http/Controllers/Api/AbstractApiController.php b/app/Http/Controllers/Api/AbstractApiController.php index 4b871c5be28f..10be23db248f 100644 --- a/app/Http/Controllers/Api/AbstractApiController.php +++ b/app/Http/Controllers/Api/AbstractApiController.php @@ -141,7 +141,7 @@ protected function paginator(Paginator $paginator, Request $request) { foreach ($request->query as $key => $value) { if ($key != 'page') { - $paginator->addQuery($key, $value); + $paginator->appends($key, $value); } } diff --git a/app/Http/Controllers/Api/ComponentController.php b/app/Http/Controllers/Api/ComponentController.php index 35c43a8ad13e..9bda7b09cb53 100644 --- a/app/Http/Controllers/Api/ComponentController.php +++ b/app/Http/Controllers/Api/ComponentController.php @@ -11,11 +11,10 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; -use CachetHQ\Cachet\Bus\Commands\Component\AddComponentCommand; +use CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand; use CachetHQ\Cachet\Bus\Commands\Component\RemoveComponentCommand; use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; use CachetHQ\Cachet\Models\Component; -use CachetHQ\Cachet\Models\Tag; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Contracts\Auth\Guard; use Illuminate\Database\QueryException; @@ -29,7 +28,7 @@ class ComponentController extends AbstractApiController * * @return \Illuminate\Http\JsonResponse */ - public function getComponents() + public function index() { if (app(Guard::class)->check()) { $components = Component::query(); @@ -37,6 +36,10 @@ public function getComponents() $components = Component::enabled(); } + if ($tags = Binput::get('tags')) { + $components->withAnyTags($tags); + } + $components->search(Binput::except(['sort', 'order', 'per_page'])); if ($sortBy = Binput::get('sort')) { @@ -57,7 +60,7 @@ public function getComponents() * * @return \Illuminate\Http\JsonResponse */ - public function getComponent(Component $component) + public function show(Component $component) { return $this->item($component); } @@ -67,36 +70,24 @@ public function getComponent(Component $component) * * @return \Illuminate\Http\JsonResponse */ - public function postComponents() + public function store() { try { - $component = dispatch(new AddComponentCommand( + $component = execute(new CreateComponentCommand( Binput::get('name'), Binput::get('description'), Binput::get('status'), Binput::get('link'), Binput::get('order'), Binput::get('group_id'), - (bool) Binput::get('enabled', true) + (bool) Binput::get('enabled', true), + Binput::get('meta'), + Binput::get('tags') )); } catch (QueryException $e) { throw new BadRequestHttpException(); } - if (Binput::has('tags')) { - // The component was added successfully, so now let's deal with the tags. - $tags = preg_split('/ ?, ?/', Binput::get('tags')); - - // For every tag, do we need to create it? - $componentTags = array_map(function ($taggable) use ($component) { - return Tag::firstOrCreate([ - 'name' => $taggable, - ])->id; - }, $tags); - - $component->tags()->sync($componentTags); - } - return $this->item($component); } @@ -107,10 +98,10 @@ public function postComponents() * * @return \Illuminate\Http\JsonResponse */ - public function putComponent(Component $component) + public function update(Component $component) { try { - dispatch(new UpdateComponentCommand( + execute(new UpdateComponentCommand( $component, Binput::get('name'), Binput::get('description'), @@ -118,23 +109,15 @@ public function putComponent(Component $component) Binput::get('link'), Binput::get('order'), Binput::get('group_id'), - (bool) Binput::get('enabled', true) + Binput::get('enabled', $component->enabled), + Binput::get('meta'), + Binput::get('tags'), + (bool) Binput::get('silent', false) )); } catch (QueryException $e) { throw new BadRequestHttpException(); } - if (Binput::has('tags')) { - $tags = preg_split('/ ?, ?/', Binput::get('tags')); - - // For every tag, do we need to create it? - $componentTags = array_map(function ($taggable) use ($component) { - return Tag::firstOrCreate(['name' => $taggable])->id; - }, $tags); - - $component->tags()->sync($componentTags); - } - return $this->item($component); } @@ -145,9 +128,9 @@ public function putComponent(Component $component) * * @return \Illuminate\Http\JsonResponse */ - public function deleteComponent(Component $component) + public function destroy(Component $component) { - dispatch(new RemoveComponentCommand($component)); + execute(new RemoveComponentCommand($component)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/ComponentGroupController.php b/app/Http/Controllers/Api/ComponentGroupController.php index 796eab696bb9..957106e101d3 100644 --- a/app/Http/Controllers/Api/ComponentGroupController.php +++ b/app/Http/Controllers/Api/ComponentGroupController.php @@ -11,7 +11,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; -use CachetHQ\Cachet\Bus\Commands\ComponentGroup\AddComponentGroupCommand; +use CachetHQ\Cachet\Bus\Commands\ComponentGroup\CreateComponentGroupCommand; use CachetHQ\Cachet\Bus\Commands\ComponentGroup\RemoveComponentGroupCommand; use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand; use CachetHQ\Cachet\Models\ComponentGroup; @@ -52,7 +52,7 @@ public function __construct(Guard $guard) * * @return \Illuminate\Http\JsonResponse */ - public function getGroups() + public function index() { $groups = ComponentGroup::query(); if (!$this->guard->check()) { @@ -79,7 +79,7 @@ public function getGroups() * * @return \Illuminate\Http\JsonResponse */ - public function getGroup(ComponentGroup $group) + public function show(ComponentGroup $group) { return $this->item($group); } @@ -89,10 +89,10 @@ public function getGroup(ComponentGroup $group) * * @return \Illuminate\Http\JsonResponse */ - public function postGroups() + public function store() { try { - $group = dispatch(new AddComponentGroupCommand( + $group = execute(new CreateComponentGroupCommand( Binput::get('name'), Binput::get('order', 0), Binput::get('collapsed', 0), @@ -112,10 +112,10 @@ public function postGroups() * * @return \Illuminate\Http\JsonResponse */ - public function putGroup(ComponentGroup $group) + public function update(ComponentGroup $group) { try { - $group = dispatch(new UpdateComponentGroupCommand( + $group = execute(new UpdateComponentGroupCommand( $group, Binput::get('name'), Binput::get('order'), @@ -136,9 +136,9 @@ public function putGroup(ComponentGroup $group) * * @return \Illuminate\Http\JsonResponse */ - public function deleteGroup(ComponentGroup $group) + public function destroy(ComponentGroup $group) { - dispatch(new RemoveComponentGroupCommand($group)); + execute(new RemoveComponentGroupCommand($group)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/GeneralController.php b/app/Http/Controllers/Api/GeneralController.php index 2005560e92cc..23ba1fa4485f 100644 --- a/app/Http/Controllers/Api/GeneralController.php +++ b/app/Http/Controllers/Api/GeneralController.php @@ -17,7 +17,7 @@ /** * This is the general api controller. * - * @author James Brooks + * @author James Brooks */ class GeneralController extends AbstractApiController { @@ -55,6 +55,9 @@ public function status() { $system = app()->make(System::class)->getStatus(); - return $this->item($system['system_message']); + return $this->item([ + 'status' => $system['system_status'], + 'message' => $system['system_message'], + ]); } } diff --git a/app/Http/Controllers/Api/IncidentController.php b/app/Http/Controllers/Api/IncidentController.php index 2d843710c556..cd705519f588 100644 --- a/app/Http/Controllers/Api/IncidentController.php +++ b/app/Http/Controllers/Api/IncidentController.php @@ -11,8 +11,8 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; +use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\RemoveIncidentCommand; -use CachetHQ\Cachet\Bus\Commands\Incident\ReportIncidentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand; use CachetHQ\Cachet\Models\Incident; use GrahamCampbell\Binput\Facades\Binput; @@ -28,7 +28,7 @@ class IncidentController extends AbstractApiController * * @return \Illuminate\Http\JsonResponse */ - public function getIncidents() + public function index() { $incidentVisibility = app(Guard::class)->check() ? 0 : 1; @@ -54,7 +54,7 @@ public function getIncidents() * * @return \Illuminate\Http\JsonResponse */ - public function getIncident(Incident $incident) + public function show(Incident $incident) { return $this->item($incident); } @@ -64,21 +64,22 @@ public function getIncident(Incident $incident) * * @return \Illuminate\Http\JsonResponse */ - public function postIncidents() + public function store() { try { - $incident = dispatch(new ReportIncidentCommand( + $incident = execute(new CreateIncidentCommand( Binput::get('name'), Binput::get('status'), - Binput::get('message'), - Binput::get('visible', true), + Binput::get('message', null, false, false), + (bool) Binput::get('visible', true), Binput::get('component_id'), Binput::get('component_status'), - Binput::get('notify', true), - Binput::get('stickied', false), - Binput::get('created_at'), + (bool) Binput::get('notify', true), + (bool) Binput::get('stickied', false), + Binput::get('occurred_at'), Binput::get('template'), - Binput::get('vars', []) + Binput::get('vars', []), + Binput::get('meta', []) )); } catch (QueryException $e) { throw new BadRequestHttpException(); @@ -94,20 +95,20 @@ public function postIncidents() * * @return \Illuminate\Http\JsonResponse */ - public function putIncident(Incident $incident) + public function update(Incident $incident) { try { - $incident = dispatch(new UpdateIncidentCommand( + $incident = execute(new UpdateIncidentCommand( $incident, Binput::get('name'), Binput::get('status'), Binput::get('message'), - Binput::get('visible', true), + (bool) Binput::get('visible', true), Binput::get('component_id'), Binput::get('component_status'), - Binput::get('notify', true), - Binput::get('stickied', false), - Binput::get('created_at'), + (bool) Binput::get('notify', true), + (bool) Binput::get('stickied', false), + Binput::get('occurred_at'), Binput::get('template'), Binput::get('vars', []) )); @@ -125,9 +126,9 @@ public function putIncident(Incident $incident) * * @return \Illuminate\Http\JsonResponse */ - public function deleteIncident(Incident $incident) + public function destroy(Incident $incident) { - dispatch(new RemoveIncidentCommand($incident)); + execute(new RemoveIncidentCommand($incident)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/IncidentTemplateController.php b/app/Http/Controllers/Api/IncidentTemplateController.php new file mode 100644 index 000000000000..3f1ba4183566 --- /dev/null +++ b/app/Http/Controllers/Api/IncidentTemplateController.php @@ -0,0 +1,51 @@ +sort($sortBy, $direction); + } + + $templates = $templates->paginate(Binput::get('per_page', 20)); + + return $this->paginator($templates, Request::instance()); + } + + /** + * Get a single incident templates. + * + * @param \CachetHQ\Cachet\Models\IncidentTemplate $incidentTemplate + * + * @return \Illuminate\Http\JsonResponse + */ + public function show(IncidentTemplate $incidentTemplate) + { + return $this->item($incidentTemplate); + } +} diff --git a/app/Http/Controllers/Api/IncidentUpdateController.php b/app/Http/Controllers/Api/IncidentUpdateController.php index 84a01d7ab5d4..0c239a6a4310 100644 --- a/app/Http/Controllers/Api/IncidentUpdateController.php +++ b/app/Http/Controllers/Api/IncidentUpdateController.php @@ -11,8 +11,8 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; +use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\CreateIncidentUpdateCommand; use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\RemoveIncidentUpdateCommand; -use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\ReportIncidentUpdateCommand; use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\UpdateIncidentUpdateCommand; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\IncidentUpdate; @@ -36,9 +36,9 @@ class IncidentUpdateController extends AbstractApiController * * @return \Illuminate\Http\JsonResponse */ - public function getIncidentUpdates(Incident $incident) + public function index(Incident $incident) { - $updates = IncidentUpdate::orderBy('created_at', 'desc'); + $updates = $incident->updates()->orderBy('created_at', 'desc'); if ($sortBy = Binput::get('sort')) { $direction = Binput::has('order') && Binput::get('order') == 'desc'; @@ -59,7 +59,7 @@ public function getIncidentUpdates(Incident $incident) * * @return \Illuminate\Http\JsonResponse */ - public function getIncidentUpdate(Incident $incident, IncidentUpdate $update) + public function show(Incident $incident, IncidentUpdate $update) { return $this->item($update); } @@ -71,13 +71,15 @@ public function getIncidentUpdate(Incident $incident, IncidentUpdate $update) * * @return \Illuminate\Http\JsonResponse */ - public function postIncidentUpdate(Incident $incident) + public function store(Incident $incident) { try { - $update = dispatch(new ReportIncidentUpdateCommand( + $update = execute(new CreateIncidentUpdateCommand( $incident, Binput::get('status'), Binput::get('message'), + Binput::get('component_id'), + Binput::get('component_status'), Auth::user() )); } catch (QueryException $e) { @@ -95,10 +97,10 @@ public function postIncidentUpdate(Incident $incident) * * @return \Illuminate\Http\JsonResponse */ - public function putIncidentUpdate(Incident $incident, IncidentUpdate $update) + public function update(Incident $incident, IncidentUpdate $update) { try { - $update = dispatch(new UpdateIncidentUpdateCommand( + $update = execute(new UpdateIncidentUpdateCommand( $update, Binput::get('status'), Binput::get('message'), @@ -119,10 +121,10 @@ public function putIncidentUpdate(Incident $incident, IncidentUpdate $update) * * @return \Illuminate\Http\JsonResponse */ - public function deleteIncidentUpdate(Incident $incident, IncidentUpdate $update) + public function destroy(Incident $incident, IncidentUpdate $update) { try { - dispatch(new RemoveIncidentUpdateCommand($update)); + execute(new RemoveIncidentUpdateCommand($update)); } catch (QueryException $e) { throw new BadRequestHttpException(); } diff --git a/app/Http/Controllers/Api/MetricController.php b/app/Http/Controllers/Api/MetricController.php index d8b931b01bb1..4ef2e1e4fd38 100644 --- a/app/Http/Controllers/Api/MetricController.php +++ b/app/Http/Controllers/Api/MetricController.php @@ -11,7 +11,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricCommand; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricCommand; use CachetHQ\Cachet\Bus\Commands\Metric\RemoveMetricCommand; use CachetHQ\Cachet\Bus\Commands\Metric\UpdateMetricCommand; use CachetHQ\Cachet\Models\Metric; @@ -27,7 +27,7 @@ class MetricController extends AbstractApiController * * @return \Illuminate\Database\Eloquent\Collection */ - public function getMetrics() + public function index() { $metrics = Metric::query(); @@ -49,34 +49,20 @@ public function getMetrics() * * @return \Illuminate\Http\JsonResponse */ - public function getMetric(Metric $metric) + public function show(Metric $metric) { return $this->item($metric); } - /** - * Get all metric points. - * - * @param \CachetHQ\Cachet\Models\Metric $metric - * - * @return \Illuminate\Database\Eloquent\Collection - */ - public function getMetricPoints(Metric $metric) - { - $points = $metric->points()->paginate(Binput::get('per_page', 20)); - - return $this->paginator($points, Request::instance()); - } - /** * Create a new metric. * * @return \Illuminate\Http\JsonResponse */ - public function postMetrics() + public function store() { try { - $metric = dispatch(new AddMetricCommand( + $metric = execute(new CreateMetricCommand( Binput::get('name'), Binput::get('suffix'), Binput::get('description'), @@ -86,7 +72,8 @@ public function postMetrics() Binput::get('places', 2), Binput::get('default_view', Binput::get('view', 1)), Binput::get('threshold', 5), - Binput::get('order', 0) + Binput::get('order', 0), + Binput::get('visible', 1) )); } catch (QueryException $e) { throw new BadRequestHttpException(); @@ -102,10 +89,10 @@ public function postMetrics() * * @return \Illuminate\Http\JsonResponse */ - public function putMetric(Metric $metric) + public function update(Metric $metric) { try { - $metric = dispatch(new UpdateMetricCommand( + $metric = execute(new UpdateMetricCommand( $metric, Binput::get('name'), Binput::get('suffix'), @@ -116,7 +103,8 @@ public function putMetric(Metric $metric) Binput::get('places'), Binput::get('default_view', Binput::get('view')), Binput::get('threshold'), - Binput::get('order') + Binput::get('order'), + Binput::get('visible') )); } catch (QueryException $e) { throw new BadRequestHttpException(); @@ -132,9 +120,9 @@ public function putMetric(Metric $metric) * * @return \Illuminate\Http\JsonResponse */ - public function deleteMetric(Metric $metric) + public function destroy(Metric $metric) { - dispatch(new RemoveMetricCommand($metric)); + execute(new RemoveMetricCommand($metric)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/MetricPointController.php b/app/Http/Controllers/Api/MetricPointController.php index a84758d93349..8afb5c59ed11 100644 --- a/app/Http/Controllers/Api/MetricPointController.php +++ b/app/Http/Controllers/Api/MetricPointController.php @@ -11,13 +11,14 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricPointCommand; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricPointCommand; use CachetHQ\Cachet\Bus\Commands\Metric\RemoveMetricPointCommand; use CachetHQ\Cachet\Bus\Commands\Metric\UpdateMetricPointCommand; use CachetHQ\Cachet\Models\Metric; use CachetHQ\Cachet\Models\MetricPoint; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Database\QueryException; +use Illuminate\Support\Facades\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; class MetricPointController extends AbstractApiController @@ -30,9 +31,11 @@ class MetricPointController extends AbstractApiController * * @return \Illuminate\Http\JsonResponse */ - public function getMetricPoints(Metric $metric, MetricPoint $metricPoint) + public function index(Metric $metric, MetricPoint $metricPoint) { - return $this->item($metricPoint); + $points = $metric->points()->paginate(Binput::get('per_page', 20)); + + return $this->paginator($points, Request::instance()); } /** @@ -42,10 +45,10 @@ public function getMetricPoints(Metric $metric, MetricPoint $metricPoint) * * @return \Illuminate\Http\JsonResponse */ - public function postMetricPoints(Metric $metric) + public function store(Metric $metric) { try { - $metricPoint = dispatch(new AddMetricPointCommand( + $metricPoint = execute(new CreateMetricPointCommand( $metric, Binput::get('value'), Binput::get('timestamp') @@ -61,13 +64,13 @@ public function postMetricPoints(Metric $metric) * Updates a metric point. * * @param \CachetHQ\Cachet\Models\Metric $metric - * @param \CachetHQ\Cachet\Models\MetircPoint $metricPoint + * @param \CachetHQ\Cachet\Models\MetricPoint $metricPoint * * @return \Illuminate\Http\JsonResponse */ - public function putMetricPoint(Metric $metric, MetricPoint $metricPoint) + public function update(Metric $metric, MetricPoint $metricPoint) { - $metricPoint = dispatch(new UpdateMetricPointCommand( + $metricPoint = execute(new UpdateMetricPointCommand( $metricPoint, $metric, Binput::get('value'), @@ -85,9 +88,9 @@ public function putMetricPoint(Metric $metric, MetricPoint $metricPoint) * * @return \Illuminate\Http\JsonResponse */ - public function deleteMetricPoint(Metric $metric, MetricPoint $metricPoint) + public function destroy(Metric $metric, MetricPoint $metricPoint) { - dispatch(new RemoveMetricPointCommand($metricPoint)); + execute(new RemoveMetricPointCommand($metricPoint)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/ScheduleController.php b/app/Http/Controllers/Api/ScheduleController.php new file mode 100644 index 000000000000..c59f46dbd62c --- /dev/null +++ b/app/Http/Controllers/Api/ScheduleController.php @@ -0,0 +1,129 @@ + + */ +class ScheduleController extends AbstractApiController +{ + /** + * Return all schedules. + * + * @return \Illuminate\Http\JsonResponse + */ + public function index() + { + $schedule = Schedule::query(); + + if ($sortBy = Binput::get('sort')) { + $direction = Binput::has('order') && Binput::get('order') == 'desc'; + + $schedule->sort($sortBy, $direction); + } + + $schedule = $schedule->paginate(Binput::get('per_page', 20)); + + return $this->paginator($schedule, Request::instance()); + } + + /** + * Return a single schedule. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return \Illuminate\Http\JsonResponse + */ + public function show(Schedule $schedule) + { + return $this->item($schedule); + } + + /** + * Create a new schedule. + * + * @return \Illuminate\Http\JsonResponse + */ + public function store() + { + try { + $schedule = execute(new CreateScheduleCommand( + Binput::get('name'), + Binput::get('message', null, false, false), + Binput::get('status'), + Binput::get('scheduled_at'), + Binput::get('completed_at'), + Binput::get('components', []), + Binput::get('notify', false) + )); + } catch (QueryException $e) { + throw new BadRequestHttpException(); + } + + return $this->item($schedule); + } + + /** + * Update a schedule. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return \Illuminate\Http\JsonResponse + */ + public function update(Schedule $schedule) + { + try { + $schedule = execute(new UpdateScheduleCommand( + $schedule, + Binput::get('name'), + Binput::get('message'), + Binput::get('status'), + Binput::get('scheduled_at'), + Binput::get('completed_at'), + Binput::get('components', []) + )); + } catch (QueryException $e) { + throw new BadRequestHttpException(); + } + + return $this->item($schedule); + } + + /** + * Delete a schedule. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return \Illuminate\Http\JsonResponse + */ + public function destroy(Schedule $schedule) + { + try { + execute(new DeleteScheduleCommand($schedule)); + } catch (QueryException $e) { + throw new BadRequestHttpException(); + } + + return $this->noContent(); + } +} diff --git a/app/Http/Controllers/Api/SubscriberController.php b/app/Http/Controllers/Api/SubscriberController.php index 4d1793deb1a1..621aa06d70bb 100644 --- a/app/Http/Controllers/Api/SubscriberController.php +++ b/app/Http/Controllers/Api/SubscriberController.php @@ -13,9 +13,7 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand; use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriberCommand; -use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriptionCommand; use CachetHQ\Cachet\Models\Subscriber; -use CachetHQ\Cachet\Models\Subscription; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Contracts\Config\Repository; use Illuminate\Database\QueryException; @@ -35,7 +33,7 @@ class SubscriberController extends AbstractApiController * * @return \Illuminate\Http\JsonResponse */ - public function getSubscribers() + public function index() { $subscribers = Subscriber::paginate(Binput::get('per_page', 20)); @@ -47,12 +45,12 @@ public function getSubscribers() * * @return \Illuminate\Http\JsonResponse */ - public function postSubscribers() + public function store() { $verified = Binput::get('verify', app(Repository::class)->get('setting.skip_subscriber_verification')); try { - $subscriber = dispatch(new SubscribeSubscriberCommand(Binput::get('email'), $verified, Binput::get('components'))); + $subscriber = execute(new SubscribeSubscriberCommand(Binput::get('email'), $verified, Binput::get('components', null))); } catch (QueryException $e) { throw new BadRequestHttpException(); } @@ -67,23 +65,9 @@ public function postSubscribers() * * @return \Illuminate\Http\JsonResponse */ - public function deleteSubscriber(Subscriber $subscriber) + public function destroy(Subscriber $subscriber) { - dispatch(new UnsubscribeSubscriberCommand($subscriber)); - - return $this->noContent(); - } - - /** - * Delete a subscriber. - * - * @param \CachetHQ\Cachet\Models\Subscriber $subscriber - * - * @return \Illuminate\Http\JsonResponse - */ - public function deleteSubscription(Subscription $subscriber) - { - dispatch(new UnsubscribeSubscriptionCommand($subscriber)); + execute(new UnsubscribeSubscriberCommand($subscriber)); return $this->noContent(); } diff --git a/app/Http/Controllers/Api/SubscriptionController.php b/app/Http/Controllers/Api/SubscriptionController.php new file mode 100644 index 000000000000..173a5e0ffc9e --- /dev/null +++ b/app/Http/Controllers/Api/SubscriptionController.php @@ -0,0 +1,37 @@ + + */ +class SubscriptionController extends AbstractApiController +{ + /** + * Delete a subscription. + * + * @param \CachetHQ\Cachet\Models\Subscription $subscription + * + * @return \Illuminate\Http\JsonResponse + */ + public function destroy(Subscription $subscription) + { + execute(new UnsubscribeSubscriptionCommand($subscription)); + + return $this->noContent(); + } +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index ef17d71c83f7..597b9b51893a 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -17,11 +17,12 @@ use CachetHQ\Cachet\Bus\Events\User\UserPassedTwoAuthEvent; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; +use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\View; -use PragmaRX\Google2FA\Vendor\Laravel\Facade as Google2FA; +use PragmaRX\Google2FA\Google2FA; class AuthController extends Controller { @@ -47,9 +48,9 @@ public function postLogin() // Login with username or email. $loginKey = filter_var($loginData['username'], FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; - $loginData[$loginKey] = array_pull($loginData, 'username'); + $loginData[$loginKey] = Arr::pull($loginData, 'username'); - $rememberUser = array_pull($loginData, 'remember_me') === '1'; + $rememberUser = Arr::pull($loginData, 'remember_me') === '1'; // Validate login credentials. if (Auth::validate($loginData)) { @@ -88,27 +89,34 @@ public function showTwoFactorAuth() * * This feels very hacky, but we have to juggle authentication and codes. * + * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException + * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException + * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException + * * @return \Illuminate\Http\RedirectResponse */ public function postTwoFactor() { // Check that we have a session. if ($userId = Session::pull('2fa_id')) { - $code = Binput::get('code'); + $code = str_replace(' ', '', Binput::get('code')); // Maybe a temp login here. Auth::loginUsingId($userId); - $valid = Google2FA::verifyKey(Auth::user()->google_2fa_secret, $code); + $user = Auth::user(); + + $google2fa = new Google2FA(); + $valid = $google2fa->verifyKey($user->google_2fa_secret, $code); if ($valid) { - event(new UserPassedTwoAuthEvent(Auth::user())); + event(new UserPassedTwoAuthEvent($user)); - event(new UserLoggedInEvent(Auth::user())); + event(new UserLoggedInEvent($user)); return Redirect::intended('dashboard'); } else { - event(new UserFailedTwoAuthEvent(Auth::user())); + event(new UserFailedTwoAuthEvent($user)); // Failed login, log back out. Auth::logout(); @@ -131,6 +139,6 @@ public function logoutAction() Auth::logout(); - return Redirect::to('/'); + return cachet_redirect('status-page'); } } diff --git a/app/Http/Controllers/Dashboard/ApiController.php b/app/Http/Controllers/Dashboard/ApiController.php index d838bad8f54f..4e59a7a40c17 100644 --- a/app/Http/Controllers/Dashboard/ApiController.php +++ b/app/Http/Controllers/Dashboard/ApiController.php @@ -36,7 +36,7 @@ class ApiController extends AbstractApiController public function postUpdateComponent(Component $component) { try { - dispatch(new UpdateComponentCommand( + execute(new UpdateComponentCommand( $component, $component->name, $component->description, @@ -44,7 +44,10 @@ public function postUpdateComponent(Component $component) $component->link, $component->order, $component->group_id, - $component->enabled + $component->enabled, + $component->meta, + $component->tags, + true // Silent mode )); } catch (QueryException $e) { throw new BadRequestHttpException(); @@ -66,7 +69,7 @@ public function postUpdateComponentOrder() try { $component = Component::find($componentId); - dispatch(new UpdateComponentCommand( + execute(new UpdateComponentCommand( $component, $component->name, $component->description, @@ -74,7 +77,10 @@ public function postUpdateComponentOrder() $component->link, $order + 1, $component->group_id, - $component->enabled + $component->enabled, + $component->meta, + $component->tags, + true // Silent mode )); } catch (QueryException $e) { throw new BadRequestHttpException(); @@ -96,7 +102,7 @@ public function postUpdateComponentGroupOrder() foreach ($groupData as $order => $groupId) { $group = ComponentGroup::find($groupId); - dispatch(new UpdateComponentGroupCommand( + execute(new UpdateComponentGroupCommand( $group, $group->name, $order + 1, diff --git a/app/Http/Controllers/Dashboard/ComponentController.php b/app/Http/Controllers/Dashboard/ComponentController.php index c8bc20fd25db..c9c8e6792e1e 100644 --- a/app/Http/Controllers/Dashboard/ComponentController.php +++ b/app/Http/Controllers/Dashboard/ComponentController.php @@ -12,19 +12,20 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; -use CachetHQ\Cachet\Bus\Commands\Component\AddComponentCommand; +use CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand; use CachetHQ\Cachet\Bus\Commands\Component\RemoveComponentCommand; use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; -use CachetHQ\Cachet\Bus\Commands\ComponentGroup\AddComponentGroupCommand; -use CachetHQ\Cachet\Bus\Commands\ComponentGroup\RemoveComponentGroupCommand; -use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\ComponentGroup; -use CachetHQ\Cachet\Models\Tag; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\View; +/** + * This is the component controller class. + * + * @author James Brooks + */ class ComponentController extends Controller { /** @@ -57,8 +58,8 @@ public function __construct() ]; View::share([ - 'sub_menu' => $this->subMenu, - 'sub_title' => trans_choice('dashboard.components.components', 2), + 'subMenu' => $this->subMenu, + 'subTitle' => trans_choice('dashboard.components.components', 2), ]); } @@ -69,7 +70,7 @@ public function __construct() */ public function showComponents() { - $components = Component::orderBy('order')->orderBy('created_at')->get(); + $components = Component::with('group')->orderBy('order')->orderBy('created_at')->get(); $this->subMenu['components']['active'] = true; @@ -79,21 +80,6 @@ public function showComponents() ->withSubMenu($this->subMenu); } - /** - * Shows the component groups view. - * - * @return \Illuminate\View\View - */ - public function showComponentGroups() - { - $this->subMenu['groups']['active'] = true; - - return View::make('dashboard.components.groups.index') - ->withPageTitle(trans_choice('dashboard.components.groups.groups', 2).' - '.trans('dashboard.dashboard')) - ->withGroups(ComponentGroup::orderBy('order')->get()) - ->withSubMenu($this->subMenu); - } - /** * Shows the edit component view. * @@ -123,10 +109,9 @@ public function showEditComponent(Component $component) public function updateComponentAction(Component $component) { $componentData = Binput::get('component'); - $tags = array_pull($componentData, 'tags'); try { - $component = dispatch(new UpdateComponentCommand( + $component = execute(new UpdateComponentCommand( $component, $componentData['name'], $componentData['description'], @@ -134,7 +119,10 @@ public function updateComponentAction(Component $component) $componentData['link'], $componentData['order'], $componentData['group_id'], - $componentData['enabled'] + $componentData['enabled'], + null, // Meta data cannot be supplied through the dashboard yet. + $componentData['tags'], // Meta data cannot be supplied through the dashboard yet. + true // Silent since we're not really making changes to the component (this should be optional) )); } catch (ValidationException $e) { return cachet_redirect('dashboard.components.edit', [$component->id]) @@ -143,16 +131,6 @@ public function updateComponentAction(Component $component) ->withErrors($e->getMessageBag()); } - // The component was added successfully, so now let's deal with the tags. - $tags = preg_split('/ ?, ?/', $tags); - - // For every tag, do we need to create it? - $componentTags = array_map(function ($taggable) use ($component) { - return Tag::firstOrCreate(['name' => $taggable])->id; - }, $tags); - - $component->tags()->sync($componentTags); - return cachet_redirect('dashboard.components.edit', [$component->id]) ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.edit.success'))); } @@ -177,17 +155,18 @@ public function showAddComponent() public function createComponentAction() { $componentData = Binput::get('component'); - $tags = array_pull($componentData, 'tags'); try { - $component = dispatch(new AddComponentCommand( + $component = execute(new CreateComponentCommand( $componentData['name'], $componentData['description'], $componentData['status'], $componentData['link'], $componentData['order'], $componentData['group_id'], - $componentData['enabled'] + $componentData['enabled'], + null, // Meta data cannot be supplied through the dashboard yet. + $componentData['tags'] )); } catch (ValidationException $e) { return cachet_redirect('dashboard.components.create') @@ -196,16 +175,6 @@ public function createComponentAction() ->withErrors($e->getMessageBag()); } - // The component was added successfully, so now let's deal with the tags. - $tags = preg_split('/ ?, ?/', $tags); - - // For every tag, do we need to create it? - $componentTags = array_map(function ($taggable) use ($component) { - return Tag::firstOrCreate(['name' => $taggable])->id; - }, $tags); - - $component->tags()->sync($componentTags); - return cachet_redirect('dashboard.components') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.add.success'))); } @@ -219,102 +188,9 @@ public function createComponentAction() */ public function deleteComponentAction(Component $component) { - dispatch(new RemoveComponentCommand($component)); + execute(new RemoveComponentCommand($component)); return cachet_redirect('dashboard.components') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success'))); } - - /** - * Deletes a given component group. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup $group - * - * @return \Illuminate\Http\RedirectResponse - */ - public function deleteComponentGroupAction(ComponentGroup $group) - { - dispatch(new RemoveComponentGroupCommand($group)); - - return cachet_redirect('dashboard.components.groups') - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success'))); - } - - /** - * Shows the add component group view. - * - * @return \Illuminate\View\View - */ - public function showAddComponentGroup() - { - return View::make('dashboard.components.groups.add') - ->withPageTitle(trans('dashboard.components.groups.add.title').' - '.trans('dashboard.dashboard')); - } - - /** - * Shows the edit component group view. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup $group - * - * @return \Illuminate\View\View - */ - public function showEditComponentGroup(ComponentGroup $group) - { - return View::make('dashboard.components.groups.edit') - ->withPageTitle(trans('dashboard.components.groups.edit.title').' - '.trans('dashboard.dashboard')) - ->withGroup($group); - } - - /** - * Creates a new component. - * - * @return \Illuminate\Http\RedirectResponse - */ - public function postAddComponentGroup() - { - try { - $group = dispatch(new AddComponentGroupCommand( - Binput::get('name'), - Binput::get('order', 0), - Binput::get('collapsed'), - Binput::get('visible') - )); - } catch (ValidationException $e) { - return cachet_redirect('dashboard.components.groups.create') - ->withInput(Binput::all()) - ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.add.failure'))) - ->withErrors($e->getMessageBag()); - } - - return cachet_redirect('dashboard.components.groups') - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.add.success'))); - } - - /** - * Updates a component group. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup $group - * - * @return \Illuminate\Http\RedirectResponse - */ - public function updateComponentGroupAction(ComponentGroup $group) - { - try { - $group = dispatch(new UpdateComponentGroupCommand( - $group, - Binput::get('name'), - $group->order, - Binput::get('collapsed'), - Binput::get('visible') - )); - } catch (ValidationException $e) { - return cachet_redirect('dashboard.components.groups.edit', [$group->id]) - ->withInput(Binput::all()) - ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure'))) - ->withErrors($e->getMessageBag()); - } - - return cachet_redirect('dashboard.components.groups.edit', [$group->id]) - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success'))); - } } diff --git a/app/Http/Controllers/Dashboard/ComponentGroupController.php b/app/Http/Controllers/Dashboard/ComponentGroupController.php new file mode 100644 index 000000000000..ad81afc9f00e --- /dev/null +++ b/app/Http/Controllers/Dashboard/ComponentGroupController.php @@ -0,0 +1,173 @@ + + */ +class ComponentGroupController extends Controller +{ + /** + * Array of sub-menu items. + * + * @var array + */ + protected $subMenu = []; + + /** + * Creates a new component controller instance. + * + * @return void + */ + public function __construct() + { + $this->subMenu = [ + 'components' => [ + 'title' => trans('dashboard.components.components'), + 'url' => cachet_route('dashboard.components'), + 'icon' => 'ion-ios-browsers', + 'active' => false, + ], + 'groups' => [ + 'title' => trans_choice('dashboard.components.groups.groups', 2), + 'url' => cachet_route('dashboard.components.groups'), + 'icon' => 'ion-folder', + 'active' => false, + ], + ]; + + View::share([ + 'sub_menu' => $this->subMenu, + 'subTitle' => trans_choice('dashboard.components.components', 2), + ]); + } + + /** + * Shows the component groups view. + * + * @return \Illuminate\View\View + */ + public function showComponentGroups() + { + $this->subMenu['groups']['active'] = true; + + return View::make('dashboard.components.groups.index') + ->withPageTitle(trans_choice('dashboard.components.groups.groups', 2).' - '.trans('dashboard.dashboard')) + ->withGroups(ComponentGroup::orderBy('order')->get()) + ->withSubMenu($this->subMenu); + } + + /** + * Deletes a given component group. + * + * @param \CachetHQ\Cachet\Models\ComponentGroup $group + * + * @return \Illuminate\Http\RedirectResponse + */ + public function deleteComponentGroupAction(ComponentGroup $group) + { + execute(new RemoveComponentGroupCommand($group)); + + return cachet_redirect('dashboard.components.groups') + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success'))); + } + + /** + * Shows the add component group view. + * + * @return \Illuminate\View\View + */ + public function showAddComponentGroup() + { + return View::make('dashboard.components.groups.add') + ->withPageTitle(trans('dashboard.components.groups.add.title').' - '.trans('dashboard.dashboard')); + } + + /** + * Shows the edit component group view. + * + * @param \CachetHQ\Cachet\Models\ComponentGroup $group + * + * @return \Illuminate\View\View + */ + public function showEditComponentGroup(ComponentGroup $group) + { + return View::make('dashboard.components.groups.edit') + ->withPageTitle(trans('dashboard.components.groups.edit.title').' - '.trans('dashboard.dashboard')) + ->withGroup($group); + } + + /** + * Creates a new component. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function postAddComponentGroup() + { + try { + $group = execute(new CreateComponentGroupCommand( + Binput::get('name'), + Binput::get('order', 0), + Binput::get('collapsed'), + Binput::get('visible') + )); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.components.groups.create') + ->withInput(Binput::all()) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.add.failure'))) + ->withErrors($e->getMessageBag()); + } + + return cachet_redirect('dashboard.components.groups') + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.add.success'))); + } + + /** + * Updates a component group. + * + * @param \CachetHQ\Cachet\Models\ComponentGroup $group + * + * @return \Illuminate\Http\RedirectResponse + */ + public function updateComponentGroupAction(ComponentGroup $group) + { + try { + $group = execute(new UpdateComponentGroupCommand( + $group, + Binput::get('name'), + $group->order, + Binput::get('collapsed'), + Binput::get('visible') + )); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.components.groups.edit', [$group->id]) + ->withInput(Binput::all()) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure'))) + ->withErrors($e->getMessageBag()); + } + + return cachet_redirect('dashboard.components.groups.edit', [$group->id]) + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success'))); + } +} diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php index a0ee0df6a819..2d5281a19e85 100644 --- a/app/Http/Controllers/Dashboard/DashboardController.php +++ b/app/Http/Controllers/Dashboard/DashboardController.php @@ -48,7 +48,7 @@ class DashboardController extends Controller /** * The feed integration. * - * @var \CachetHQ\Cachet\Integrations\Feed + * @var \CachetHQ\Cachet\Integrations\Contracts\Feed */ protected $feed; @@ -62,8 +62,8 @@ class DashboardController extends Controller /** * Creates a new dashboard controller instance. * - * @param \CachetHQ\Cachet\Integrations\Feed $feed - * @param \Illuminate\Contracts\Auth\Guard $guard + * @param \CachetHQ\Cachet\Integrations\Contracts\Feed $feed + * @param \Illuminate\Contracts\Auth\Guard $guard * * @return void */ @@ -101,12 +101,14 @@ public function showDashboard() $welcomeUser = !Auth::user()->welcomed; if ($welcomeUser) { - dispatch(new WelcomeUserCommand(Auth::user())); + execute(new WelcomeUserCommand(Auth::user())); } $entries = null; - if ($feed = $this->feed->latest()) { - $entries = array_slice($feed->channel->item, 0, 5); + if ($feed = $this->feed->latest() !== 1) { + if (is_object($feed)) { + $entries = array_slice($feed->channel->item, 0, 5); + } } return View::make('dashboard.index') @@ -127,11 +129,11 @@ public function showDashboard() */ protected function getIncidents() { - $allIncidents = Incident::notScheduled()->whereBetween('created_at', [ + $allIncidents = Incident::whereBetween('occurred_at', [ $this->startDate->copy()->subDays(30)->format('Y-m-d').' 00:00:00', $this->startDate->format('Y-m-d').' 23:59:59', - ])->orderBy('created_at', 'desc')->get()->groupBy(function (Incident $incident) { - return (new Date($incident->created_at)) + ])->orderBy('occurred_at', 'desc')->get()->groupBy(function (Incident $incident) { + return (new Date($incident->occurred_at)) ->setTimezone($this->dateTimeZone)->toDateString(); }); diff --git a/app/Http/Controllers/Dashboard/IncidentController.php b/app/Http/Controllers/Dashboard/IncidentController.php index 3c3b44c9a2b4..f5555aa0bb9c 100644 --- a/app/Http/Controllers/Dashboard/IncidentController.php +++ b/app/Http/Controllers/Dashboard/IncidentController.php @@ -12,10 +12,10 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; +use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\RemoveIncidentCommand; -use CachetHQ\Cachet\Bus\Commands\Incident\ReportIncidentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand; -use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\ReportIncidentUpdateCommand; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Cachet\Models\Incident; @@ -46,6 +46,13 @@ class IncidentController extends Controller */ protected $auth; + /** + * The system instance. + * + * @var \CachetHQ\Cachet\Integrations\Contracts\System + */ + protected $system; + /** * Creates a new incident controller instance. * @@ -53,27 +60,12 @@ class IncidentController extends Controller * * @return void */ - public function __construct(Guard $auth) + public function __construct(Guard $auth, System $system) { $this->auth = $auth; + $this->system = $system; - $this->subMenu = [ - 'incidents' => [ - 'title' => trans('dashboard.incidents.incidents'), - 'url' => cachet_route('dashboard.incidents'), - 'icon' => 'ion-android-checkmark-circle', - 'active' => true, - ], - 'schedule' => [ - 'title' => trans('dashboard.schedule.schedule'), - 'url' => cachet_route('dashboard.schedule'), - 'icon' => 'ion-android-calendar', - 'active' => false, - ], - ]; - - View::share('sub_menu', $this->subMenu); - View::share('sub_title', trans('dashboard.incidents.title')); + View::share('subTitle', trans('dashboard.incidents.title')); } /** @@ -83,7 +75,7 @@ public function __construct(Guard $auth) */ public function showIncidents() { - $incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get(); + $incidents = Incident::with('user')->orderBy('created_at', 'desc')->get(); return View::make('dashboard.incidents.index') ->withPageTitle(trans('dashboard.incidents.incidents').' - '.trans('dashboard.dashboard')) @@ -101,6 +93,7 @@ public function showAddIncident() ->withPageTitle(trans('dashboard.incidents.add.title').' - '.trans('dashboard.dashboard')) ->withComponentsInGroups(ComponentGroup::with('components')->get()) ->withComponentsOutGroups(Component::where('group_id', '=', 0)->get()) + ->withNotificationsEnabled($this->system->canNotifySubscribers()) ->withIncidentTemplates(IncidentTemplate::all()); } @@ -124,18 +117,19 @@ public function showTemplates() public function createIncidentAction() { try { - $incident = dispatch(new ReportIncidentCommand( + $incident = execute(new CreateIncidentCommand( Binput::get('name'), Binput::get('status'), - Binput::get('message'), + Binput::get('message', null, false, false), Binput::get('visible', true), Binput::get('component_id'), Binput::get('component_status'), Binput::get('notify', false), Binput::get('stickied', false), - Binput::get('created_at'), + Binput::get('occurred_at'), null, - [] + [], + ['seo' => Binput::get('seo', [])] )); } catch (ValidationException $e) { return cachet_redirect('dashboard.incidents.create') @@ -196,7 +190,10 @@ public function deleteTemplateAction(IncidentTemplate $template) public function createIncidentTemplateAction() { try { - IncidentTemplate::create(Binput::get('template')); + IncidentTemplate::create([ + 'name' => Binput::get('name'), + 'template' => Binput::get('template', null, false, false), + ]); } catch (ValidationException $e) { return cachet_redirect('dashboard.templates.create') ->withInput(Binput::all()) @@ -217,7 +214,7 @@ public function createIncidentTemplateAction() */ public function deleteIncidentAction(Incident $incident) { - dispatch(new RemoveIncidentCommand($incident)); + execute(new RemoveIncidentCommand($incident)); return cachet_redirect('dashboard.incidents') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.delete.success'))); @@ -236,7 +233,8 @@ public function showEditIncidentAction(Incident $incident) ->withPageTitle(trans('dashboard.incidents.edit.title').' - '.trans('dashboard.dashboard')) ->withIncident($incident) ->withComponentsInGroups(ComponentGroup::with('components')->get()) - ->withComponentsOutGroups(Component::where('group_id', '=', 0)->get()); + ->withComponentsOutGroups(Component::where('group_id', '=', 0)->get()) + ->withNotificationsEnabled($this->system->canNotifySubscribers()); } /** @@ -249,7 +247,7 @@ public function showEditIncidentAction(Incident $incident) public function editIncidentAction(Incident $incident) { try { - $incident = dispatch(new UpdateIncidentCommand( + $incident = execute(new UpdateIncidentCommand( $incident, Binput::get('name'), Binput::get('status'), @@ -259,9 +257,10 @@ public function editIncidentAction(Incident $incident) Binput::get('component_status'), Binput::get('notify', true), Binput::get('stickied', false), - Binput::get('created_at'), + Binput::get('occurred_at'), null, - [] + [], + ['seo' => Binput::get('seo', [])] )); } catch (ValidationException $e) { return cachet_redirect('dashboard.incidents.edit', ['id' => $incident->id]) @@ -298,43 +297,4 @@ public function editTemplateAction(IncidentTemplate $template) return cachet_redirect('dashboard.templates.edit', ['id' => $template->id]) ->withUpdatedTemplate($template); } - - /** - * Shows the incident update form. - * - * @param \CachetHQ\Cachet\Models\Incident $incident - * - * @return \Illuminate\View\View - */ - public function showIncidentUpdateAction(Incident $incident) - { - return View::make('dashboard.incidents.update')->withIncident($incident); - } - - /** - * Creates a new incident update. - * - * @param \CachetHQ\Cachet\Models\Incident $incident - * - * @return \Illuminate\Http\RedirectResponse - */ - public function createIncidentUpdateAction(Incident $incident) - { - try { - $incident = dispatch(new ReportIncidentUpdateCommand( - $incident, - Binput::get('status'), - Binput::get('message'), - $this->auth->user() - )); - } catch (ValidationException $e) { - return cachet_redirect('dashboard.incidents.update', ['id' => $incident->id]) - ->withInput(Binput::all()) - ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.edit.failure'))) - ->withErrors($e->getMessageBag()); - } - - return cachet_redirect('dashboard.incidents') - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.delete.success'))); - } } diff --git a/app/Http/Controllers/Dashboard/IncidentTemplateController.php b/app/Http/Controllers/Dashboard/IncidentTemplateController.php new file mode 100644 index 000000000000..853b5b2baec1 --- /dev/null +++ b/app/Http/Controllers/Dashboard/IncidentTemplateController.php @@ -0,0 +1,161 @@ + + */ +class IncidentTemplateController extends Controller +{ + /** + * Stores the sub-sidebar tree list. + * + * @var array + */ + protected $subMenu = []; + + /** + * The guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * The system instance. + * + * @var \CachetHQ\Cachet\Integrations\Contracts\System + */ + protected $system; + + /** + * Creates a new incident controller instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth, System $system) + { + $this->auth = $auth; + $this->system = $system; + + View::share('sub_title', trans('dashboard.incidents.title')); + } + + /** + * Shows the incident templates. + * + * @return \Illuminate\View\View + */ + public function showTemplates() + { + return View::make('dashboard.templates.index') + ->withPageTitle(trans('dashboard.incidents.templates.title').' - '.trans('dashboard.dashboard')) + ->withIncidentTemplates(IncidentTemplate::all()); + } + + /** + * Shows the add incident template view. + * + * @return \Illuminate\View\View + */ + public function showAddIncidentTemplate() + { + return View::make('dashboard.templates.add') + ->withPageTitle(trans('dashboard.incidents.templates.add.title').' - '.trans('dashboard.dashboard')); + } + + /** + * Shows the edit incident template view. + * + * @param \CachetHQ\Cachet\Models\IncidentTemplate $template + * + * @return \Illuminate\View\View + */ + public function showEditTemplateAction(IncidentTemplate $template) + { + return View::make('dashboard.templates.edit') + ->withPageTitle(trans('dashboard.incidents.templates.edit.title').' - '.trans('dashboard.dashboard')) + ->withTemplate($template); + } + + /** + * Deletes an incident template. + * + * @param \CachetHQ\Cachet\Models\IncidentTemplate $template + * + * @return \Illuminate\Http\RedirectResponse + */ + public function deleteTemplateAction(IncidentTemplate $template) + { + $template->delete(); + + return cachet_redirect('dashboard.templates') + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.templates.delete.success'))); + } + + /** + * Creates a new incident template. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function createIncidentTemplateAction() + { + try { + IncidentTemplate::create([ + 'name' => Binput::get('name'), + 'template' => Binput::get('template', null, false, false), + ]); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.templates.create') + ->withInput(Binput::all()) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.add.failure'))) + ->withErrors($e->getMessageBag()); + } + + return cachet_redirect('dashboard.templates') + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.templates.add.success'))); + } + + /** + * Edit an incident template. + * + * @param \CachetHQ\Cachet\Models\IncidentTemplate $template + * + * @return \Illuminate\Http\RedirectResponse + */ + public function editTemplateAction(IncidentTemplate $template) + { + try { + $template->update(Binput::get('template')); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.templates.edit', ['id' => $template->id]) + ->withUpdatedTemplate($template) + ->withTemplateErrors($e->getMessageBag()->getErrors()); + } + + return cachet_redirect('dashboard.templates.edit', ['id' => $template->id]) + ->withUpdatedTemplate($template); + } +} diff --git a/app/Http/Controllers/Dashboard/IncidentUpdateController.php b/app/Http/Controllers/Dashboard/IncidentUpdateController.php new file mode 100644 index 000000000000..092809e374dc --- /dev/null +++ b/app/Http/Controllers/Dashboard/IncidentUpdateController.php @@ -0,0 +1,172 @@ + + */ +class IncidentUpdateController extends Controller +{ + /** + * Stores the sub-sidebar tree list. + * + * @var array + */ + protected $subMenu = []; + + /** + * The guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * The system instance. + * + * @var \CachetHQ\Cachet\Integrations\Contracts\System + */ + protected $system; + + /** + * Creates a new incident controller instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth, System $system) + { + $this->auth = $auth; + $this->system = $system; + + View::share('sub_title', trans('dashboard.incidents.title')); + } + + /** + * Shows the incident update form. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * + * @return \Illuminate\View\View + */ + public function showIncidentUpdates(Incident $incident) + { + return View::make('dashboard.incidents.updates.index')->withIncident($incident); + } + + /** + * Shows the incident update form. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * + * @return \Illuminate\View\View + */ + public function showCreateIncidentUpdateAction(Incident $incident) + { + return View::make('dashboard.incidents.updates.add') + ->withIncident($incident) + ->withIncidentTemplates(IncidentTemplate::all()) + ->withNotificationsEnabled($this->system->canNotifySubscribers()); + } + + /** + * Creates a new incident update. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * + * @return \Illuminate\Http\RedirectResponse + */ + public function createIncidentUpdateAction(Incident $incident) + { + try { + $incidentUpdate = execute(new CreateIncidentUpdateCommand( + $incident, + Binput::get('status'), + Binput::get('message'), + Binput::get('component_id'), + Binput::get('component_status'), + $this->auth->user() + )); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.incidents.updates.create', ['id' => $incident->id]) + ->withInput(Binput::all()) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.updates.add.failure'))) + ->withErrors($e->getMessageBag()); + } + + if ($incident->component) { + $incident->component->update(['status' => Binput::get('component_status')]); + } + + return cachet_redirect('dashboard.incidents') + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.updates.success'))); + } + + /** + * Shows the edit incident view. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * @param \CachetHQ\Cachet\Models\IncidentUpdate $incidentUpdate + * + * @return \Illuminate\View\View + */ + public function showEditIncidentUpdateAction(Incident $incident, IncidentUpdate $incidentUpdate) + { + return View::make('dashboard.incidents.updates.edit') + ->withIncident($incident) + ->withUpdate($incidentUpdate) + ->withNotificationsEnabled($this->system->canNotifySubscribers()); + } + + /** + * Edit an incident update. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * @param \CachetHQ\Cachet\Models\IncidentUpdate $incidentUpdate + * + * @return \Illuminate\Http\RedirectResponse + */ + public function editIncidentUpdateAction(Incident $incident, IncidentUpdate $incidentUpdate) + { + try { + $incidentUpdate = execute(new UpdateIncidentUpdateCommand( + $incidentUpdate, + Binput::get('status'), + Binput::get('message'), + $this->auth->user() + )); + } catch (ValidationException $e) { + return cachet_redirect('dashboard.incidents.updates.edit', ['incident' => $incident->id, 'incident_update' => $incidentUpdate->id]) + ->withInput(Binput::all()) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.updates.edit.failure'))) + ->withErrors($e->getMessageBag()); + } + + return cachet_redirect('dashboard.incidents.updates', ['incident' => $incident->id]) + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.updates.edit.success'))); + } +} diff --git a/app/Http/Controllers/Dashboard/MetricController.php b/app/Http/Controllers/Dashboard/MetricController.php index a451ed444a24..1a0b601c7458 100644 --- a/app/Http/Controllers/Dashboard/MetricController.php +++ b/app/Http/Controllers/Dashboard/MetricController.php @@ -12,7 +12,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricCommand; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricCommand; use CachetHQ\Cachet\Bus\Commands\Metric\RemoveMetricCommand; use CachetHQ\Cachet\Bus\Commands\Metric\UpdateMetricCommand; use CachetHQ\Cachet\Models\Metric; @@ -70,7 +70,7 @@ public function createMetricAction() $metricData = Binput::get('metric'); try { - dispatch(new AddMetricCommand( + execute(new CreateMetricCommand( $metricData['name'], $metricData['suffix'], $metricData['description'], @@ -79,7 +79,9 @@ public function createMetricAction() $metricData['display_chart'], $metricData['places'], $metricData['default_view'], - $metricData['threshold'] + $metricData['threshold'], + 0, // Default order + $metricData['visible'] )); } catch (ValidationException $e) { return cachet_redirect('dashboard.metrics.create') @@ -112,7 +114,7 @@ public function showAddMetricPoint() */ public function deleteMetricAction(Metric $metric) { - dispatch(new RemoveMetricCommand($metric)); + execute(new RemoveMetricCommand($metric)); return cachet_redirect('dashboard.metrics') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.metrics.delete.success'))); @@ -142,7 +144,7 @@ public function showEditMetricAction(Metric $metric) public function editMetricAction(Metric $metric) { try { - dispatch(new UpdateMetricCommand( + execute(new UpdateMetricCommand( $metric, Binput::get('name', null, false), Binput::get('suffix', null, false), @@ -152,7 +154,9 @@ public function editMetricAction(Metric $metric) Binput::get('display_chart', null, false), Binput::get('places', null, false), Binput::get('default_view', null, false), - Binput::get('threshold', null, false) + Binput::get('threshold', null, false), + null, + Binput::get('visible', null, false) )); } catch (ValidationException $e) { return cachet_redirect('dashboard.metrics.edit', [$metric->id]) diff --git a/app/Http/Controllers/Dashboard/ScheduleController.php b/app/Http/Controllers/Dashboard/ScheduleController.php index d65bca169578..c06216a916f6 100644 --- a/app/Http/Controllers/Dashboard/ScheduleController.php +++ b/app/Http/Controllers/Dashboard/ScheduleController.php @@ -12,16 +12,21 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; -use CachetHQ\Cachet\Bus\Commands\Incident\ReportMaintenanceCommand; -use CachetHQ\Cachet\Dates\DateFactory; -use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Bus\Commands\Schedule\CreateScheduleCommand; +use CachetHQ\Cachet\Bus\Commands\Schedule\DeleteScheduleCommand; +use CachetHQ\Cachet\Bus\Commands\Schedule\UpdateScheduleCommand; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\IncidentTemplate; +use CachetHQ\Cachet\Models\Schedule; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\View; -use Illuminate\Support\MessageBag; -use Jenssegers\Date\Date; +/** + * This is the schedule controller class. + * + * @author James Brooks + */ class ScheduleController extends Controller { /** @@ -31,30 +36,22 @@ class ScheduleController extends Controller */ protected $subMenu = []; + /** + * The system instance. + * + * @var \CachetHQ\Cachet\Integrations\Contracts\System + */ + protected $system; + /** * Creates a new schedule controller instance. * * @return void */ - public function __construct() + public function __construct(System $system) { - $this->subMenu = [ - 'incidents' => [ - 'title' => trans('dashboard.incidents.incidents'), - 'url' => cachet_route('dashboard.incidents'), - 'icon' => 'ion-android-checkmark-circle', - 'active' => false, - ], - 'schedule' => [ - 'title' => trans('dashboard.schedule.schedule'), - 'url' => cachet_route('dashboard.schedule'), - 'icon' => 'ion-android-calendar', - 'active' => true, - ], - ]; - - View::share('sub_menu', $this->subMenu); - View::share('sub_title', trans('dashboard.incidents.title')); + $this->system = $system; + View::share('subTitle', trans('dashboard.schedule.title')); } /** @@ -64,9 +61,9 @@ public function __construct() */ public function showIndex() { - $schedule = Incident::scheduled()->orderBy('created_at')->get(); + $schedule = Schedule::orderBy('created_at')->get(); - return View::make('dashboard.schedule.index') + return View::make('dashboard.maintenance.index') ->withPageTitle(trans('dashboard.schedule.schedule').' - '.trans('dashboard.dashboard')) ->withSchedule($schedule); } @@ -80,29 +77,33 @@ public function showAddSchedule() { $incidentTemplates = IncidentTemplate::all(); - return View::make('dashboard.schedule.add') + return View::make('dashboard.maintenance.add') ->withPageTitle(trans('dashboard.schedule.add.title').' - '.trans('dashboard.dashboard')) - ->withIncidentTemplates($incidentTemplates); + ->withIncidentTemplates($incidentTemplates) + ->withNotificationsEnabled($this->system->canNotifySubscribers()); } /** - * Creates a new scheduled maintenance "incident". + * Creates a new scheduled maintenance. * * @return \Illuminate\Http\RedirectResponse */ public function addScheduleAction() { try { - $incident = dispatch(new ReportMaintenanceCommand( + execute(new CreateScheduleCommand( Binput::get('name'), - Binput::get('message'), - Binput::get('notify'), - Binput::get('scheduled_at') + Binput::get('message', null, false, false), + Binput::get('status', Schedule::UPCOMING), + Binput::get('scheduled_at'), + Binput::get('completed_at'), + Binput::get('components', []), + Binput::get('notify', false) )); } catch (ValidationException $e) { return cachet_redirect('dashboard.schedule.create') ->withInput(Binput::all()) - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.schedule.add.failure'))) + ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.schedule.edit.failure'))) ->withErrors($e->getMessageBag()); } @@ -113,15 +114,15 @@ public function addScheduleAction() /** * Shows the edit schedule maintenance form. * - * @param \CachetHQ\Cachet\Models\Incident $schedule + * @param \CachetHQ\Cachet\Models\Schedule $schedule * * @return \Illuminate\View\View */ - public function showEditSchedule(Incident $schedule) + public function showEditSchedule(Schedule $schedule) { $incidentTemplates = IncidentTemplate::all(); - return View::make('dashboard.schedule.edit') + return View::make('dashboard.maintenance.edit') ->withPageTitle(trans('dashboard.schedule.edit.title').' - '.trans('dashboard.dashboard')) ->withIncidentTemplates($incidentTemplates) ->withSchedule($schedule); @@ -130,30 +131,22 @@ public function showEditSchedule(Incident $schedule) /** * Updates the given incident. * - * @param \CachetHQ\Cachet\Models\Incident $schedule + * @param \CachetHQ\Cachet\Models\Schedule $schedule * * @return \Illuminate\Http\RedirectResponse */ - public function editScheduleAction(Incident $schedule) + public function editScheduleAction(Schedule $schedule) { - $scheduleData = Binput::get('incident'); - - // Parse the schedule date. - $scheduledAt = app(DateFactory::class)->create('d/m/Y H:i', $scheduleData['scheduled_at']); - - if ($scheduledAt->isPast()) { - $messageBag = new MessageBag(); - $messageBag->add('scheduled_at', trans('validation.date', ['attribute' => 'scheduled time you supplied'])); - - return cachet_redirect('dashboard.schedule.edit', [$schedule->id])->withErrors($messageBag); - } - - $scheduleData['scheduled_at'] = $scheduledAt; - // Bypass the incident.status field. - $scheduleData['status'] = 0; - try { - $schedule->update($scheduleData); + $schedule = execute(new UpdateScheduleCommand( + $schedule, + Binput::get('name', null), + Binput::get('message', null), + Binput::get('status', null), + Binput::get('scheduled_at', null), + Binput::get('completed_at', null), + Binput::get('components', []) + )); } catch (ValidationException $e) { return cachet_redirect('dashboard.schedule.edit', [$schedule->id]) ->withInput(Binput::all()) @@ -168,13 +161,13 @@ public function editScheduleAction(Incident $schedule) /** * Deletes a given schedule. * - * @param \CachetHQ\Cachet\Models\Incident $schedule + * @param \CachetHQ\Cachet\Models\Schedule $schedule * * @return \Illuminate\Http\RedirectResponse */ - public function deleteScheduleAction(Incident $schedule) + public function deleteScheduleAction(Schedule $schedule) { - $schedule->delete(); + execute(new DeleteScheduleCommand($schedule)); return cachet_redirect('dashboard.schedule') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.schedule.delete.success'))); diff --git a/app/Http/Controllers/Dashboard/SettingsController.php b/app/Http/Controllers/Dashboard/SettingsController.php index 999a377ac585..f128e22711e1 100644 --- a/app/Http/Controllers/Dashboard/SettingsController.php +++ b/app/Http/Controllers/Dashboard/SettingsController.php @@ -11,12 +11,16 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; +use CachetHQ\Cachet\Bus\Commands\System\Config\UpdateConfigCommand; use CachetHQ\Cachet\Integrations\Contracts\Credits; use CachetHQ\Cachet\Models\User; +use CachetHQ\Cachet\Notifications\System\SystemTestNotification; use CachetHQ\Cachet\Settings\Repository; use Exception; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; +use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Lang; use Illuminate\Support\Facades\Log; @@ -24,6 +28,7 @@ use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\View; use Illuminate\Support\Str; +use Monolog\Handler\SyslogHandler; class SettingsController extends Controller { @@ -96,6 +101,12 @@ public function __construct() 'icon' => 'ion-ios-list', 'active' => false, ], + 'mail' => [ + 'title' => trans('dashboard.settings.mail.mail'), + 'url' => cachet_route('dashboard.settings.mail'), + 'icon' => 'ion-paper-airplane', + 'active' => false, + ], 'about' => [ 'title' => CACHET_VERSION, 'url' => 'javascript: void(0);', @@ -105,8 +116,8 @@ public function __construct() ]; View::share([ - 'sub_title' => trans('dashboard.settings.settings'), - 'sub_menu' => $this->subMenu, + 'subTitle' => trans('dashboard.settings.settings'), + 'subMenu' => $this->subMenu, ]); } @@ -259,13 +270,62 @@ public function showLogView() { $this->subMenu['log']['active'] = true; - $log = Log::getMonolog(); + $log = Log::getLogger(); - $logContents = file_get_contents($log->getHandlers()[0]->getUrl()); + $logContents = ''; + + collect($log->getHandlers())->reject(function ($handler) { + return $handler instanceof SyslogHandler; + })->each(function ($handler) use (&$logContents, $log) { + if (file_exists($path = $log->getHandlers()[0]->getUrl())) { + $logContents = file_get_contents($path); + } + }); return View::make('dashboard.settings.log')->withLog($logContents)->withSubMenu($this->subMenu); } + /** + * Show the mail settings view. + * + * @return \Illuminate\View\View + */ + public function showMailView() + { + $this->subMenu['mail']['active'] = true; + + return View::make('dashboard.settings.mail')->withConfig(Config::get('mail')); + } + + /** + * Test the mail config. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function testMail() + { + Auth::user()->notify(new SystemTestNotification()); + + return cachet_redirect('dashboard.settings.mail') + ->withSuccess(trans('dashboard.notifications.awesome')); + } + + /** + * Handle updating of the settings. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function postMail() + { + $config = Binput::get('config'); + + execute(new UpdateConfigCommand($config)); + + return cachet_redirect('dashboard.settings.mail') + ->withInput(Binput::all()) + ->withSuccess(trans('dashboard.notifications.awesome')); + } + /** * Updates the status page settings. * @@ -297,6 +357,14 @@ public function postSettings() } } + if (isset($parameters['stylesheet'])) { + if ($stylesheet = Binput::get('stylesheet', null, false, false)) { + $setting->set('stylesheet', $stylesheet); + } else { + $setting->delete('stylesheet'); + } + } + if (Binput::hasFile('app_banner')) { $this->handleUpdateBanner($setting); } @@ -307,6 +375,7 @@ public function postSettings() 'remove_banner', 'header', 'footer', + 'stylesheet', ]; try { @@ -325,6 +394,10 @@ public function postSettings() Lang::setLocale(Binput::get('app_locale')); } + if (Binput::has('always_authenticate')) { + Artisan::call('route:clear'); + } + return Redirect::back()->withSuccess(trans('dashboard.settings.edit.success')); } @@ -338,6 +411,7 @@ public function postSettings() protected function handleUpdateBanner(Repository $setting) { $file = Binput::file('app_banner'); + $redirectUrl = $this->subMenu['theme']['url']; // Image Validation. // Image size in bytes. diff --git a/app/Http/Controllers/Dashboard/SubscriberController.php b/app/Http/Controllers/Dashboard/SubscriberController.php index e97499969735..17de83eb4a2d 100644 --- a/app/Http/Controllers/Dashboard/SubscriberController.php +++ b/app/Http/Controllers/Dashboard/SubscriberController.php @@ -31,7 +31,7 @@ public function showSubscribers() { return View::make('dashboard.subscribers.index') ->withPageTitle(trans('dashboard.subscribers.subscribers').' - '.trans('dashboard.dashboard')) - ->withSubscribers(Subscriber::all()); + ->withSubscribers(Subscriber::with('subscriptions.component')->get()); } /** @@ -58,7 +58,7 @@ public function createSubscriberAction() $subscribers = preg_split("/\r\n|\n|\r/", Binput::get('email')); foreach ($subscribers as $subscriber) { - dispatch(new SubscribeSubscriberCommand($subscriber, $verified)); + execute(new SubscribeSubscriberCommand($subscriber, $verified)); } } catch (ValidationException $e) { return cachet_redirect('dashboard.subscribers.create') @@ -82,7 +82,7 @@ public function createSubscriberAction() */ public function deleteSubscriberAction(Subscriber $subscriber) { - dispatch(new UnsubscribeSubscriberCommand($subscriber)); + execute(new UnsubscribeSubscriberCommand($subscriber)); return cachet_redirect('dashboard.subscribers'); } diff --git a/app/Http/Controllers/Dashboard/TeamController.php b/app/Http/Controllers/Dashboard/TeamController.php index 152f097107ec..b762161907f8 100644 --- a/app/Http/Controllers/Dashboard/TeamController.php +++ b/app/Http/Controllers/Dashboard/TeamController.php @@ -12,7 +12,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; -use CachetHQ\Cachet\Bus\Commands\User\AddUserCommand; +use CachetHQ\Cachet\Bus\Commands\User\CreateUserCommand; use CachetHQ\Cachet\Bus\Commands\User\InviteUserCommand; use CachetHQ\Cachet\Bus\Commands\User\RemoveUserCommand; use CachetHQ\Cachet\Models\User; @@ -80,7 +80,7 @@ public function showInviteTeamMemberView() public function postAddUser() { try { - dispatch(new AddUserCommand( + execute(new CreateUserCommand( Binput::get('username'), Binput::get('password'), Binput::get('email'), @@ -129,7 +129,7 @@ public function postUpdateUser(User $user) public function postInviteUser() { try { - dispatch(new InviteUserCommand( + execute(new InviteUserCommand( array_unique(array_filter((array) Binput::get('emails'))) )); } catch (ValidationException $e) { @@ -152,7 +152,7 @@ public function postInviteUser() */ public function deleteUser(User $user) { - dispatch(new RemoveUserCommand($user)); + execute(new RemoveUserCommand($user)); return cachet_redirect('dashboard.team') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.team.delete.success'))); diff --git a/app/Http/Controllers/Dashboard/UserController.php b/app/Http/Controllers/Dashboard/UserController.php index f9112b1e980d..ba01e862b6d3 100644 --- a/app/Http/Controllers/Dashboard/UserController.php +++ b/app/Http/Controllers/Dashboard/UserController.php @@ -18,9 +18,10 @@ use CachetHQ\Cachet\Models\User; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; +use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\View; -use PragmaRX\Google2FA\Vendor\Laravel\Facade as Google2FA; +use PragmaRX\Google2FA\Google2FA; class UserController extends Controller { @@ -38,18 +39,22 @@ public function showUser() /** * Updates the current user. * + * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException + * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException + * * @return \Illuminate\View\View */ public function postUser() { $userData = array_filter(Binput::only(['username', 'email', 'password', 'google2fa'])); - $enable2FA = (bool) array_pull($userData, 'google2fa'); + $enable2FA = (bool) Arr::pull($userData, 'google2fa'); // Let's enable/disable auth if ($enable2FA && !Auth::user()->hasTwoFactor) { event(new UserEnabledTwoAuthEvent(Auth::user())); - $userData['google_2fa_secret'] = Google2FA::generateSecretKey(); + $google2fa = new Google2FA(); + $userData['google_2fa_secret'] = $google2fa->generateSecretKey(); } elseif (!$enable2FA) { event(new UserDisabledTwoAuthEvent(Auth::user())); $userData['google_2fa_secret'] = ''; diff --git a/app/Http/Controllers/FeedController.php b/app/Http/Controllers/FeedController.php deleted file mode 100644 index 3d1c6ca2649b..000000000000 --- a/app/Http/Controllers/FeedController.php +++ /dev/null @@ -1,112 +0,0 @@ -feed = app('feed'); - $this->feed->title = Config::get('setting.app_name'); - $this->feed->description = trans('cachet.feed'); - $this->feed->link = Str::canonicalize(Config::get('setting.app_domain')); - $this->feed->ctype = 'text/xml'; - $this->feed->setDateFormat('datetime'); - } - - /** - * Generates an Atom feed of all incidents. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group - * - * @return \Illuminate\Http\Response - */ - public function atomAction(ComponentGroup $group = null) - { - return $this->feedAction($group, false); - } - - /** - * Generates a Rss feed of all incidents. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group - * - * @return \Illuminate\Http\Response - */ - public function rssAction(ComponentGroup $group = null) - { - $this->feed->lang = Config::get('setting.app_locale'); - - return $this->feedAction($group, true); - } - - /** - * Generates a Rss feed of all incidents. - * - * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group - * @param bool $isRss - * - * @return \Illuminate\Http\Response - */ - private function feedAction(ComponentGroup &$group, $isRss) - { - if ($group->exists) { - $group->components->map(function ($component) use ($isRss) { - $component->incidents()->visible()->orderBy('created_at', 'desc')->get()->map(function ($incident) use ($isRss) { - $this->feedAddItem($incident, $isRss); - }); - }); - } else { - Incident::visible()->orderBy('created_at', 'desc')->get()->map(function ($incident) use ($isRss) { - $this->feedAddItem($incident, $isRss); - }); - } - - return $this->feed->render($isRss ? 'rss' : 'atom'); - } - - /** - * Adds an item to the feed. - * - * @param \CachetHQ\Cachet\Models\Incident $incident - * @param bool $isRss - */ - private function feedAddItem(Incident $incident, $isRss) - { - $this->feed->add( - $incident->name, - Config::get('setting.app_name'), - Str::canonicalize(cachet_route('incident', [$incident->id])), - $isRss ? $incident->created_at->toRssString() : $incident->created_at->toAtomString(), - $isRss ? $incident->message : Markdown::convertToHtml($incident->message) - ); - } -} diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 4bd69f552abe..52bf51f7a3bd 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -11,12 +11,12 @@ namespace CachetHQ\Cachet\Http\Controllers; +use CachetHQ\Cachet\Bus\Commands\System\Config\UpdateConfigCommand; use CachetHQ\Cachet\Models\User; use CachetHQ\Cachet\Settings\Repository; -use Dotenv\Dotenv; -use Dotenv\Exception\InvalidPathException; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; +use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Request; @@ -53,12 +53,12 @@ class SetupController extends Controller * @var string[] */ protected $mailDrivers = [ - 'smtp' => 'SMTP', - 'mail' => 'Mail', - 'sendmail' => 'Sendmail', - 'mailgun' => 'Mailgun', - 'mandrill' => 'Mandrill', - // 'ses' => 'Amazon SES', this will be available only if aws/aws-sdk-php is installed + 'smtp' => 'SMTP', + 'mail' => 'Mail', + 'sendmail' => 'Sendmail', + 'mailgun' => 'Mailgun', + 'mandrill' => 'Mandrill', + 'ses' => 'Amazon SES', 'sparkpost' => 'SparkPost', 'log' => 'Log (Testing)', ]; @@ -134,18 +134,21 @@ public function __construct() */ public function getIndex() { - $supportedLanguages = Request::getLanguages(); + $requestedLanguages = Request::getLanguages(); $userLanguage = Config::get('app.locale'); + $langs = Config::get('langs'); - foreach ($supportedLanguages as $language) { + foreach ($requestedLanguages as $language) { $language = str_replace('_', '-', $language); - if (isset($this->langs[$language])) { + if (isset($langs[$language])) { $userLanguage = $language; break; } } + app('translator')->setLocale($userLanguage); + // Since .env may already be configured, we should show that data! $cacheConfig = [ 'driver' => Config::get('cache.default'), @@ -195,8 +198,12 @@ public function postStep1() return $input->env['mail_driver'] === 'smtp'; }); - $v->sometimes(['env.mail_address', 'env.mail_username', 'env.mail_password'], 'required', function ($input) { - return $input->env['mail_driver'] !== 'log'; + $v->sometimes(['env.mail_address', 'env.mail_password'], 'required', function ($input) { + return !in_array($input->env['mail_driver'], ['log', 'smtp']); + }); + + $v->sometimes(['env.mail_username'], 'required', function ($input) { + return !in_array($input->env['mail_driver'], ['sendmail', 'log']); }); if ($v->passes()) { @@ -237,7 +244,7 @@ public function postStep3() if ($v->passes()) { // Pull the user details out. - $userDetails = array_pull($postData, 'user'); + $userDetails = Arr::pull($postData, 'user'); $user = User::create([ 'username' => $userDetails['username'], @@ -250,18 +257,16 @@ public function postStep3() $setting = app(Repository::class); - $settings = array_pull($postData, 'settings'); + $settings = Arr::pull($postData, 'settings'); foreach ($settings as $settingName => $settingValue) { $setting->set($settingName, $settingValue); } - $envData = array_pull($postData, 'env'); + $envData = Arr::pull($postData, 'env'); // Write the env to the .env file. - foreach ($envData as $envKey => $envValue) { - $this->writeEnv($envKey, $envValue); - } + execute(new UpdateConfigCommand($envData)); if (Request::ajax()) { return Response::json(['status' => 1]); @@ -276,34 +281,4 @@ public function postStep3() return cachet_redirect('setup')->withInput()->withErrors($v->getMessageBag()); } - - /** - * Writes to the .env file with given parameters. - * - * @param string $key - * @param mixed $value - * - * @return void - */ - protected function writeEnv($key, $value) - { - $dir = app()->environmentPath(); - $file = app()->environmentFile(); - $path = "{$dir}/{$file}"; - - try { - (new Dotenv($dir, $file))->load(); - - $envKey = strtoupper($key); - $envValue = env($envKey) ?: 'null'; - - file_put_contents($path, str_replace( - $envKey.'='.$envValue, - $envKey.'='.$value, - file_get_contents($path) - )); - } catch (InvalidPathException $e) { - // - } - } } diff --git a/app/Http/Controllers/SignupController.php b/app/Http/Controllers/SignupController.php index a506c59fbfff..6c7db1522d49 100644 --- a/app/Http/Controllers/SignupController.php +++ b/app/Http/Controllers/SignupController.php @@ -69,7 +69,7 @@ public function postSignup($code = null) } try { - dispatch(new SignupUserCommand( + execute(new SignupUserCommand( Binput::get('username'), Binput::get('password'), Binput::get('email'), @@ -82,7 +82,7 @@ public function postSignup($code = null) ->withErrors($e->getMessageBag()); } - dispatch(new ClaimInviteCommand($invite)); + execute(new ClaimInviteCommand($invite)); return cachet_redirect('status-page') ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.signup.success'))); diff --git a/app/Http/Controllers/StatusPageController.php b/app/Http/Controllers/StatusPageController.php index 3c8feffe69df..12766de5af0b 100644 --- a/app/Http/Controllers/StatusPageController.php +++ b/app/Http/Controllers/StatusPageController.php @@ -11,14 +11,14 @@ namespace CachetHQ\Cachet\Http\Controllers; -use AltThree\Badger\Facades\Badger; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Badger\Facades\Badger; use CachetHQ\Cachet\Http\Controllers\Api\AbstractApiController; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\Schedule; use CachetHQ\Cachet\Repositories\Metric\MetricRepository; -use Exception; +use CachetHQ\Cachet\Services\Dates\DateFactory; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Auth; @@ -28,25 +28,15 @@ use Jenssegers\Date\Date; use McCool\LaravelAutoPresenter\Facades\AutoPresenter; +/** + * This is the status page controller class. + * + * @author James Brooks + * @author Graham Campbell + * @author Joseph Cohen + */ class StatusPageController extends AbstractApiController { - /** - * @var \CachetHQ\Cachet\Repositories\Metric\MetricRepository - */ - protected $metricRepository; - - /** - * Construct a new status page controller instance. - * - * @param \CachetHQ\Cachet\Repositories\Metric\MetricRepository $metricRepository - * - * @return void - */ - public function __construct(MetricRepository $metricRepository) - { - $this->metricRepository = $metricRepository; - } - /** * Displays the status page. * @@ -54,44 +44,71 @@ public function __construct(MetricRepository $metricRepository) */ public function showIndex() { - $today = Date::now(); - $startDate = Date::now(); - - // Check if we have another starting date - if (Binput::has('start_date')) { - try { - // If date provided is valid - $oldDate = Date::createFromFormat('Y-m-d', Binput::get('start_date')); - - // If trying to get a future date fallback to today - if ($today->gt($oldDate)) { - $startDate = $oldDate; - } - } catch (Exception $e) { - // Fallback to today + $onlyDisruptedDays = Config::get('setting.only_disrupted_days'); + $appIncidentDays = (int) Config::get('setting.app_incident_days', 1); + + $startDate = Date::createFromFormat('Y-m-d', Binput::get('start_date', Date::now()->toDateString())); + $endDate = $startDate->copy()->subDays($appIncidentDays); + + $canPageForward = false; + $canPageBackward = false; + $previousDate = null; + $nextDate = null; + + if ($onlyDisruptedDays) { + // In this case, start_date GET parameter means the page + $page = (int) Binput::get('start_date', 0); + + $allIncidentDays = Incident::where('visible', '>=', (int) !Auth::check()) + ->select('occurred_at') + ->whereBetween('occurred_at', [ + $endDate->format('Y-m-d').' 00:00:00', + $startDate->format('Y-m-d').' 23:59:59', + ]) + ->distinct() + ->orderBy('occurred_at', 'desc') + ->get() + ->map(function (Incident $incident) { + return app(DateFactory::class)->make($incident->occurred_at)->toDateString(); + })->unique() + ->values(); + + $numIncidentDays = count($allIncidentDays); + $numPages = round($numIncidentDays / max($appIncidentDays, 1)); + + $selectedDays = $allIncidentDays->slice($page * $appIncidentDays, $appIncidentDays)->all(); + + if (count($selectedDays) > 0) { + $startDate = Date::createFromFormat('Y-m-d', array_values($selectedDays)[0]); + $endDate = Date::createFromFormat('Y-m-d', array_values(array_slice($selectedDays, -1))[0]); } - } - $daysToShow = Config::get('setting.app_incident_days', 0) - 1; - if ($daysToShow < 0) { - $daysToShow = 0; - $incidentDays = []; + $canPageForward = $page > 0; + $canPageBackward = ($page + 1) < $numPages; + $previousDate = $page + 1; + $nextDate = $page - 1; } else { - $incidentDays = range(0, $daysToShow); + $date = Date::now(); + + $canPageForward = (bool) $startDate->lt($date->sub('1 day')); + $canPageBackward = Incident::where('occurred_at', '<', $date->format('Y-m-d'))->count() > 0; + $previousDate = $startDate->copy()->subDays($appIncidentDays)->toDateString(); + $nextDate = $startDate->copy()->addDays($appIncidentDays)->toDateString(); } - $incidentVisibility = Auth::check() ? 0 : 1; + $allIncidents = Incident::with('component', 'updates.incident') + ->where('visible', '>=', (int) !Auth::check())->whereBetween('occurred_at', [ + $endDate->format('Y-m-d').' 00:00:00', + $startDate->format('Y-m-d').' 23:59:59', + ])->orderBy('occurred_at', 'desc')->get()->groupBy(function (Incident $incident) { + return app(DateFactory::class)->make($incident->occurred_at)->toDateString(); + }); - $allIncidents = Incident::notScheduled()->where('visible', '>=', $incidentVisibility)->whereBetween('created_at', [ - $startDate->copy()->subDays($daysToShow)->format('Y-m-d').' 00:00:00', - $startDate->format('Y-m-d').' 23:59:59', - ])->orderBy('scheduled_at', 'desc')->orderBy('created_at', 'desc')->get()->load('updates')->groupBy(function (Incident $incident) { - return app(DateFactory::class)->make($incident->is_scheduled ? $incident->scheduled_at : $incident->created_at)->toDateString(); - }); + if (!$onlyDisruptedDays) { + $incidentDays = array_pad([], $appIncidentDays, null); - // Add in days that have no incidents - if (Config::get('setting.only_disrupted_days') === false) { - foreach ($incidentDays as $i) { + // Add in days that have no incidents + foreach ($incidentDays as $i => $day) { $date = app(DateFactory::class)->make($startDate)->subDays($i); if (!isset($allIncidents[$date->toDateString()])) { @@ -103,15 +120,15 @@ public function showIndex() // Sort the array so it takes into account the added days $allIncidents = $allIncidents->sortBy(function ($value, $key) { return strtotime($key); - }, SORT_REGULAR, true)->all(); + }, SORT_REGULAR, true); return View::make('index') - ->withDaysToShow($daysToShow) + ->withDaysToShow($appIncidentDays) ->withAllIncidents($allIncidents) - ->withCanPageForward((bool) $today->gt($startDate)) - ->withCanPageBackward(Incident::notScheduled()->where('created_at', '<', $startDate->format('Y-m-d'))->count() > 0) - ->withPreviousDate($startDate->copy()->subDays($daysToShow)->toDateString()) - ->withNextDate($startDate->copy()->addDays($daysToShow)->toDateString()); + ->withCanPageForward($canPageForward) + ->withCanPageBackward($canPageBackward) + ->withPreviousDate($previousDate) + ->withNextDate($nextDate); } /** @@ -123,8 +140,19 @@ public function showIndex() */ public function showIncident(Incident $incident) { - return View::make('single-incident') - ->withIncident($incident); + return View::make('single-incident')->withIncident($incident); + } + + /** + * Show a single schedule. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return \Illuminate\View\View + */ + public function showSchedule(Schedule $schedule) + { + return View::make('single-schedule')->withSchedule($schedule); } /** @@ -136,22 +164,19 @@ public function showIncident(Incident $incident) */ public function getMetrics(Metric $metric) { - $metricData = []; - $type = Binput::get('filter', 'last_hour'); + $type = Binput::get('filter', AutoPresenter::decorate($metric)->view_name); + $metrics = app(MetricRepository::class); switch ($type) { - case 'last_hour': - $metricData = $this->metricRepository->listPointsLastHour($metric); + case 'last_hour': $metricData = $metrics->listPointsLastHour($metric); break; - case 'today': - $metricData = $this->metricRepository->listPointsToday($metric); + case 'today': $metricData = $metrics->listPointsToday($metric); break; - case 'week': - $metricData = $this->metricRepository->listPointsForWeek($metric); + case 'week': $metricData = $metrics->listPointsForWeek($metric); break; - case 'month': - $metricData = $this->metricRepository->listPointsForMonth($metric); + case 'month': $metricData = $metrics->listPointsForMonth($metric); break; + default: $metricData = []; } return $this->item([ @@ -170,21 +195,17 @@ public function getMetrics(Metric $metric) public function showComponentBadge(Component $component) { $component = AutoPresenter::decorate($component); - $color = null; switch ($component->status_color) { - case 'reds': - $color = Config::get('setting.style_reds', '#ff6f6f'); + case 'reds': $color = Config::get('setting.style_reds', '#FF6F6F'); break; - case 'blues': - $color = Config::get('setting.style_blues', '#3498db'); + case 'blues': $color = Config::get('setting.style_blues', '#3498DB'); break; - case 'greens': - $color = Config::get('setting.style_greens', '#7ED321'); + case 'greens': $color = Config::get('setting.style_greens', '#7ED321'); break; - case 'yellows': - $color = Config::get('setting.style_yellows', '#F7CA18'); + case 'yellows': $color = Config::get('setting.style_yellows', '#F7CA18'); break; + default: $color = null; } $badge = Badger::generate( diff --git a/app/Http/Controllers/SubscribeController.php b/app/Http/Controllers/SubscribeController.php index f630a2c55659..afa866a9610e 100644 --- a/app/Http/Controllers/SubscribeController.php +++ b/app/Http/Controllers/SubscribeController.php @@ -21,11 +21,14 @@ use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Models\Subscription; +use CachetHQ\Cachet\Notifications\Subscriber\ManageSubscriptionNotification; use GrahamCampbell\Binput\Facades\Binput; use GrahamCampbell\Markdown\Facades\Markdown; +use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Config\Repository; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\View; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -37,6 +40,25 @@ */ class SubscribeController extends Controller { + /** + * The illuminate guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new subscribe controller instance. + * + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Guard $auth) + { + $this->auth = $auth; + } + /** * Show the subscribe by email page. * @@ -60,7 +82,7 @@ public function postSubscribe() $verified = app(Repository::class)->get('setting.skip_subscriber_verification'); try { - $subscription = dispatch(new SubscribeSubscriberCommand($email, $verified)); + $subscription = execute(new SubscribeSubscriberCommand($email, $verified)); } catch (ValidationException $e) { return cachet_redirect('status-page') ->withInput(Binput::all()) @@ -68,12 +90,16 @@ public function postSubscribe() ->withErrors($e->getMessageBag()); } - if ($subscription->is_verified) { - return cachet_redirect('status-page')->withSuccess(trans('cachet.subscriber.email.already-subscribed', ['email' => $email])); - } + // Send the subscriber a link to manage their subscription. + $subscription->notify(new ManageSubscriptionNotification()); - return cachet_redirect('subscribe.manage', $subscription->verify_code) - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed'))); + return redirect()->back()->withSuccess( + sprintf( + '%s %s', + trans('dashboard.notifications.awesome'), + trans('cachet.subscriber.email.manage_subscription') + ) + ); } /** @@ -96,11 +122,11 @@ public function getVerify($code = null) } if (!$subscriber->is_verified) { - dispatch(new VerifySubscriberCommand($subscriber)); + execute(new VerifySubscriberCommand($subscriber)); } - return cachet_redirect('status-page') - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.verified'))); + return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $code])) + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed'))); } /** @@ -124,9 +150,9 @@ public function getUnsubscribe($code = null, $subscription = null) } if ($subscription) { - dispatch(new UnsubscribeSubscriptionCommand(Subscription::forSubscriber($subscriber->id)->firstOrFail())); + execute(new UnsubscribeSubscriptionCommand(Subscription::forSubscriber($subscriber->id)->firstOrFail())); } else { - dispatch(new UnsubscribeSubscriberCommand($subscriber, $subscription)); + execute(new UnsubscribeSubscriberCommand($subscriber)); } return cachet_redirect('status-page') @@ -146,10 +172,12 @@ public function showManage($code = null) throw new NotFoundHttpException(); } + $includePrivate = $this->auth->check(); + $subscriber = Subscriber::where('verify_code', '=', $code)->first(); - $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id'); + $usedComponentGroups = Component::enabled()->authenticated($includePrivate)->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id'); $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get(); - $ungroupedComponents = Component::enabled()->where('group_id', '=', 0)->orderBy('order')->orderBy('created_at')->get(); + $ungroupedComponents = Component::enabled()->authenticated($includePrivate)->where('group_id', '=', 0)->orderBy('order')->orderBy('created_at')->get(); if (!$subscriber) { throw new BadRequestHttpException(); @@ -182,15 +210,15 @@ public function postManage($code = null) } try { - dispatch(new UpdateSubscriberSubscriptionCommand($subscriber, Binput::get('subscriptions'))); + execute(new UpdateSubscriberSubscriptionCommand($subscriber, Binput::get('subscriptions'))); } catch (ValidationException $e) { - return cachet_redirect('subscribe.manage', $subscriber->verify_code) + return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $subscriber->verify_code])) ->withInput(Binput::all()) ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('cachet.subscriber.email.failure'))) ->withErrors($e->getMessageBag()); } - return cachet_redirect('subscribe.manage', $subscriber->verify_code) - ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed'))); + return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $subscriber->verify_code])) + ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.updated-subscribe'))); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index afb1bd2c3a6e..ee7e3b40aa96 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -11,7 +11,23 @@ namespace CachetHQ\Cachet\Http; +use Barryvdh\Cors\HandleCors; +use CachetHQ\Cachet\Http\Middleware\Admin; +use CachetHQ\Cachet\Http\Middleware\ApiAuthentication; +use CachetHQ\Cachet\Http\Middleware\Authenticate; +use CachetHQ\Cachet\Http\Middleware\CacheControl; +use CachetHQ\Cachet\Http\Middleware\Localize; +use CachetHQ\Cachet\Http\Middleware\ReadyForUse; +use CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated; +use CachetHQ\Cachet\Http\Middleware\RemoteUserAuthenticate; +use CachetHQ\Cachet\Http\Middleware\SetupAlreadyCompleted; +use CachetHQ\Cachet\Http\Middleware\SubscribersConfigured; +use CachetHQ\Cachet\Http\Middleware\Throttler; +use CachetHQ\Cachet\Http\Middleware\TrustProxies; +use Illuminate\Auth\Middleware\Authorize; use Illuminate\Foundation\Http\Kernel as HttpKernel; +use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode; +use Illuminate\Routing\Middleware\ValidateSignature; class Kernel extends HttpKernel { @@ -21,8 +37,8 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ - 'Fideloper\Proxy\TrustProxies', - 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', + TrustProxies::class, + CheckForMaintenanceMode::class, ]; /** @@ -31,15 +47,19 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin', - 'can' => 'Illuminate\Auth\Middleware\Authorize', - 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate', - 'auth.api' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthentication', - 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated', - 'localize' => 'CachetHQ\Cachet\Http\Middleware\Localize', - 'ready' => 'CachetHQ\Cachet\Http\Middleware\ReadyForUse', - 'setup' => 'CachetHQ\Cachet\Http\Middleware\SetupAlreadyCompleted', - 'subscribers' => 'CachetHQ\Cachet\Http\Middleware\SubscribersConfigured', - 'throttle' => 'AltThree\Throttle\ThrottlingMiddleware', + 'admin' => Admin::class, + 'auth.api' => ApiAuthentication::class, + 'auth.remoteuser' => RemoteUserAuthenticate::class, + 'auth' => Authenticate::class, + 'cache' => CacheControl::class, + 'can' => Authorize::class, + 'cors' => HandleCors::class, + 'guest' => RedirectIfAuthenticated::class, + 'localize' => Localize::class, + 'ready' => ReadyForUse::class, + 'setup' => SetupAlreadyCompleted::class, + 'signed' => ValidateSignature::class, + 'subscribers' => SubscribersConfigured::class, + 'throttle' => Throttler::class, ]; } diff --git a/app/Http/Middleware/Acceptable.php b/app/Http/Middleware/Acceptable.php index 7db13506338d..97974fa72b64 100644 --- a/app/Http/Middleware/Acceptable.php +++ b/app/Http/Middleware/Acceptable.php @@ -18,7 +18,7 @@ /** * This is the acceptable middleware class. * - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks */ class Acceptable diff --git a/app/Http/Middleware/Admin.php b/app/Http/Middleware/Admin.php index 5c83c82141e8..4180c3665d1a 100644 --- a/app/Http/Middleware/Admin.php +++ b/app/Http/Middleware/Admin.php @@ -20,7 +20,7 @@ * This is the admin middleware class. * * @author Joseph Cohen - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks */ class Admin diff --git a/app/Http/Middleware/ApiAuthentication.php b/app/Http/Middleware/ApiAuthentication.php index 0ae7a0683aad..c02b6c089c5e 100644 --- a/app/Http/Middleware/ApiAuthentication.php +++ b/app/Http/Middleware/ApiAuthentication.php @@ -22,7 +22,7 @@ * This is the api authentication middleware class. * * @author Joseph Cohen - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks */ class ApiAuthentication diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 6139df30c200..9b5562cb3173 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -20,7 +20,7 @@ * This is the authenticate middleware class. * * @author Joseph Cohen - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks */ class Authenticate diff --git a/app/Http/Middleware/CacheControl.php b/app/Http/Middleware/CacheControl.php new file mode 100644 index 000000000000..fa54dfe094f0 --- /dev/null +++ b/app/Http/Middleware/CacheControl.php @@ -0,0 +1,37 @@ +header('Cache-Control', 'public,max-age='.$maxAge); + + return $response; + } +} diff --git a/app/Http/Middleware/Localize.php b/app/Http/Middleware/Localize.php index 62948a855966..52469c41515b 100644 --- a/app/Http/Middleware/Localize.php +++ b/app/Http/Middleware/Localize.php @@ -11,8 +11,9 @@ namespace CachetHQ\Cachet\Http\Middleware; +use CachetHQ\Cachet\Settings\Repository as SettingsRepository; use Closure; -use Illuminate\Config\Repository; +use Illuminate\Contracts\Config\Repository as ConfigRepository; use Illuminate\Http\Request; use Jenssegers\Date\Date; @@ -21,35 +22,36 @@ * * @author James Brooks * @author Joseph Cohen - * @author Graham Campbell + * @author Graham Campbell */ class Localize { /** - * Array of languages Cachet can use. + * The config repository instance. * - * @var array + * @var \Illuminate\Contracts\Config\Repository */ - protected $langs; + protected $config; /** - * The config repository instance. + * The settings repository instance. * - * @var \Illuminate\Config\Repository + * @var \CachetHQ\Cachet\Settings\Repository */ - protected $config; + protected $settings; /** * Constructs a new localize middleware instance. * - * @param \Illuminate\Config\Repository $config + * @param \Illuminate\Contracts\Config\Repository $config + * @param \CachetHQ\Cachet\Settings\Repository $settings * * @return void */ - public function __construct(Repository $config) + public function __construct(ConfigRepository $config, SettingsRepository $settings) { $this->config = $config; - $this->langs = $config->get('langs'); + $this->settings = $settings; } /** @@ -62,17 +64,18 @@ public function __construct(Repository $config) */ public function handle(Request $request, Closure $next) { - if (!(bool) $this->config->get('setting.automatic_localization')) { + if (!(bool) $this->settings->get('automatic_localization')) { return $next($request); } - $supportedLanguages = $request->getLanguages(); + $requestedLanguages = $request->getLanguages(); $userLanguage = $this->config->get('app.locale'); + $langs = $this->config->get('langs'); - foreach ($supportedLanguages as $language) { + foreach ($requestedLanguages as $language) { $language = str_replace('_', '-', $language); - if (isset($this->langs[$language])) { + if (isset($langs[$language])) { $userLanguage = $language; break; } diff --git a/app/Http/Middleware/ReadyForUse.php b/app/Http/Middleware/ReadyForUse.php index b6c33281607b..11b1afbbb808 100644 --- a/app/Http/Middleware/ReadyForUse.php +++ b/app/Http/Middleware/ReadyForUse.php @@ -11,21 +11,38 @@ namespace CachetHQ\Cachet\Http\Middleware; +use CachetHQ\Cachet\Settings\Repository; use Closure; -use Exception; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Config; -use Illuminate\Support\Facades\Redirect; /** * This is the ready for use middleware class. * - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks * @author Joseph Cohen */ class ReadyForUse { + /** + * The settings repository instance. + * + * @var \CachetHQ\Cachet\Settings\Repository + */ + protected $settings; + + /** + * Creates a new setup already completed middleware instance. + * + * @param \CachetHQ\Cachet\Settings\Repository $settings + * + * @return void + */ + public function __construct(Repository $settings) + { + $this->settings = $settings; + } + /** * Handle an incoming request. * @@ -36,12 +53,8 @@ class ReadyForUse */ public function handle(Request $request, Closure $next) { - try { - if (!Config::get('setting.app_name')) { - return Redirect::to('setup'); - } - } catch (Exception $e) { - return Redirect::to('setup'); + if (!$request->is('setup*') && !$this->settings->get('app_name')) { + return cachet_redirect('setup'); } return $next($request); diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index cf2c83337ab1..b8c956485445 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -13,13 +13,12 @@ use Closure; use Illuminate\Contracts\Auth\Guard; -use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; /** * This is the redirect if authenticated middleware class. * - * @author Graham Campbell + * @author Graham Campbell * @author Joseph Cohen * @author James Brooks */ @@ -55,7 +54,7 @@ public function __construct(Guard $auth) public function handle(Request $request, Closure $next) { if ($this->auth->check()) { - return new RedirectResponse(cachet_route('dashboard')); + return cachet_redirect('dashboard'); } return $next($request); diff --git a/app/Http/Middleware/RemoteUserAuthenticate.php b/app/Http/Middleware/RemoteUserAuthenticate.php new file mode 100644 index 000000000000..075c0c4a13a7 --- /dev/null +++ b/app/Http/Middleware/RemoteUserAuthenticate.php @@ -0,0 +1,53 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * + * @return mixed + */ + public function handle(Request $request, Closure $next) + { + if ($remoteUser = $request->server('REMOTE_USER')) { + $user = User::where('email', '=', $remoteUser)->first(); + + if ($user instanceof User && $this->auth->guest()) { + $this->auth->login($user); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/SetupAlreadyCompleted.php b/app/Http/Middleware/SetupAlreadyCompleted.php index 50bcce5a292a..e0df0c8f5ed8 100644 --- a/app/Http/Middleware/SetupAlreadyCompleted.php +++ b/app/Http/Middleware/SetupAlreadyCompleted.php @@ -11,36 +11,37 @@ namespace CachetHQ\Cachet\Http\Middleware; +use CachetHQ\Cachet\Settings\ReadException; +use CachetHQ\Cachet\Settings\Repository; use Closure; -use Illuminate\Contracts\Config\Repository; use Illuminate\Http\Request; /** * This is the setup already completed middelware class. * - * @author Graham Campbell + * @author Graham Campbell * @author James Brooks * @author Joseph Cohen */ class SetupAlreadyCompleted { /** - * The config repository instance. + * The settings repository instance. * - * @var \Illuminate\Contracts\Config\Repository + * @var \CachetHQ\Cachet\Settings\Repository */ - protected $config; + protected $settings; /** * Creates a new setup already completed middleware instance. * - * @param \Illuminate\Contracts\Config\Repository $config + * @param \CachetHQ\Cachet\Settings\Repository $settings * * @return void */ - public function __construct(Repository $config) + public function __construct(Repository $settings) { - $this->config = $config; + $this->settings = $settings; } /** @@ -53,8 +54,12 @@ public function __construct(Repository $config) */ public function handle(Request $request, Closure $next) { - if ($this->config->get('setting.app_name')) { - return cachet_route('dashboard'); + try { + if ($this->settings->get('app_name')) { + return cachet_redirect('dashboard'); + } + } catch (ReadException $e) { + // not setup then! } return $next($request); diff --git a/app/Http/Middleware/SubscribersConfigured.php b/app/Http/Middleware/SubscribersConfigured.php index 3069d1edf95e..116b20a57177 100644 --- a/app/Http/Middleware/SubscribersConfigured.php +++ b/app/Http/Middleware/SubscribersConfigured.php @@ -12,16 +12,36 @@ namespace CachetHQ\Cachet\Http\Middleware; use Closure; +use Illuminate\Contracts\Config\Repository; use Illuminate\Http\Request; /** * This is the subscribers configured middleware class. * * @author James Brooks - * @author Graham Campbell + * @author Graham Campbell */ class SubscribersConfigured { + /** + * The config repository instance. + * + * @var \Illuminate\Contracts\Config\Repository + */ + protected $config; + + /** + * Creates a subscribers configured middleware instance. + * + * @param \Illuminate\Contracts\Config\Repository $config + * + * @return void + */ + public function __construct(Repository $config) + { + $this->config = $config; + } + /** * Handle an incoming request. * @@ -32,10 +52,6 @@ class SubscribersConfigured */ public function handle(Request $request, Closure $next) { - if (!subscribers_enabled()) { - return cachet_route('status-page'); - } - return $next($request); } } diff --git a/app/Http/Middleware/Throttler.php b/app/Http/Middleware/Throttler.php new file mode 100644 index 000000000000..c83149633883 --- /dev/null +++ b/app/Http/Middleware/Throttler.php @@ -0,0 +1,125 @@ + + */ +class Throttler +{ + /** + * The rate limiter instance. + * + * @var \Illuminate\Cache\RateLimiter + */ + protected $limiter; + + /** + * Create a new throttler middleware instance. + * + * @param \Illuminate\Cache\RateLimiter $limiter + * + * @return void + */ + public function __construct(RateLimiter $limiter) + { + $this->limiter = $limiter; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param int|string $limit + * @param int|string $decay + * + * @throws \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException + * + * @return mixed + */ + public function handle(Request $request, Closure $next, $limit = 60, $decay = 1) + { + return $this->safeHandle($request, $next, (int) $limit, (int) $decay); + } + + /** + * Handle an incoming request, with correct types. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param int $limit + * @param int $decay + * + * @throws \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException + * + * @return mixed + */ + protected function safeHandle(Request $request, Closure $next, int $limit, int $decay) + { + $key = $request->fingerprint(); + + if ($this->limiter->tooManyAttempts($key, $limit, $decay)) { + throw $this->buildException($key, $limit); + } + + $this->limiter->hit($key, $decay); + + $response = $next($request); + + $response->headers->add($this->getHeaders($key, $limit)); + + return $response; + } + + /** + * Create a too many requests http exception. + * + * @param string $key + * @param int $limit + * + * @return \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException + */ + protected function buildException(string $key, int $limit) + { + $after = $this->limiter->availableIn($key); + $exception = new TooManyRequestsHttpException($after, 'Rate limit exceeded.'); + $exception->setHeaders($this->getHeaders($key, $limit, $after, $exception->getHeaders())); + + return $exception; + } + + /** + * Get the limit header information. + * + * @param string $key + * @param int $limit + * @param int|null $after + * @param array $merge + * + * @return array + */ + protected function getHeaders(string $key, int $limit, int $after = null, array $merge = []) + { + $remaining = $after === null ? $this->limiter->retriesLeft($key, $limit) : 0; + $headers = ['X-RateLimit-Limit' => $limit, 'X-RateLimit-Remaining' => $remaining]; + + return array_merge($headers, $merge); + } +} diff --git a/app/Http/Middleware/Timezone.php b/app/Http/Middleware/Timezone.php index 40afe9e066a7..e0700714af92 100644 --- a/app/Http/Middleware/Timezone.php +++ b/app/Http/Middleware/Timezone.php @@ -19,7 +19,7 @@ * This is the timezone middleware class. * * @author James Brooks - * @author Graham Campbell + * @author Graham Campbell */ class Timezone { diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 000000000000..83a86c5e6ff3 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,50 @@ + + */ +class TrustProxies extends Middleware +{ + /** + * The trusted proxies for this application. + * + * @var array + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = Request::HEADER_X_FORWARDED_ALL; + + /** + * Create new trust proxies instance. + * + * @return void + */ + public function __construct() + { + $proxies = Config::get('trustedproxies.proxies'); + + $this->proxies = empty($proxies) ? '*' : explode(',', trim($proxies)); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 000000000000..cfd2fc055a5d --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,38 @@ + + */ +class VerifyCsrfToken extends Middleware +{ + /** + * Indicates whether the XSRF-TOKEN cookie should be set on the response. + * + * @var bool + */ + protected $addHttpCookie = true; + + /** + * The URIs that should be excluded from CSRF verification. + * + * @var array + */ + protected $except = [ + '/api/*', + ]; +} diff --git a/app/Http/Routes/ApiRoutes.php b/app/Http/Routes/ApiRoutes.php index f255e317fd3f..b56902d3635b 100644 --- a/app/Http/Routes/ApiRoutes.php +++ b/app/Http/Routes/ApiRoutes.php @@ -40,53 +40,58 @@ public function map(Registrar $router) 'namespace' => 'Api', 'prefix' => 'api/v1', ], function (Registrar $router) { - $router->group(['middleware' => ['auth.api']], function (Registrar $router) { - $router->get('ping', 'GeneralController@ping'); - $router->get('version', 'GeneralController@version'); - $router->get('status', 'GeneralController@status'); + $router->group(['middleware' => ['auth.api', 'cors']], function (Registrar $router) { + $router->get('components', 'ComponentController@index'); + $router->get('components/groups', 'ComponentGroupController@index'); + $router->get('components/groups/{component_group}', 'ComponentGroupController@show'); + $router->get('components/{component}', 'ComponentController@show'); - $router->get('components', 'ComponentController@getComponents'); - $router->get('components/groups', 'ComponentGroupController@getGroups'); - $router->get('components/groups/{component_group}', 'ComponentGroupController@getGroup'); - $router->get('components/{component}', 'ComponentController@getComponent'); + $router->get('incidents', 'IncidentController@index'); - $router->get('incidents', 'IncidentController@getIncidents'); - $router->get('incidents/{incident}', 'IncidentController@getIncident'); + $router->get('incidents/templates', 'IncidentTemplateController@index'); + $router->get('incidents/templates/{incident_template}', 'IncidentTemplateController@show'); - $router->get('incidents/{incident}/updates', 'IncidentUpdateController@getIncidentUpdates'); - $router->get('incidents/{incident}/updates/{update}', 'IncidentUpdateController@getIncidentUpdate'); + $router->get('incidents/{incident}', 'IncidentController@show'); + $router->get('incidents/{incident}/updates', 'IncidentUpdateController@index'); + $router->get('incidents/{incident}/updates/{update}', 'IncidentUpdateController@show'); - $router->get('metrics', 'MetricController@getMetrics'); - $router->get('metrics/{metric}', 'MetricController@getMetric'); - $router->get('metrics/{metric}/points', 'MetricController@getMetricPoints'); + $router->get('metrics', 'MetricController@index'); + $router->get('metrics/{metric}', 'MetricController@show'); + $router->get('metrics/{metric}/points', 'MetricPointController@index'); + + $router->get('schedules', 'ScheduleController@index'); + $router->get('schedules/{schedule}', 'ScheduleController@show'); }); $router->group(['middleware' => ['auth.api:true']], function (Registrar $router) { - $router->get('subscribers', 'SubscriberController@getSubscribers'); + $router->get('subscribers', 'SubscriberController@index'); - $router->post('components', 'ComponentController@postComponents'); - $router->post('components/groups', 'ComponentGroupController@postGroups'); - $router->post('incidents', 'IncidentController@postIncidents'); - $router->post('incidents/{incident}/updates', 'IncidentUpdateController@postIncidentUpdate'); - $router->post('metrics', 'MetricController@postMetrics'); - $router->post('metrics/{metric}/points', 'MetricPointController@postMetricPoints'); - $router->post('subscribers', 'SubscriberController@postSubscribers'); + $router->post('components', 'ComponentController@store'); + $router->post('components/groups', 'ComponentGroupController@store'); + $router->post('incidents', 'IncidentController@store'); + $router->post('incidents/{incident}/updates', 'IncidentUpdateController@store'); + $router->post('metrics', 'MetricController@store'); + $router->post('metrics/{metric}/points', 'MetricPointController@store'); + $router->post('schedules', 'ScheduleController@store'); + $router->post('subscribers', 'SubscriberController@store'); - $router->put('components/groups/{component_group}', 'ComponentGroupController@putGroup'); - $router->put('components/{component}', 'ComponentController@putComponent'); - $router->put('incidents/{incident}', 'IncidentController@putIncident'); - $router->put('incidents/{incident}/updates/{update}', 'IncidentUpdateController@putIncidentUpdate'); - $router->put('metrics/{metric}', 'MetricController@putMetric'); - $router->put('metrics/{metric}/points/{metric_point}', 'MetricPointController@putMetricPoint'); + $router->put('components/groups/{component_group}', 'ComponentGroupController@update'); + $router->put('components/{component}', 'ComponentController@update'); + $router->put('incidents/{incident}', 'IncidentController@update'); + $router->put('incidents/{incident}/updates/{update}', 'IncidentUpdateController@update'); + $router->put('metrics/{metric}', 'MetricController@update'); + $router->put('metrics/{metric}/points/{metric_point}', 'MetricPointController@update'); + $router->put('schedules/{schedule}', 'ScheduleController@update'); - $router->delete('components/groups/{component_group}', 'ComponentGroupController@deleteGroup'); - $router->delete('components/{component}', 'ComponentController@deleteComponent'); - $router->delete('incidents/{incident}', 'IncidentController@deleteIncident'); - $router->delete('incidents/{incident}/updates/{update}', 'IncidentUpdateController@deleteIncidentUpdate'); - $router->delete('metrics/{metric}', 'MetricController@deleteMetric'); - $router->delete('metrics/{metric}/points/{metric_point}', 'MetricPointController@deleteMetricPoint'); - $router->delete('subscribers/{subscriber}', 'SubscriberController@deleteSubscriber'); - $router->delete('subscriptions/{subscription}', 'SubscriberController@deleteSubscription'); + $router->delete('components/groups/{component_group}', 'ComponentGroupController@destroy'); + $router->delete('components/{component}', 'ComponentController@destroy'); + $router->delete('incidents/{incident}', 'IncidentController@destroy'); + $router->delete('incidents/{incident}/updates/{update}', 'IncidentUpdateController@destroy'); + $router->delete('metrics/{metric}', 'MetricController@destroy'); + $router->delete('metrics/{metric}/points/{metric_point}', 'MetricPointController@destroy'); + $router->delete('schedules/{schedule}', 'ScheduleController@destroy'); + $router->delete('subscribers/{subscriber}', 'SubscriberController@destroy'); + $router->delete('subscriptions/{subscription}', 'SubscriptionController@destroy'); }); }); } diff --git a/app/Http/Routes/FeedRoutes.php b/app/Http/Routes/ApiSystemRoutes.php similarity index 54% rename from app/Http/Routes/FeedRoutes.php rename to app/Http/Routes/ApiSystemRoutes.php index 2a4f930efd7f..92a7aa2e31a8 100644 --- a/app/Http/Routes/FeedRoutes.php +++ b/app/Http/Routes/ApiSystemRoutes.php @@ -14,21 +14,21 @@ use Illuminate\Contracts\Routing\Registrar; /** - * This is the feed routes class. + * This is the api routes class. * * @author James Brooks */ -class FeedRoutes +class ApiSystemRoutes { /** * Defines if these routes are for the browser. * * @var bool */ - public static $browser = true; + public static $browser = false; /** - * Define the status page routes. + * Define the api routes for the system status, ping and version. * * @param \Illuminate\Contracts\Routing\Registrar $router * @@ -37,17 +37,14 @@ class FeedRoutes public function map(Registrar $router) { $router->group([ - 'middleware' => ['ready'], + 'namespace' => 'Api', + 'prefix' => 'api/v1', ], function (Registrar $router) { - $router->get('/atom/{component_group?}', [ - 'as' => 'get:feed.atom', - 'uses' => 'FeedController@atomAction', - ]); - - $router->get('/rss/{component_group?}', [ - 'as' => 'get:feed.rss', - 'uses' => 'FeedController@rssAction', - ]); + $router->group(['middleware' => ['auth.api']], function (Registrar $router) { + $router->get('ping', 'GeneralController@ping'); + $router->get('version', 'GeneralController@version'); + $router->get('status', ['uses' => 'GeneralController@status', 'middleware' => ['cache']]); + }); }); } } diff --git a/app/Http/Routes/Dashboard/ApiRoutes.php b/app/Http/Routes/Dashboard/ApiRoutes.php index a07f9c4aff07..46d186dc2bb9 100644 --- a/app/Http/Routes/Dashboard/ApiRoutes.php +++ b/app/Http/Routes/Dashboard/ApiRoutes.php @@ -45,7 +45,7 @@ public function map(Registrar $router) $router->get('incidents/templates', 'ApiController@getIncidentTemplate'); $router->post('components/groups/order', 'ApiController@postUpdateComponentGroupOrder'); $router->post('components/order', 'ApiController@postUpdateComponentOrder'); - $router->post('components/{component}', 'ApiController@postUpdateComponent'); + $router->any('components/{component}', 'ApiController@postUpdateComponent'); }); } } diff --git a/app/Http/Routes/Dashboard/ComponentRoutes.php b/app/Http/Routes/Dashboard/ComponentRoutes.php index ed14f1e1af8b..aa7852f827e2 100644 --- a/app/Http/Routes/Dashboard/ComponentRoutes.php +++ b/app/Http/Routes/Dashboard/ComponentRoutes.php @@ -58,29 +58,29 @@ public function map(Registrar $router) $router->get('groups', [ 'as' => 'get:dashboard.components.groups', - 'uses' => 'ComponentController@showComponentGroups', + 'uses' => 'ComponentGroupController@showComponentGroups', ]); $router->get('groups/create', [ 'as' => 'get:dashboard.components.groups.create', - 'uses' => 'ComponentController@showAddComponentGroup', + 'uses' => 'ComponentGroupController@showAddComponentGroup', ]); $router->post('groups/create', [ 'as' => 'post:dashboard.components.groups.create', - 'uses' => 'ComponentController@postAddComponentGroup', + 'uses' => 'ComponentGroupController@postAddComponentGroup', ]); $router->get('groups/{component_group}', [ 'as' => 'get:dashboard.components.groups.edit', - 'uses' => 'ComponentController@showEditComponentGroup', + 'uses' => 'ComponentGroupController@showEditComponentGroup', ]); $router->post('groups/{component_group}', [ 'as' => 'post:dashboard.components.groups.edit', - 'uses' => 'ComponentController@updateComponentGroupAction', + 'uses' => 'ComponentGroupController@updateComponentGroupAction', ]); $router->delete('groups/{component_group}', [ 'as' => 'delete:dashboard.components.groups.delete', - 'uses' => 'ComponentController@deleteComponentGroupAction', + 'uses' => 'ComponentGroupController@deleteComponentGroupAction', ]); $router->get('{component}', [ diff --git a/app/Http/Routes/Dashboard/IncidentRoutes.php b/app/Http/Routes/Dashboard/IncidentRoutes.php index c312bc0862cf..4eee1e5e8e7e 100644 --- a/app/Http/Routes/Dashboard/IncidentRoutes.php +++ b/app/Http/Routes/Dashboard/IncidentRoutes.php @@ -71,11 +71,23 @@ public function map(Registrar $router) $router->get('{incident}/updates', [ 'as' => 'get:dashboard.incidents.updates', - 'uses' => 'IncidentController@showIncidentUpdateAction', + 'uses' => 'IncidentUpdateController@showIncidentUpdates', ]); - $router->post('{incident}/updates', [ - 'as' => 'post:dashboard.incidents.updates', - 'uses' => 'IncidentController@createIncidentUpdateAction', + $router->get('{incident}/updates/create', [ + 'as' => 'get:dashboard.incidents.updates.create', + 'uses' => 'IncidentUpdateController@showCreateIncidentUpdateAction', + ]); + $router->post('{incident}/updates/create', [ + 'as' => 'post:dashboard.incidents.updates.create', + 'uses' => 'IncidentUpdateController@createIncidentUpdateAction', + ]); + $router->get('{incident}/updates/{incident_update}', [ + 'as' => 'get:dashboard.incidents.updates.edit', + 'uses' => 'IncidentUpdateController@showEditIncidentUpdateAction', + ]); + $router->post('{incident}/updates/{incident_update}', [ + 'as' => 'post:dashboard.incidents.updates.edit', + 'uses' => 'IncidentUpdateController@editIncidentUpdateAction', ]); }); } diff --git a/app/Http/Routes/Dashboard/ScheduleRoutes.php b/app/Http/Routes/Dashboard/ScheduleRoutes.php index 506fe51b6d75..8591d1500c95 100644 --- a/app/Http/Routes/Dashboard/ScheduleRoutes.php +++ b/app/Http/Routes/Dashboard/ScheduleRoutes.php @@ -56,15 +56,15 @@ public function map(Registrar $router) 'uses' => 'ScheduleController@addScheduleAction', ]); - $router->get('{incident}', [ + $router->get('{schedule}', [ 'as' => 'get:dashboard.schedule.edit', 'uses' => 'ScheduleController@showEditSchedule', ]); - $router->post('{incident}', [ + $router->post('{schedule}', [ 'as' => 'post:dashboard.schedule.edit', 'uses' => 'ScheduleController@editScheduleAction', ]); - $router->delete('{incident}', [ + $router->delete('{schedule}', [ 'as' => 'delete:dashboard.schedule.delete', 'uses' => 'ScheduleController@deleteScheduleAction', ]); diff --git a/app/Http/Routes/Dashboard/SettingRoutes.php b/app/Http/Routes/Dashboard/SettingRoutes.php index 4370a750f6a3..a963470d7214 100644 --- a/app/Http/Routes/Dashboard/SettingRoutes.php +++ b/app/Http/Routes/Dashboard/SettingRoutes.php @@ -78,6 +78,18 @@ public function map(Registrar $router) 'as' => 'get:dashboard.settings.log', 'uses' => 'SettingsController@showLogView', ]); + $router->get('mail', [ + 'as' => 'get:dashboard.settings.mail', + 'uses' => 'SettingsController@showMailView', + ]); + $router->post('mail', [ + 'as' => 'post:dashboard.settings.mail', + 'uses' => 'SettingsController@postMail', + ]); + $router->post('mail/test', [ + 'as' => 'post:dashboard.settings.mail.test', + 'uses' => 'SettingsController@testMail', + ]); $router->post('/', [ 'as' => 'post:dashboard.settings', diff --git a/app/Http/Routes/Dashboard/TemplateRoutes.php b/app/Http/Routes/Dashboard/TemplateRoutes.php index 289f975229be..ee4ed5df2699 100644 --- a/app/Http/Routes/Dashboard/TemplateRoutes.php +++ b/app/Http/Routes/Dashboard/TemplateRoutes.php @@ -44,29 +44,29 @@ public function map(Registrar $router) ], function (Registrar $router) { $router->get('/', [ 'as' => 'get:dashboard.templates', - 'uses' => 'IncidentController@showTemplates', + 'uses' => 'IncidentTemplateController@showTemplates', ]); $router->get('create', [ 'as' => 'get:dashboard.templates.create', - 'uses' => 'IncidentController@showAddIncidentTemplate', + 'uses' => 'IncidentTemplateController@showAddIncidentTemplate', ]); $router->post('create', [ 'as' => 'post:dashboard.templates.create', - 'uses' => 'IncidentController@createIncidentTemplateAction', + 'uses' => 'IncidentTemplateController@createIncidentTemplateAction', ]); $router->get('{incident_template}', [ 'as' => 'get:dashboard.templates.edit', - 'uses' => 'IncidentController@showEditTemplateAction', + 'uses' => 'IncidentTemplateController@showEditTemplateAction', ]); $router->post('{incident_template}', [ 'as' => 'post:dashboard.templates.edit', - 'uses' => 'IncidentController@editTemplateAction', + 'uses' => 'IncidentTemplateController@editTemplateAction', ]); $router->delete('{incident_template}', [ 'as' => 'delete:dashboard.templates.delete', - 'uses' => 'IncidentController@deleteTemplateAction', + 'uses' => 'IncidentTemplateController@deleteTemplateAction', ]); }); } diff --git a/app/Http/Routes/Setup/ApiRoutes.php b/app/Http/Routes/Setup/ApiRoutes.php new file mode 100644 index 000000000000..8a3a3897779c --- /dev/null +++ b/app/Http/Routes/Setup/ApiRoutes.php @@ -0,0 +1,59 @@ + + */ +class ApiRoutes +{ + /** + * Defines if these routes are for the browser. + * + * @var bool + */ + public static $browser = false; + + /** + * Define the setup routes. + * + * @param \Illuminate\Contracts\Routing\Registrar $router + * + * @return void + */ + public function map(Registrar $router) + { + $router->group([ + 'middleware' => ['setup'], + 'prefix' => 'setup', + ], function (Registrar $router) { + $router->post('step1', [ + 'as' => 'post:setup.step1', + 'uses' => 'SetupController@postStep1', + ]); + + $router->post('step2', [ + 'as' => 'post:setup.step2', + 'uses' => 'SetupController@postStep2', + ]); + + $router->post('step3', [ + 'as' => 'post:setup.step3', + 'uses' => 'SetupController@postStep3', + ]); + }); + } +} diff --git a/app/Http/Routes/SetupRoutes.php b/app/Http/Routes/SetupRoutes.php index 2558237ce5c3..eb1319546bda 100644 --- a/app/Http/Routes/SetupRoutes.php +++ b/app/Http/Routes/SetupRoutes.php @@ -45,21 +45,6 @@ public function map(Registrar $router) 'as' => 'get:setup', 'uses' => 'SetupController@getIndex', ]); - - $router->post('step1', [ - 'as' => 'post:setup.step1', - 'uses' => 'SetupController@postStep1', - ]); - - $router->post('step2', [ - 'as' => 'post:setup.step2', - 'uses' => 'SetupController@postStep2', - ]); - - $router->post('step3', [ - 'as' => 'post:setup.step3', - 'uses' => 'SetupController@postStep3', - ]); }); } } diff --git a/app/Http/Routes/StatusPageRoutes.php b/app/Http/Routes/StatusPageRoutes.php index 05df54e7db7d..20bd69089af8 100644 --- a/app/Http/Routes/StatusPageRoutes.php +++ b/app/Http/Routes/StatusPageRoutes.php @@ -49,6 +49,11 @@ public function map(Registrar $router) 'uses' => 'StatusPageController@showIncident', ]); + $router->get('schedules/{schedule}', [ + 'as' => 'get:schedule', + 'uses' => 'StatusPageController@showSchedule', + ]); + $router->get('metrics/{metric}', [ 'as' => 'get:metric', 'uses' => 'StatusPageController@getMetrics', diff --git a/app/Http/Routes/SubscribeRoutes.php b/app/Http/Routes/SubscribeRoutes.php index e844ba182364..8c5279d43e98 100644 --- a/app/Http/Routes/SubscribeRoutes.php +++ b/app/Http/Routes/SubscribeRoutes.php @@ -49,8 +49,9 @@ public function map(Registrar $router) ]); $router->get('subscribe/manage/{code}', [ - 'as' => 'get:subscribe.manage', - 'uses' => 'SubscribeController@showManage', + 'as' => 'get:subscribe.manage', + 'middleware' => ['signed'], + 'uses' => 'SubscribeController@showManage', ]); $router->post('subscribe/manage/{code}', [ 'as' => 'post:subscribe.manage', @@ -58,8 +59,9 @@ public function map(Registrar $router) ]); $router->get('subscribe/verify/{code}', [ - 'as' => 'get:subscribe.verify', - 'uses' => 'SubscribeController@getVerify', + 'as' => 'get:subscribe.verify', + 'middleware' => ['signed'], + 'uses' => 'SubscribeController@getVerify', ]); $router->get('unsubscribe/{code}/{subscription?}', [ diff --git a/app/Integrations/Contracts/System.php b/app/Integrations/Contracts/System.php index e64f42627b40..a064e71065f1 100644 --- a/app/Integrations/Contracts/System.php +++ b/app/Integrations/Contracts/System.php @@ -25,10 +25,24 @@ interface System */ public function getStatus(); + /** + * Determine if Cachet is allowed to send notifications to users, subscribers or third party tools. + * + * @return bool + */ + public function canNotifySubscribers(); + /** * Get the cachet version. * * @return string */ public function getVersion(); + + /** + * Get the table prefix. + * + * @return string + */ + public function getTablePrefix(); } diff --git a/app/Integrations/Core/Beacon.php b/app/Integrations/Core/Beacon.php index f3aba9b5282a..f4a283ab8354 100644 --- a/app/Integrations/Core/Beacon.php +++ b/app/Integrations/Core/Beacon.php @@ -14,14 +14,18 @@ use CachetHQ\Cachet\Bus\Events\Beacon\BeaconFailedToSendEvent; use CachetHQ\Cachet\Bus\Events\Beacon\BeaconWasSentEvent; use CachetHQ\Cachet\Integrations\Contracts\Beacon as BeaconContract; +use CachetHQ\Cachet\Models\Action; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\Schedule; +use CachetHQ\Cachet\Models\Tag; use CachetHQ\Cachet\Models\User; use CachetHQ\Cachet\Settings\Repository as Setting; use Exception; use GuzzleHttp\Client; use Illuminate\Contracts\Config\Repository; +use Illuminate\Support\Str; /** * This is the beacon class. @@ -78,29 +82,27 @@ public function send() return; } - if (!($contactEmail = User::admins()->active()->first()->email)) { - $contactEmail = null; - } - $setting = app(Setting::class); if (!$installId = $setting->get('install_id', null)) { - $installId = sha1(str_random(20)); + $installId = sha1(Str::random(20)); $setting->set('install_id', $installId); } $payload = [ - 'install_id' => $installId, - 'version' => CACHET_VERSION, - 'docker' => $this->config->get('cachet.is_docker'), - 'database' => $this->config->get('database.default'), - 'contact_email' => $contactEmail, - 'data' => [ + 'install_id' => $installId, + 'version' => CACHET_VERSION, + 'docker' => $this->config->get('cachet.is_docker'), + 'database' => $this->config->get('database.default'), + 'data' => [ 'components' => Component::all()->count(), 'incidents' => Incident::all()->count(), 'metrics' => Metric::all()->count(), 'users' => User::all()->count(), + 'actions' => Action::all()->count(), + 'tags' => Tag::all()->count(), + 'schedules' => Schedule::all()->count(), ], ]; @@ -111,7 +113,6 @@ public function send() 'json' => $payload, ]); } catch (Exception $e) { - // TODO: Log a warning that the beacon could not be sent. event(new BeaconFailedToSendEvent()); return; diff --git a/app/Integrations/Core/Credits.php b/app/Integrations/Core/Credits.php index f962606244d0..e821c3b6f29b 100644 --- a/app/Integrations/Core/Credits.php +++ b/app/Integrations/Core/Credits.php @@ -16,6 +16,12 @@ use GuzzleHttp\Client; use Illuminate\Contracts\Cache\Repository; +/** + * This is the credits class. + * + * @author Graham Campbell + * @author James Brooks + */ class Credits implements CreditsContract { /** diff --git a/app/Integrations/Core/Feed.php b/app/Integrations/Core/Feed.php index 824bdb20f052..1ab93c4d02d4 100644 --- a/app/Integrations/Core/Feed.php +++ b/app/Integrations/Core/Feed.php @@ -28,7 +28,7 @@ class Feed implements FeedContract * * @var string */ - const URL = 'https://blog.alt-three.com/tag/cachet/rss'; + const URL = 'https://alt-three.com/tag/cachet/rss'; /** * The failed status indicator. diff --git a/app/Integrations/Core/System.php b/app/Integrations/Core/System.php index 77395af6b2da..b1f7183c1e70 100644 --- a/app/Integrations/Core/System.php +++ b/app/Integrations/Core/System.php @@ -14,6 +14,9 @@ use CachetHQ\Cachet\Integrations\Contracts\System as SystemContract; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\Schedule; +use Illuminate\Contracts\Auth\Guard; +use Illuminate\Contracts\Config\Repository; /** * This is the core system class. @@ -22,6 +25,34 @@ */ class System implements SystemContract { + /** + * The illuminate config instance. + * + * @var \Illuminate\Contracts\Config\Repository + */ + protected $config; + + /** + * The illuminate guard instance. + * + * @var \Illuminate\Contracts\Auth\Guard + */ + protected $auth; + + /** + * Create a new system instance. + * + * @param \Illuminate\Contracts\Config\Repository $config + * @param \Illuminate\Contracts\Auth\Guard $auth + * + * @return void + */ + public function __construct(Repository $config, Guard $auth) + { + $this->config = $config; + $this->auth = $auth; + } + /** * Get the entire system status. * @@ -29,10 +60,12 @@ class System implements SystemContract */ public function getStatus() { - $enabledScope = Component::enabled(); - $totalComponents = $enabledScope->count(); - $majorOutages = $enabledScope->status(4)->count(); - $isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) >= 0.5 : false; + $includePrivate = $this->auth->check(); + + $totalComponents = Component::enabled()->authenticated($includePrivate)->count(); + $majorOutages = Component::enabled()->authenticated($includePrivate)->status(4)->count(); + $majorOutageRate = (int) $this->config->get('setting.major_outage_rate', '50'); + $isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) * 100 >= $majorOutageRate : false; // Default data $status = [ @@ -47,10 +80,10 @@ public function getStatus() 'system_message' => trans_choice('cachet.service.major', $totalComponents), 'favicon' => 'favicon-high-alert', ]; - } elseif ($enabledScope->notStatus(1)->count() === 0) { + } elseif (Component::enabled()->authenticated($includePrivate)->notStatus(1)->count() === 0) { // If all our components are ok, do we have any non-fixed incidents? - $incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get()->filter(function ($incident) { - return $incident->status > 0; + $incidents = Incident::orderBy('occurred_at', 'desc')->get()->filter(function ($incident) { + return $incident->status !== Incident::FIXED; }); $incidentCount = $incidents->count(); $unresolvedCount = $incidents->filter(function ($incident) { @@ -64,13 +97,28 @@ public function getStatus() 'favicon' => 'favicon', ]; } - } elseif ($enabledScope->whereIn('status', [2, 3])->count() > 0) { + } elseif (Component::enabled()->authenticated($includePrivate)->whereIn('status', [2, 3])->count() > 0) { $status['favicon'] = 'favicon-medium-alert'; } return $status; } + /** + * Determine if Cachet is allowed to send notifications to users, subscribers or third party tools. + * + * @return bool + */ + public function canNotifySubscribers() + { + $maintenancePeriods = Schedule::inProgress()->count(); + if ($maintenancePeriods === 0) { + return true; + } + + return !$this->config->get('setting.suppress_notifications_in_maintenance'); + } + /** * Get the cachet version. * @@ -80,4 +128,16 @@ public function getVersion() { return CACHET_VERSION; } + + /** + * Get the table prefix. + * + * @return string + */ + public function getTablePrefix() + { + $driver = $this->config->get('database.default'); + + return $this->config->get("database.connections.{$driver}.prefix"); + } } diff --git a/app/Models/Action.php b/app/Models/Action.php new file mode 100644 index 000000000000..be9cfcc1de63 --- /dev/null +++ b/app/Models/Action.php @@ -0,0 +1,78 @@ + + * @author James Brooks + */ +class Action extends Model +{ + use ValidatingTrait; + + /** + * The attributes that should be casted to native types. + * + * @var string[] + */ + protected $casts = [ + 'id' => 'int', + 'class_name' => 'string', + 'user_id' => 'int', + 'username' => 'string', + 'information' => 'string', + 'description' => 'string', + ]; + + /** + * A list of methods protected from mass assignment. + * + * @var string[] + */ + protected $guarded = ['_token', '_method']; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'id' => 'nullable|int|min:1', + 'class_name' => 'required|string', + 'user_id' => 'required|int|min:1', + 'username' => 'required|string', + 'information' => 'nullable|string', + 'description' => 'required|string', + ]; + + /** + * The relations to eager load on every query. + * + * @var string[] + */ + protected $with = ['user']; + + /** + * Get the user relation. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/Component.php b/app/Models/Component.php index d488f9c324fc..08da71576620 100644 --- a/app/Models/Component.php +++ b/app/Models/Component.php @@ -12,6 +12,8 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use CachetHQ\Cachet\Models\Traits\HasMeta; +use CachetHQ\Cachet\Models\Traits\HasTags; use CachetHQ\Cachet\Models\Traits\SearchableTrait; use CachetHQ\Cachet\Models\Traits\SortableTrait; use CachetHQ\Cachet\Presenters\ComponentPresenter; @@ -22,7 +24,12 @@ class Component extends Model implements HasPresenter { - use SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait; + use HasTags; + use HasMeta; + use SearchableTrait; + use SoftDeletes; + use SortableTrait; + use ValidatingTrait; /** * List of attributes that have default values. @@ -35,6 +42,7 @@ class Component extends Model implements HasPresenter 'description' => '', 'link' => '', 'enabled' => true, + 'meta' => null, ]; /** @@ -50,6 +58,7 @@ class Component extends Model implements HasPresenter 'link' => 'string', 'group_id' => 'int', 'enabled' => 'bool', + 'meta' => 'json', 'deleted_at' => 'date', ]; @@ -62,11 +71,11 @@ class Component extends Model implements HasPresenter 'name', 'description', 'status', - 'tags', 'link', 'order', 'group_id', 'enabled', + 'meta', ]; /** @@ -131,16 +140,6 @@ public function incidents() return $this->hasMany(Incident::class, 'component_id', 'id'); } - /** - * Get the tags relation. - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function tags() - { - return $this->belongsToMany(Tag::class); - } - /** * Finds all components by status. * @@ -179,6 +178,23 @@ public function scopeEnabled(Builder $query) return $query->where('enabled', '=', true); } + /** + * Find all components which are within visible groups. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param bool $authenticated + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeAuthenticated(Builder $query, $authenticated) + { + return $query->when(!$authenticated, function (Builder $query) { + return $query->whereDoesntHave('group', function (Builder $query) { + $query->where('visible', ComponentGroup::VISIBLE_AUTHENTICATED); + }); + }); + } + /** * Finds all components which are disabled. * @@ -220,20 +236,6 @@ public function scopeGrouped(Builder $query) ->groupBy('group_id'); } - /** - * Returns all of the tags on this component. - * - * @return string - */ - public function getTagsListAttribute() - { - $tags = $this->tags->map(function ($tag) { - return $tag->name; - }); - - return implode(', ', $tags->toArray()); - } - /** * Get the presenter class. * diff --git a/app/Models/ComponentGroup.php b/app/Models/ComponentGroup.php index f6691f6379ce..f5a8af8ded56 100644 --- a/app/Models/ComponentGroup.php +++ b/app/Models/ComponentGroup.php @@ -20,10 +20,16 @@ use Illuminate\Support\Collection; use McCool\LaravelAutoPresenter\HasPresenter; +/** + * This is the component group model class. + * + * @author James Brooks + */ class ComponentGroup extends Model implements HasPresenter { - use SearchableTrait, SortableTrait, ValidatingTrait; - + use SearchableTrait; + use SortableTrait; + use ValidatingTrait; /** * Viewable only authenticated users. * @@ -76,7 +82,7 @@ class ComponentGroup extends Model implements HasPresenter public $rules = [ 'name' => 'required|string', 'order' => 'required|int', - 'collapsed' => 'required|int', + 'collapsed' => 'required|int|between:0,4', 'visible' => 'required|bool', ]; @@ -120,7 +126,7 @@ class ComponentGroup extends Model implements HasPresenter */ public function components() { - return $this->hasMany(Component::class, 'group_id', 'id')->orderBy('order'); + return $this->hasMany(Component::class, 'group_id', 'id'); } /** @@ -140,7 +146,7 @@ public function incidents() */ public function enabled_components() { - return $this->components()->enabled(); + return $this->components()->enabled()->orderBy('order'); } /** diff --git a/app/Models/Incident.php b/app/Models/Incident.php index 10ff79b133ff..b1ddb58c06a9 100644 --- a/app/Models/Incident.php +++ b/app/Models/Incident.php @@ -12,18 +12,31 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use CachetHQ\Cachet\Models\Traits\HasMeta; +use CachetHQ\Cachet\Models\Traits\HasTags; use CachetHQ\Cachet\Models\Traits\SearchableTrait; use CachetHQ\Cachet\Models\Traits\SortableTrait; use CachetHQ\Cachet\Presenters\IncidentPresenter; -use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use McCool\LaravelAutoPresenter\HasPresenter; +/** + * This is the incident model. + * + * @author James Brooks + * @author Joseph Cohen + * @author Graham Campbell + */ class Incident extends Model implements HasPresenter { - use SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait; + use HasMeta; + use HasTags; + use SearchableTrait; + use SoftDeletes; + use SortableTrait; + use ValidatingTrait; /** * Status for incident being investigated. @@ -62,16 +75,30 @@ class Incident extends Model implements HasPresenter 'is_resolved', ]; + /** + * The model's attributes. + * + * @var string[] + */ + protected $attributes = [ + 'stickied' => false, + 'notifications' => false, + ]; + /** * The attributes that should be casted to native types. * * @var string[] */ protected $casts = [ - 'visible' => 'int', - 'stickied' => 'bool', - 'scheduled_at' => 'date', - 'deleted_at' => 'date', + 'component_id' => 'int', + 'status' => 'int', + 'user_id' => 'int', + 'visible' => 'int', + 'stickied' => 'bool', + 'notifications' => 'bool', + 'occurred_at' => 'datetime', + 'deleted_at' => 'date', ]; /** @@ -80,13 +107,15 @@ class Incident extends Model implements HasPresenter * @var string[] */ protected $fillable = [ + 'user_id', 'component_id', 'name', 'status', 'visible', 'stickied', + 'notifications', 'message', - 'scheduled_at', + 'occurred_at', 'created_at', 'updated_at', ]; @@ -97,12 +126,14 @@ class Incident extends Model implements HasPresenter * @var string[] */ public $rules = [ - 'component_id' => 'nullable|int', - 'name' => 'required|string', - 'status' => 'required|int', - 'visible' => 'required|bool', - 'stickied' => 'required|bool', - 'message' => 'required|string', + 'user_id' => 'nullable|int', + 'component_id' => 'nullable|int', + 'name' => 'required|string', + 'status' => 'required|int', + 'visible' => 'required|bool', + 'stickied' => 'required|bool', + 'notifications' => 'nullable|bool', + 'message' => 'required|string', ]; /** @@ -112,6 +143,7 @@ class Incident extends Model implements HasPresenter */ protected $searchable = [ 'id', + 'user_id', 'component_id', 'name', 'status', @@ -126,11 +158,13 @@ class Incident extends Model implements HasPresenter */ protected $sortable = [ 'id', + 'user_id', 'name', 'status', 'visible', 'stickied', 'message', + 'occurred_at', ]; /** @@ -138,7 +172,10 @@ class Incident extends Model implements HasPresenter * * @var string[] */ - protected $with = ['updates']; + protected $with = [ + 'meta', + 'updates', + ]; /** * Get the component relation. @@ -161,65 +198,37 @@ public function updates() } /** - * Finds all visible incidents. + * Get the user relation. * - * @param \Illuminate\Database\Eloquent\Builder $query - * - * @return \Illuminate\Database\Eloquent\Builder - */ - public function scopeVisible(Builder $query) - { - return $query->where('visible', '=', 1); - } - - /** - * Finds all stickied incidents. - * - * @param \Illuminate\Database\Eloquent\Builder $query - * - * @return \Illuminate\Database\Eloquent\Builder + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ - public function scopeStickied(Builder $query) + public function user() { - return $query->where('stickied', '=', true); + return $this->belongsTo(User::class); } /** - * Finds all scheduled incidents (maintenance). + * Finds all visible incidents. * * @param \Illuminate\Database\Eloquent\Builder $query * * @return \Illuminate\Database\Eloquent\Builder */ - public function scopeScheduled(Builder $query) + public function scopeVisible(Builder $query) { - return $query->where('status', '=', 0)->where('scheduled_at', '>=', Carbon::now()); + return $query->where('visible', '=', 1); } /** - * Finds all non-scheduled incidents. + * Finds all stickied incidents. * * @param \Illuminate\Database\Eloquent\Builder $query * * @return \Illuminate\Database\Eloquent\Builder */ - public function scopeNotScheduled(Builder $query) - { - return $query->where('status', '>', 0)->orWhere(function ($query) { - $query->where('status', '=', 0)->where(function ($query) { - $query->whereNull('scheduled_at')->orWhere('scheduled_at', '<=', Carbon::now()); - }); - }); - } - - /** - * Returns whether the "incident" is scheduled or not. - * - * @return bool - */ - public function getIsScheduledAttribute() + public function scopeStickied(Builder $query) { - return $this->getOriginal('scheduled_at') !== null; + return $query->where('stickied', '=', true); } /** @@ -230,10 +239,10 @@ public function getIsScheduledAttribute() public function getIsResolvedAttribute() { if ($updates = $this->updates->first()) { - return $updates->status === self::FIXED; + return (int) $updates->status === self::FIXED; } - return $this->status === self::FIXED; + return (int) $this->status === self::FIXED; } /** diff --git a/app/Models/IncidentComponent.php b/app/Models/IncidentComponent.php new file mode 100644 index 000000000000..13218d152062 --- /dev/null +++ b/app/Models/IncidentComponent.php @@ -0,0 +1,78 @@ + + */ +class IncidentComponent extends Model +{ + use ValidatingTrait; + + /** + * The attributes that should be casted to native types. + * + * @var string[] + */ + protected $casts = [ + 'incident_id' => 'int', + 'component_id' => 'int', + 'status_id' => 'int', + ]; + + /** + * The fillable properties. + * + * @var string[] + */ + protected $fillable = [ + 'incident_id', + 'component_id', + 'status_id', + ]; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'incident_id' => 'required|int', + 'component_id' => 'required|int', + 'status_id' => 'required|int', + ]; + + /** + * Get the incident relation. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function incident() + { + return $this->belongsTo(Incident::class); + } + + /** + * Get the component relation. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function component() + { + return $this->belongsTo(Component::class); + } +} diff --git a/app/Models/IncidentTemplate.php b/app/Models/IncidentTemplate.php index b5ded4501292..88b833d3bd14 100644 --- a/app/Models/IncidentTemplate.php +++ b/app/Models/IncidentTemplate.php @@ -44,12 +44,13 @@ class IncidentTemplate extends Model */ public $rules = [ 'name' => 'required|string', - 'slug' => 'required|string', 'template' => 'required|string', ]; /** * Overrides the models boot method. + * + * @return void */ public static function boot() { diff --git a/app/Models/IncidentUpdate.php b/app/Models/IncidentUpdate.php index 207e129edc28..0591a248562a 100644 --- a/app/Models/IncidentUpdate.php +++ b/app/Models/IncidentUpdate.php @@ -24,7 +24,8 @@ */ class IncidentUpdate extends Model implements HasPresenter { - use SortableTrait, ValidatingTrait; + use SortableTrait; + use ValidatingTrait; /** * The attributes that should be casted to native types. @@ -83,6 +84,16 @@ public function incident() return $this->belongsTo(Incident::class); } + /** + * Get the user relation. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user() + { + return $this->belongsTo(User::class); + } + /** * Get the presenter class. * diff --git a/app/Models/Invite.php b/app/Models/Invite.php index a77bb4848e6d..292735c58495 100644 --- a/app/Models/Invite.php +++ b/app/Models/Invite.php @@ -12,9 +12,19 @@ namespace CachetHQ\Cachet\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Notifications\Notifiable; +use Illuminate\Support\Str; +/** + * This is the invite class. + * + * @author Joseph Cohen + * @author James Brooks + */ class Invite extends Model { + use Notifiable; + /** * The attributes that should be casted to native types. * @@ -33,6 +43,8 @@ class Invite extends Model /** * Overrides the models boot method. + * + * @return void */ public static function boot() { @@ -40,21 +52,11 @@ public static function boot() self::creating(function ($invite) { if (!$invite->code) { - $invite->code = self::generateInviteCode(); + $invite->code = Str::random(20); } }); } - /** - * Returns an invite code. - * - * @return string - */ - public static function generateInviteCode() - { - return str_random(20); - } - /** * Determines if the invite was claimed. * diff --git a/app/Models/Meta.php b/app/Models/Meta.php new file mode 100644 index 000000000000..6c391d200ee2 --- /dev/null +++ b/app/Models/Meta.php @@ -0,0 +1,80 @@ + + */ +class Meta extends Model +{ + use ValidatingTrait; + + /** + * The attributes that should be casted to native types. + * + * @var string[] + */ + protected $casts = [ + 'id' => 'int', + 'key' => 'string', + 'value' => 'json', + 'meta_id' => 'int', + 'meta_type' => 'string', + ]; + + /** + * The fillable properties. + * + * @var string[] + */ + protected $fillable = [ + 'key', + 'value', + 'meta_id', + 'meta_type', + ]; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'id' => 'nullable|int|min:1', + 'key' => 'required|string', + 'value' => 'nullable', + 'meta_id' => 'required|int', + 'meta_type' => 'required|string', + ]; + + /** + * The table associated with the model. + * + * @var string + */ + protected $table = 'meta'; + + /** + * Get all of the owning meta models. + * + * @return \Illuminate\Database\Eloquent\Relations\MorphTo + */ + public function meta() + { + return $this->morphTo(); + } +} diff --git a/app/Models/Metric.php b/app/Models/Metric.php index 1e46702847bb..c3e6483ecfbd 100644 --- a/app/Models/Metric.php +++ b/app/Models/Metric.php @@ -12,15 +12,20 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use AltThree\Validator\ValidationException; +use CachetHQ\Cachet\Models\Traits\HasMeta; use CachetHQ\Cachet\Models\Traits\SortableTrait; use CachetHQ\Cachet\Presenters\MetricPresenter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\MessageBag; use McCool\LaravelAutoPresenter\HasPresenter; class Metric extends Model implements HasPresenter { - use SortableTrait, ValidatingTrait; + use HasMeta; + use SortableTrait; + use ValidatingTrait; /** * The calculation type of sum. @@ -36,6 +41,27 @@ class Metric extends Model implements HasPresenter */ const CALC_AVG = 1; + /** + * Viewable only authenticated users. + * + * @var int + */ + const VISIBLE_AUTHENTICATED = 0; + + /** + * Viewable by public. + * + * @var int + */ + const VISIBLE_GUEST = 1; + + /** + * Viewable by nobody. + * + * @var int + */ + const VISIBLE_HIDDEN = 2; + /** * The model's attributes. * @@ -50,6 +76,7 @@ class Metric extends Model implements HasPresenter 'default_view' => 1, 'threshold' => 5, 'order' => 0, + 'visible' => 1, ]; /** @@ -66,6 +93,7 @@ class Metric extends Model implements HasPresenter 'default_view' => 'int', 'threshold' => 'int', 'order' => 'int', + 'visible' => 'int', ]; /** @@ -84,6 +112,7 @@ class Metric extends Model implements HasPresenter 'default_view', 'threshold', 'order', + 'visible', ]; /** @@ -98,7 +127,7 @@ class Metric extends Model implements HasPresenter 'default_value' => 'required|numeric', 'places' => 'required|numeric|between:0,4', 'default_view' => 'required|numeric|between:0,3', - 'threshold' => 'required|numeric|between:0,10', + 'visible' => 'required|numeric|between:0,2', ]; /** @@ -113,8 +142,24 @@ class Metric extends Model implements HasPresenter 'default_value', 'calc_type', 'order', + 'visible', ]; + /** + * Overrides the models boot method. + * + * @return void + */ + public static function boot() + { + parent::boot(); + + // When deleting a metric, delete the points too. + self::deleting(function ($model) { + $model->points()->delete(); + }); + } + /** * Get the points relation. * @@ -122,7 +167,7 @@ class Metric extends Model implements HasPresenter */ public function points() { - return $this->hasMany(MetricPoint::class, 'metric_id', 'id'); + return $this->hasMany(MetricPoint::class, 'metric_id', 'id')->latest(); } /** @@ -134,7 +179,19 @@ public function points() */ public function scopeDisplayable(Builder $query) { - return $query->where('display_chart', '=', true); + return $query->where('display_chart', '=', true)->where('visible', '<>', self::VISIBLE_HIDDEN); + } + + /** + * Finds all metrics which are visible to public. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeVisible(Builder $query) + { + return $query->where('visible', '=', self::VISIBLE_GUEST); } /** @@ -147,6 +204,26 @@ public function getShouldDisplayAttribute() return $this->display_chart; } + /** + * Validate the model before save. + * + * @throws \AltThree\Validator\ValidationException + * + * @return void + */ + public function validate() + { + $messages = []; + + if (60 % $this->threshold !== 0) { + $messages[] = 'Threshold must divide by 60.'; + } + + if ($messages) { + throw new ValidationException(new MessageBag($messages)); + } + } + /** * Get the presenter class. * diff --git a/app/Models/MetricPoint.php b/app/Models/MetricPoint.php index db0daf37d9a3..6e64940036ab 100644 --- a/app/Models/MetricPoint.php +++ b/app/Models/MetricPoint.php @@ -13,13 +13,31 @@ use AltThree\Validator\ValidatingTrait; use CachetHQ\Cachet\Presenters\MetricPointPresenter; +use Carbon\Carbon; +use DateTime; use Illuminate\Database\Eloquent\Model; use McCool\LaravelAutoPresenter\HasPresenter; +/** + * This is the metric point model class. + * + * @author James Brooks + * @author Joseph Cohen + * @author Graham Campbell + */ class MetricPoint extends Model implements HasPresenter { use ValidatingTrait; + /** + * The accessors to append to the model's array form. + * + * @var string[] + */ + protected $appends = [ + 'calculated_value', + ]; + /** * The model's attributes. * @@ -73,21 +91,40 @@ public function metric() } /** - * Override the value attribute. + * Show the actual calculated value; as per (value * counter). * - * @param mixed $value + * @return int + */ + public function getCalculatedValueAttribute() + { + return $this->value * $this->counter; + } + + /** + * Round the created at value into intervals of 30 seconds. * - * @return float + * @param string $createdAt + * + * @return string|void */ - public function getActiveValueAttribute($value) + public function setCreatedAtAttribute($createdAt) { - if ($this->metric->calc_type === Metric::CALC_SUM) { - return round((float) $value * $this->counter, $this->metric->places); - } elseif ($this->metric->calc_type === Metric::CALC_AVG) { - return round((float) $value * $this->counter, $this->metric->places); + if (!$createdAt) { + return; } - return round((float) $value, $this->metric->places); + if (!$createdAt instanceof DateTime) { + $createdAt = Carbon::parse($createdAt); + } + + $timestamp = $createdAt->format('U'); + $timestamp = 30 * round($timestamp / 30); + + $date = Carbon::createFromFormat('U', $timestamp)->toDateTimeString(); + + $this->attributes['created_at'] = $date; + + return $date; } /** diff --git a/app/Models/Schedule.php b/app/Models/Schedule.php new file mode 100644 index 000000000000..93a7e3bbdf05 --- /dev/null +++ b/app/Models/Schedule.php @@ -0,0 +1,219 @@ + self::UPCOMING, + 'completed_at' => null, + ]; + + /** + * The attributes that should be casted to native types. + * + * @var string[] + */ + protected $casts = [ + 'name' => 'string', + 'message' => 'string', + 'status' => 'int', + 'scheduled_at' => 'datetime', + 'completed_at' => 'datetime', + ]; + + /** + * The fillable properties. + * + * @var string[] + */ + protected $fillable = [ + 'name', + 'message', + 'status', + 'scheduled_at', + 'completed_at', + 'created_at', + 'updated_at', + ]; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'name' => 'required|string', + 'message' => 'nullable|string', + 'status' => 'required|int|between:0,2', + ]; + + /** + * The searchable fields. + * + * @var string[] + */ + protected $searchable = [ + 'id', + 'name', + 'status', + ]; + + /** + * The sortable fields. + * + * @var string[] + */ + protected $sortable = [ + 'id', + 'name', + 'status', + 'scheduled_at', + 'completed_at', + 'created_at', + 'updated_at', + ]; + + /** + * The relations to eager load on every query. + * + * @var string[] + */ + protected $with = ['components']; + + /** + * Get the components relation. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function components() + { + return $this->hasMany(ScheduleComponent::class); + } + + /** + * Scope schedules that are uncompleted. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeUncompleted(Builder $query) + { + return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where(function (Builder $query) { + return $query->whereNull('completed_at'); + }); + } + + /** + * Scope schedules that are in progress. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeInProgress(Builder $query) + { + return $query->where('scheduled_at', '<=', Carbon::now())->where('status', '<>', self::COMPLETE)->where(function ($query) { + $query->whereNull('completed_at'); + }); + } + + /** + * Scopes schedules to those in the future. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeScheduledInFuture($query) + { + return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where('scheduled_at', '>=', Carbon::now()); + } + + /** + * Scopes schedules to those scheduled in the past. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeScheduledInPast($query) + { + return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where('scheduled_at', '<=', Carbon::now()); + } + + /** + * Scopes schedules to those completed in the past. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeCompletedInPast($query) + { + return $query->where('status', '=', self::COMPLETE)->where('completed_at', '<=', Carbon::now()); + } + + /** + * Get the presenter class. + * + * @return string + */ + public function getPresenterClass() + { + return SchedulePresenter::class; + } +} diff --git a/app/Models/ScheduleComponent.php b/app/Models/ScheduleComponent.php new file mode 100644 index 000000000000..a77abcd27810 --- /dev/null +++ b/app/Models/ScheduleComponent.php @@ -0,0 +1,73 @@ + 'int', + 'component_id' => 'int', + 'component_status' => 'int', + ]; + + /** + * The fillable properties. + * + * @var string[] + */ + protected $fillable = [ + 'schedule_id', + 'component_id', + 'component_status', + ]; + + /** + * The validation rules. + * + * @var string[] + */ + public $rules = [ + 'schedule_id' => 'required|int', + 'component_id' => 'required|int', + 'component_status' => 'required|int', + ]; + + /** + * Get the schedule relation. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function schedule() + { + return $this->belongsTo(Schedule::class); + } + + /** + * Get the component relation. + * + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ + public function component() + { + return $this->hasOne(Component::class); + } +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 0ea02148e129..54ea2b77a139 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -15,6 +15,13 @@ class Setting extends Model { + /** + * List of attributes that have default values. + * + * @var string[] + */ + protected $attributes = ['value' => '']; + /** * The attributes that should be casted to native types. * @@ -31,11 +38,4 @@ class Setting extends Model * @var string[] */ protected $fillable = ['name', 'value']; - - /** - * List of attributes that have default values. - * - * @var string[] - */ - protected $attributes = ['value' => '']; } diff --git a/app/Models/Subscriber.php b/app/Models/Subscriber.php index b2ff5391af59..e10a093b16a1 100644 --- a/app/Models/Subscriber.php +++ b/app/Models/Subscriber.php @@ -12,13 +12,25 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use CachetHQ\Cachet\Models\Traits\HasMeta; use CachetHQ\Cachet\Presenters\SubscriberPresenter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use Illuminate\Notifications\Notifiable; +use Illuminate\Support\Str; use McCool\LaravelAutoPresenter\HasPresenter; +/** + * This is the subscriber model. + * + * @author Joseph Cohen + * @author James Brooks + * @author Graham Campbell + */ class Subscriber extends Model implements HasPresenter { + use HasMeta; + use Notifiable; use ValidatingTrait; /** @@ -27,10 +39,12 @@ class Subscriber extends Model implements HasPresenter * @var string[] */ protected $casts = [ - 'email' => 'string', - 'verify_code' => 'string', - 'verified_at' => 'date', - 'global' => 'bool', + 'email' => 'string', + 'phone_number' => 'string', + 'slack_webhook_url' => 'string', + 'verify_code' => 'string', + 'verified_at' => 'date', + 'global' => 'bool', ]; /** @@ -38,7 +52,13 @@ class Subscriber extends Model implements HasPresenter * * @var string[] */ - protected $fillable = ['email']; + protected $fillable = [ + 'email', + 'phone_number', + 'slack_webhook_url', + 'verified_at', + 'global', + ]; /** * The validation rules. @@ -46,7 +66,9 @@ class Subscriber extends Model implements HasPresenter * @var string[] */ public $rules = [ - 'email' => 'required|email', + 'email' => 'nullable|email', + 'phone_number' => 'nullable|string', + 'slack_webhook_url' => 'nullable|url', ]; /** @@ -58,6 +80,8 @@ class Subscriber extends Model implements HasPresenter /** * Overrides the models boot method. + * + * @return void */ public static function boot() { @@ -136,7 +160,27 @@ public function getIsVerifiedAttribute() */ public static function generateVerifyCode() { - return str_random(42); + return Str::random(42); + } + + /** + * Route notifications for the Nexmo channel. + * + * @return string + */ + public function routeNotificationForNexmo() + { + return $this->phone_number; + } + + /** + * Route notifications for the Slack channel. + * + * @return string + */ + public function routeNotificationForSlack() + { + return $this->slack_webhook_url; } /** diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 3c85dfc341bd..022ceb8c528f 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -34,6 +34,8 @@ class Tag extends Model /** * Overrides the models boot method. + * + * @return void */ public static function boot() { @@ -53,4 +55,31 @@ public function components() { return $this->belongsToMany(Component::class); } + + /** + * @param array|\ArrayAccess $values + * + * @return \CachetHQ\Cachet\Models\Tag|static + */ + public static function findOrCreate($values) + { + $tags = collect($values)->map(function ($value) { + if ($value instanceof self) { + return $value; + } + + $tag = static::where('name', '=', $value)->first(); + + if (!$tag instanceof self) { + $tag = static::create([ + 'name' => $value, + 'slug' => Str::slug($value), + ]); + } + + return $tag; + }); + + return is_string($values) ? $tags->first() : $tags; + } } diff --git a/app/Models/Traits/HasMeta.php b/app/Models/Traits/HasMeta.php new file mode 100644 index 000000000000..3571cf0a7e65 --- /dev/null +++ b/app/Models/Traits/HasMeta.php @@ -0,0 +1,32 @@ + + */ +trait HasMeta +{ + /** + * Get the meta relation. + * + * @return \Illuminate\Database\Eloquent\Relations\MorphMany + */ + public function meta() + { + return $this->morphMany(Meta::class, 'meta'); + } +} diff --git a/app/Models/Traits/HasTags.php b/app/Models/Traits/HasTags.php new file mode 100644 index 000000000000..b707e050ff79 --- /dev/null +++ b/app/Models/Traits/HasTags.php @@ -0,0 +1,196 @@ + + */ +trait HasTags +{ + /** + * @var array + */ + protected $queuedTags = []; + + /** + * Boot the trait. + * + * @return void + */ + public static function bootHasTags() + { + static::created(function (Model $taggableModel) { + if (count($taggableModel->queuedTags) > 0) { + $taggableModel->attachTags($taggableModel->queuedTags); + + $taggableModel->queuedTags = []; + } + }); + + static::deleted(function (Model $deletedModel) { + $tags = $deletedModel->tags()->get(); + + $deletedModel->detachTags($tags); + }); + } + + /** + * Get the tags relation. + * + * @return \Illuminate\Database\Eloquent\Relations\MorphToMany + */ + public function tags() + { + return $this->morphToMany(Tag::class, 'taggable'); + } + + /** + * @param string|array|\ArrayAccess|\CachetHQ\Cachet\Models\Tag $tags + */ + public function setTagsAttribute($tags) + { + if (!$this->exists) { + $this->queuedTags = $tags; + + return; + } + + $this->attachTags($tags); + } + + /** + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array|\ArrayAccess $tags + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeWithAllTags(Builder $query, $tags) + { + $tags = static::convertToTags($tags); + + $tags->each(function ($tag) use ($query) { + $query->whereHas('tags', function (Builder $query) use ($tag) { + return $query->where('tags.id', $tag ? $tag->id : 0); + }); + }); + + return $query; + } + + /** + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array|\ArrayAccess $tags + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeWithAnyTags(Builder $query, $tags) + { + $tags = static::convertToTags($tags); + + return $query->whereHas('tags', function (Builder $query) use ($tags) { + $tagIds = collect($tags)->pluck('id'); + + $query->whereIn('tags.id', $tagIds); + }); + } + + /** + * @param array|\ArrayAccess|\CachetHQ\Cachet\Models\Tag $tags + * + * @return $this + */ + public function attachTags($tags) + { + $tags = collect(Tag::findOrCreate($tags)); + + $this->tags()->syncWithoutDetaching($tags->pluck('id')->toArray()); + + return $this; + } + + /** + * @param string|\CachetHQ\Cachet\Models\Tag $tag + * + * @return $this + */ + public function attachTag($tag) + { + return $this->attachTags([$tag]); + } + + /** + * @param array|\ArrayAccess $tags + * + * @return $this + */ + public function detachTags($tags) + { + $tags = static::convertToTags($tags); + + collect($tags) + ->filter() + ->each(function (Tag $tag) { + $this->tags()->detach($tag); + }); + + return $this; + } + + /** + * @param string|\CachetHQ\Cachet\Models\Tag $tag + * + * @return $this + */ + public function detachTag($tag) + { + return $this->detachTags([$tag]); + } + + /** + * @param array|\ArrayAccess $tags + * + * @return $this + */ + public function syncTags($tags) + { + $tags = collect(Tag::findOrCreate($tags)); + + $this->tags()->sync($tags->pluck('id')->toArray()); + + return $this; + } + + /** + * Convert a list of tags into a collection of \CachetHQ\Cachet\Models\Tag. + * + * @param array|\ArrayAccess $values + * + * @return \Illuminate\Support\Collection + */ + protected static function convertToTags($values) + { + return collect($values)->map(function ($value) { + if ($value instanceof Tag) { + return $value; + } + + return Tag::where('slug', '=', $value)->first(); + }); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index d2807bac5277..7e568bd05108 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -17,6 +17,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Str; /** * This is the user model. @@ -25,8 +26,8 @@ */ class User extends Authenticatable { - use Notifiable, ValidatingTrait; - + use Notifiable; + use ValidatingTrait; /** * The admin level of user. * @@ -110,6 +111,8 @@ class User extends Authenticatable /** * Overrides the models boot method. + * + * @return void */ public static function boot() { @@ -160,18 +163,6 @@ public function setPasswordAttribute($password) return $this; } - /** - * Returns a Gravatar URL for the users email address. - * - * @param int $size - * - * @return string - */ - public function getGravatarAttribute($size = 200) - { - return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5(strtolower($this->email)), $size); - } - /** * Find by api_key, or throw an exception. * @@ -196,7 +187,7 @@ public static function findByApiToken($token, $columns = ['*']) */ public static function generateApiKey() { - return str_random(20); + return Str::random(20); } /** diff --git a/app/Notifications/Component/ComponentStatusChangedNotification.php b/app/Notifications/Component/ComponentStatusChangedNotification.php new file mode 100644 index 000000000000..02d02d4ac3a4 --- /dev/null +++ b/app/Notifications/Component/ComponentStatusChangedNotification.php @@ -0,0 +1,155 @@ + + */ +class ComponentStatusChangedNotification extends Notification +{ + use Queueable; + + /** + * The component that changed. + * + * @var \CachetHQ\Cachet\Models\Component + */ + protected $component; + + /** + * The component status we're now at. + * + * @var int + */ + protected $status; + + /** + * Create a new notification instance. + * + * @param \CachetHQ\Cachet\Models\Component $component + * @param int $status + * + * @return void + */ + public function __construct(Component $component, $status) + { + $this->component = AutoPresenter::decorate($component); + $this->status = $status; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail', 'nexmo', 'slack']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $content = trans('notifications.component.status_update.mail.content', [ + 'name' => $this->component->name, + 'old_status' => $this->component->human_status, + 'new_status' => trans("cachet.components.status.{$this->status}"), + ]); + + return (new MailMessage()) + ->subject(trans('notifications.component.status_update.mail.subject')) + ->markdown('notifications.component.update', [ + 'componentName' => $this->component->name, + 'content' => $content, + 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), + 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), + 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), + 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), + ]); + } + + /** + * Get the Nexmo / SMS representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\NexmoMessage + */ + public function toNexmo($notifiable) + { + $content = trans('notifications.component.status_update.sms.content', [ + 'name' => $this->component->name, + 'old_status' => $this->component->human_status, + 'new_status' => trans("cachet.components.status.{$this->status}"), + ]); + + return (new NexmoMessage())->content($content); + } + + /** + * Get the Slack representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\SlackMessage + */ + public function toSlack($notifiable) + { + $content = trans('notifications.component.status_update.slack.content', [ + 'name' => $this->component->name, + 'old_status' => $this->component->human_status, + 'new_status' => trans("cachet.components.status.{$this->status}"), + ]); + + $status = 'info'; + + if ($this->status <= 1) { + $status = 'success'; + } elseif ($this->status === 2) { + $status = 'warning'; + } elseif ($this->status >= 3) { + $status = 'error'; + } + + return (new SlackMessage()) + ->$status() + ->content(trans('notifications.component.status_update.slack.title')) + ->attachment(function ($attachment) use ($content, $notifiable) { + $attachment->title($content, cachet_route('status-page')) + ->fields(array_filter([ + 'Component' => $this->component->name, + 'Old Status' => $this->component->human_status, + 'New Status' => trans("cachet.components.status.{$this->status}"), + 'Link' => $this->component->link, + ])) + ->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)])); + }); + } +} diff --git a/app/Notifications/Incident/NewIncidentNotification.php b/app/Notifications/Incident/NewIncidentNotification.php new file mode 100644 index 000000000000..ac56c9dea95a --- /dev/null +++ b/app/Notifications/Incident/NewIncidentNotification.php @@ -0,0 +1,139 @@ + + */ +class NewIncidentNotification extends Notification +{ + use Queueable; + + /** + * The incident. + * + * @var \CachetHQ\Cachet\Models\Incident + */ + protected $incident; + + /** + * Create a new notification instance. + * + * @param \CachetHQ\Cachet\Models\Incident $incident + * + * @return void + */ + public function __construct(Incident $incident) + { + $this->incident = AutoPresenter::decorate($incident); + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail', 'nexmo', 'slack']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $content = trans('notifications.incident.new.mail.content', [ + 'name' => $this->incident->name, + ]); + + return (new MailMessage()) + ->subject(trans('notifications.incident.new.mail.subject')) + ->markdown('notifications.incident.new', [ + 'incident' => $this->incident, + 'content' => $content, + 'actionText' => trans('notifications.incident.new.mail.action'), + 'actionUrl' => cachet_route('incident', [$this->incident]), + 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), + 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), + 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), + 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), + ]); + } + + /** + * Get the Nexmo / SMS representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\NexmoMessage + */ + public function toNexmo($notifiable) + { + return (new NexmoMessage())->content(trans('notifications.incident.new.sms.content', [ + 'name' => $this->incident->name, + ])); + } + + /** + * Get the Slack representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\SlackMessage + */ + public function toSlack($notifiable) + { + $content = trans('notifications.incident.new.slack.content', [ + 'app_name' => Config::get('setting.app_name'), + ]); + + $status = 'info'; + + if ($this->incident->status === Incident::FIXED) { + $status = 'success'; + } elseif ($this->incident->status === Incident::WATCHED) { + $status = 'warning'; + } else { + $status = 'error'; + } + + return (new SlackMessage()) + ->$status() + ->content($content) + ->attachment(function ($attachment) { + $attachment->title(trans('notifications.incident.new.slack.title', ['name' => $this->incident->name])) + ->timestamp($this->incident->getWrappedObject()->occurred_at) + ->fields(array_filter([ + 'ID' => "#{$this->incident->id}", + 'Link' => $this->incident->permalink, + ])); + }); + } +} diff --git a/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php b/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php new file mode 100644 index 000000000000..6c88b40370cb --- /dev/null +++ b/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php @@ -0,0 +1,150 @@ + + */ +class IncidentUpdatedNotification extends Notification +{ + use Queueable; + + /** + * The incident update. + * + * @var \CachetHQ\Cachet\Models\IncidentUpdate + */ + protected $update; + + /** + * Create a new notification instance. + * + * @param \CachetHQ\Cachet\Models\IncidentUpdate $update + * + * @return void + */ + public function __construct(IncidentUpdate $update) + { + $this->update = AutoPresenter::decorate($update); + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail', 'nexmo', 'slack']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $content = trans('notifications.incident.update.mail.content', [ + 'name' => $this->update->incident->name, + 'time' => $this->update->created_at_diff, + ]); + + return (new MailMessage()) + ->subject(trans('notifications.incident.update.mail.subject')) + ->markdown('notifications.incident.update', [ + 'incident' => $this->update->incident, + 'update' => $this->update, + 'content' => $content, + 'actionText' => trans('notifications.incident.new.mail.action'), + 'actionUrl' => cachet_route('incident', [$this->update->incident]), + 'incidentName' => $this->update->incident->name, + 'newStatus' => $this->update->human_status, + 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), + 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), + 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), + 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), + ]); + } + + /** + * Get the Nexmo / SMS representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\NexmoMessage + */ + public function toNexmo($notifiable) + { + $content = trans('notifications.incident.update.sms.content', [ + 'name' => $this->update->incident->name, + ]); + + return (new NexmoMessage())->content($content); + } + + /** + * Get the Slack representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\SlackMessage + */ + public function toSlack($notifiable) + { + $content = trans('notifications.incident.update.slack.content', [ + 'name' => $this->update->incident->name, + 'new_status' => $this->update->human_status, + ]); + + $status = 'info'; + + if ($this->update->status === Incident::FIXED) { + $status = 'success'; + } elseif ($this->update->status === Incident::WATCHED) { + $status = 'warning'; + } else { + $status = 'error'; + } + + return (new SlackMessage()) + ->$status() + ->content($content) + ->attachment(function ($attachment) use ($notifiable) { + $attachment->title(trans('notifications.incident.update.slack.title', [ + 'name' => $this->update->incident->name, + 'new_status' => $this->update->human_status, + ])) + ->timestamp($this->update->getWrappedObject()->created_at) + ->fields(array_filter([ + 'ID' => "#{$this->update->id}", + 'Link' => $this->update->permalink, + ])) + ->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)])); + }); + } +} diff --git a/app/Notifications/Schedule/NewScheduleNotification.php b/app/Notifications/Schedule/NewScheduleNotification.php new file mode 100644 index 000000000000..3b04bc679f6c --- /dev/null +++ b/app/Notifications/Schedule/NewScheduleNotification.php @@ -0,0 +1,130 @@ + + */ +class NewScheduleNotification extends Notification implements ShouldQueue +{ + use Queueable; + + /** + * The schedule. + * + * @var \CachetHQ\Cachet\Models\Schedule + */ + protected $schedule; + + /** + * Create a new notification instance. + * + * @param \CachetHQ\Cachet\Models\Schedule $schedule + * + * @return void + */ + public function __construct(Schedule $schedule) + { + $this->schedule = AutoPresenter::decorate($schedule); + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail', 'nexmo', 'slack']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $content = trans('notifications.schedule.new.mail.content', [ + 'name' => $this->schedule->name, + 'date' => $this->schedule->scheduled_at_formatted, + ]); + + return (new MailMessage()) + ->subject(trans('notifications.schedule.new.mail.subject')) + ->markdown('notifications.schedule.new', [ + 'content' => $content, + 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), + 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), + 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), + 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), + ]); + } + + /** + * Get the Nexmo / SMS representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\NexmoMessage + */ + public function toNexmo($notifiable) + { + $content = trans('notifications.schedule.new.sms.content', [ + 'name' => $this->schedule->name, + 'date' => $this->schedule->scheduled_at_formatted, + ]); + + return (new NexmoMessage())->content($content); + } + + /** + * Get the Slack representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\SlackMessage + */ + public function toSlack($notifiable) + { + $content = trans('notifications.schedule.new.slack.content', [ + 'name' => $this->schedule->name, + 'date' => $this->schedule->scheduled_at_formatted, + ]); + + return (new SlackMessage()) + ->content(trans('notifications.schedule.new.slack.title')) + ->attachment(function ($attachment) use ($content) { + $attachment->title($content) + ->timestamp($this->schedule->getWrappedObject()->scheduled_at) + ->fields(array_filter([ + 'ID' => "#{$this->schedule->id}", + 'Status' => $this->schedule->human_status, + ])); + }); + } +} diff --git a/app/Notifications/Subscriber/ManageSubscriptionNotification.php b/app/Notifications/Subscriber/ManageSubscriptionNotification.php new file mode 100644 index 000000000000..e8f883980f69 --- /dev/null +++ b/app/Notifications/Subscriber/ManageSubscriptionNotification.php @@ -0,0 +1,52 @@ + $notifiable->verify_code]); + + return (new MailMessage()) + ->subject(trans('notifications.subscriber.manage.mail.subject')) + ->greeting(trans('notifications.subscriber.manage.mail.title', ['app_name' => setting('app_name')])) + ->action(trans('notifications.subscriber.manage.mail.action'), $route) + ->line(trans('notifications.subscriber.manage.mail.content', ['app_name' => setting('app_name')])); + } +} diff --git a/app/Notifications/Subscriber/VerifySubscriptionNotification.php b/app/Notifications/Subscriber/VerifySubscriptionNotification.php new file mode 100644 index 000000000000..76da5dab2368 --- /dev/null +++ b/app/Notifications/Subscriber/VerifySubscriptionNotification.php @@ -0,0 +1,58 @@ + + */ +class VerifySubscriptionNotification extends Notification +{ + use Queueable; + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $route = URL::signedRoute(cachet_route_generator('subscribe.verify'), ['code' => $notifiable->verify_code]); + + return (new MailMessage()) + ->subject(trans('notifications.subscriber.verify.mail.subject')) + ->greeting(trans('notifications.subscriber.verify.mail.title', ['app_name' => Config::get('setting.app_name')])) + ->action(trans('notifications.subscriber.verify.mail.action'), $route) + ->line(trans('notifications.subscriber.verify.mail.content', ['app_name' => Config::get('setting.app_name')])); + } +} diff --git a/app/Notifications/System/SystemTestNotification.php b/app/Notifications/System/SystemTestNotification.php new file mode 100644 index 000000000000..941ff8b9af0a --- /dev/null +++ b/app/Notifications/System/SystemTestNotification.php @@ -0,0 +1,53 @@ + + */ +class SystemTestNotification extends Notification +{ + use Queueable; + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage()) + ->subject(trans('notifications.system.test.mail.subject')) + ->greeting(trans('notifications.system.test.mail.title')) + ->line(trans('notifications.system.test.mail.content')); + } +} diff --git a/app/Notifications/User/InviteUserNotification.php b/app/Notifications/User/InviteUserNotification.php new file mode 100644 index 000000000000..0ebb906e3ce4 --- /dev/null +++ b/app/Notifications/User/InviteUserNotification.php @@ -0,0 +1,55 @@ + + */ +class InviteUserNotification extends Notification +{ + use Queueable; + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * + * @return string[] + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage()) + ->subject(trans('notifications.user.invite.mail.subject')) + ->greeting(trans('notifications.user.invite.mail.title', ['app_name' => Config::get('setting.app_name')])) + ->action(trans('notifications.user.invite.mail.action'), cachet_route('signup.invite', [$notifiable->code])) + ->line(trans('notifications.user.invite.mail.content', ['app_name' => Config::get('setting.app_name')])); + } +} diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index 8cfb857520ab..456831a4ddd7 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -20,6 +20,13 @@ class ComponentGroupPresenter extends BasePresenter implements Arrayable { use TimestampsTrait; + /** + * Flag for the enabled_components_lowest function. + * + * @var bool + */ + protected $enabledComponentsLowest = false; + /** * Returns the lowest component status. * @@ -27,7 +34,7 @@ class ComponentGroupPresenter extends BasePresenter implements Arrayable */ public function lowest_status() { - if ($component = $this->wrappedObject->enabled_components_lowest()->first()) { + if ($component = $this->enabled_components_lowest()) { return AutoPresenter::decorate($component)->status; } } @@ -39,7 +46,7 @@ public function lowest_status() */ public function lowest_human_status() { - if ($component = $this->wrappedObject->enabled_components_lowest()->first()) { + if ($component = $this->enabled_components_lowest()) { return AutoPresenter::decorate($component)->human_status; } } @@ -51,11 +58,25 @@ public function lowest_human_status() */ public function lowest_status_color() { - if ($component = $this->wrappedObject->enabled_components_lowest()->first()) { + if ($component = $this->enabled_components_lowest()) { return AutoPresenter::decorate($component)->status_color; } } + /** + * Return the enabled components from the wrapped object, and cache it if need be. + * + * @return bool + */ + public function enabled_components_lowest() + { + if (is_bool($this->enabledComponentsLowest)) { + $this->enabledComponentsLowest = $this->wrappedObject->enabled_components_lowest()->first(); + } + + return $this->enabledComponentsLowest; + } + /** * Determine the class for collapsed/uncollapsed groups. * @@ -81,7 +102,7 @@ public function is_collapsed() return $this->wrappedObject->components->filter(function ($component) { return $component->status > 1; - })->count() === 0; + })->isEmpty(); } /** diff --git a/app/Presenters/ComponentPresenter.php b/app/Presenters/ComponentPresenter.php index 99fbbf5d1d6f..07a2458ea5cb 100644 --- a/app/Presenters/ComponentPresenter.php +++ b/app/Presenters/ComponentPresenter.php @@ -11,10 +11,9 @@ namespace CachetHQ\Cachet\Presenters; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Presenters\Traits\TimestampsTrait; +use CachetHQ\Cachet\Services\Dates\DateFactory; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Facades\Config; use McCool\LaravelAutoPresenter\BasePresenter; class ComponentPresenter extends BasePresenter implements Arrayable @@ -29,16 +28,11 @@ class ComponentPresenter extends BasePresenter implements Arrayable public function status_color() { switch ($this->wrappedObject->status) { - case 0: - return 'greys'; - case 1: - return 'greens'; - case 2: - return 'blues'; - case 3: - return 'yellows'; - case 4: - return 'reds'; + case 0: return 'greys'; + case 1: return 'greens'; + case 2: return 'blues'; + case 3: return 'yellows'; + case 4: return 'reds'; } } @@ -69,7 +63,7 @@ public function tags() */ public function updated_at_formatted() { - return ucfirst(app(DateFactory::class)->make($this->wrappedObject->updated_at)->format(Config::get('setting.incident_date_format', 'l jS F Y H:i:s'))); + return ucfirst(app(DateFactory::class)->make($this->wrappedObject->updated_at)->format($this->incidentDateFormat())); } /** diff --git a/app/Presenters/IncidentPresenter.php b/app/Presenters/IncidentPresenter.php index a552f5784033..0a8e8a65df98 100644 --- a/app/Presenters/IncidentPresenter.php +++ b/app/Presenters/IncidentPresenter.php @@ -11,11 +11,11 @@ namespace CachetHQ\Cachet\Presenters; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Presenters\Traits\TimestampsTrait; +use CachetHQ\Cachet\Services\Dates\DateFactory; use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Facades\Config; use McCool\LaravelAutoPresenter\BasePresenter; class IncidentPresenter extends BasePresenter implements Arrayable @@ -23,7 +23,21 @@ class IncidentPresenter extends BasePresenter implements Arrayable use TimestampsTrait; /** - * Inciden icon lookup. + * The date factory instance. + * + * @var \CachetHQ\Cachet\Services\Dates\DateFactory + */ + protected $dates; + + /** + * Flag for the latest function. + * + * @var bool + */ + protected $latest = false; + + /** + * Incident icon lookup. * * @var array */ @@ -36,53 +50,56 @@ class IncidentPresenter extends BasePresenter implements Arrayable ]; /** - * Renders the message from Markdown into HTML. + * Create a new presenter. * - * @return string + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * @param \CachetHQ\Cachet\Models\Incident $resource + * + * @return void */ - public function formattedMessage() + public function __construct(DateFactory $dates, Incident $resource) { - return Markdown::convertToHtml($this->wrappedObject->message); + $this->dates = $dates; } /** - * Return the raw text of the message, even without Markdown. + * Renders the message from Markdown into HTML. * * @return string */ - public function raw_message() + public function formatted_message() { - return strip_tags($this->formattedMessage()); + return Markdown::convertToHtml($this->wrappedObject->message); } /** - * Present diff for humans date time. + * Return the raw text of the message, even without Markdown. * * @return string */ - public function created_at_diff() + public function raw_message() { - return app(DateFactory::class)->make($this->wrappedObject->created_at)->diffForHumans(); + return strip_tags($this->formatted_message()); } /** - * Present formatted date time. + * Present formatted occurred_at date time. * * @return string */ - public function created_at_formatted() + public function occurred_at() { - return ucfirst(app(DateFactory::class)->make($this->wrappedObject->created_at)->format(Config::get('setting.incident_date_format', 'l jS F Y H:i:s'))); + return $this->dates->make($this->wrappedObject->occurred_at)->toDateTimeString(); } /** - * Formats the created_at time ready to be used by bootstrap-datetimepicker. + * Present diff for humans date time. * * @return string */ - public function created_at_datetimepicker() + public function occurred_at_diff() { - return app(DateFactory::class)->make($this->wrappedObject->created_at)->format('d/m/Y H:i'); + return $this->dates->make($this->wrappedObject->occurred_at)->diffForHumans(); } /** @@ -90,39 +107,39 @@ public function created_at_datetimepicker() * * @return string */ - public function created_at_iso() + public function occurred_at_formatted() { - return app(DateFactory::class)->make($this->wrappedObject->created_at)->toISO8601String(); + return ucfirst($this->dates->make($this->wrappedObject->occurred_at)->format($this->incidentDateFormat())); } /** - * Present formatted date time. + * Formats the occurred_at time ready to be used by bootstrap-datetimepicker. * * @return string */ - public function scheduled_at() + public function occurred_at_datetimepicker() { - return app(DateFactory::class)->make($this->wrappedObject->scheduled_at)->toDateTimeString(); + return $this->dates->make($this->wrappedObject->occurred_at)->format('Y-m-d H:i'); } /** - * Present diff for humans date time. + * Present formatted date time. * * @return string */ - public function scheduled_at_diff() + public function occurred_at_iso() { - return app(DateFactory::class)->make($this->wrappedObject->scheduled_at)->diffForHumans(); + return $this->dates->make($this->wrappedObject->occurred_at)->toISO8601String(); } /** - * Present formatted date time. + * Present diff for humans date time. * * @return string */ - public function scheduled_at_formatted() + public function created_at_diff() { - return ucfirst(app(DateFactory::class)->make($this->wrappedObject->scheduled_at)->format(Config::get('setting.incident_date_format', 'l jS F Y H:i:s'))); + return $this->dates->make($this->wrappedObject->created_at)->diffForHumans(); } /** @@ -130,19 +147,19 @@ public function scheduled_at_formatted() * * @return string */ - public function scheduled_at_iso() + public function created_at_formatted() { - return app(DateFactory::class)->make($this->wrappedObject->scheduled_at)->toISO8601String(); + return ucfirst($this->dates->make($this->wrappedObject->created_at)->format($this->incidentDateFormat())); } /** - * Formats the scheduled_at time ready to be used by bootstrap-datetimepicker. + * Present formatted date time. * * @return string */ - public function scheduled_at_datetimepicker() + public function created_at_iso() { - return app(DateFactory::class)->make($this->wrappedObject->scheduled_at)->format('d/m/Y H:i'); + return $this->dates->make($this->wrappedObject->created_at)->toISO8601String(); } /** @@ -152,11 +169,7 @@ public function scheduled_at_datetimepicker() */ public function timestamp_formatted() { - if ($this->wrappedObject->is_scheduled) { - return $this->scheduled_at_formatted; - } - - return $this->created_at_formatted; + return $this->occurred_at_formatted; } /** @@ -166,11 +179,7 @@ public function timestamp_formatted() */ public function timestamp_iso() { - if ($this->wrappedObject->is_scheduled) { - return $this->scheduled_at_iso; - } - - return $this->created_at_iso; + return $this->occurred_at_iso; } /** @@ -246,9 +255,11 @@ public function latest_icon() */ public function latest() { - if ($update = $this->wrappedObject->updates()->orderBy('created_at', 'desc')->first()) { - return $update; + if (is_bool($this->latest)) { + $this->latest = $this->wrappedObject->updates()->first(); } + + return $this->latest; } /** @@ -269,12 +280,22 @@ public function permalink() public function duration() { if ($update = $this->latest()) { - return $this->wrappedObject->created_at->diffInSeconds($update->created_at); + return $this->wrappedObject->created_at->diffInSeconds($update->occurred_at); } return 0; } + /** + * Return the meta in a key value pair. + * + * @return array + */ + public function meta() + { + return $this->wrappedObject->meta->pluck('value', 'key')->all(); + } + /** * Convert the presenter instance to an array. * @@ -290,7 +311,8 @@ public function toArray() 'latest_icon' => $this->latest_icon(), 'permalink' => $this->permalink(), 'duration' => $this->duration(), - 'scheduled_at' => $this->scheduled_at(), + 'meta' => $this->meta(), + 'occurred_at' => $this->occurred_at(), 'created_at' => $this->created_at(), 'updated_at' => $this->updated_at(), ]); diff --git a/app/Presenters/IncidentUpdatePresenter.php b/app/Presenters/IncidentUpdatePresenter.php index 2a5530e6ca83..abbcbbc8d173 100644 --- a/app/Presenters/IncidentUpdatePresenter.php +++ b/app/Presenters/IncidentUpdatePresenter.php @@ -11,11 +11,10 @@ namespace CachetHQ\Cachet\Presenters; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Presenters\Traits\TimestampsTrait; +use CachetHQ\Cachet\Services\Dates\DateFactory; use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Facades\Config; use McCool\LaravelAutoPresenter\BasePresenter; /** @@ -32,7 +31,7 @@ class IncidentUpdatePresenter extends BasePresenter implements Arrayable * * @return string */ - public function formattedMessage() + public function formatted_message() { return Markdown::convertToHtml($this->wrappedObject->message); } @@ -44,7 +43,7 @@ public function formattedMessage() */ public function raw_message() { - return strip_tags($this->formattedMessage()); + return strip_tags($this->formatted_message()); } /** @@ -64,7 +63,7 @@ public function created_at_diff() */ public function created_at_formatted() { - return ucfirst(app(DateFactory::class)->make($this->wrappedObject->created_at)->format(Config::get('setting.incident_date_format', 'l jS F Y H:i:s'))); + return ucfirst(app(DateFactory::class)->make($this->wrappedObject->created_at)->format($this->incidentDateFormat())); } /** @@ -124,14 +123,19 @@ public function icon() { switch ($this->wrappedObject->status) { case 1: // Investigating + return 'icon ion-flag oranges'; case 2: // Identified + return 'icon ion-alert yellows'; case 3: // Watching + return 'icon ion-eye blues'; case 4: // Fixed + return 'icon ion-checkmark greens'; default: // Something actually broke, this shouldn't happen. + return ''; } } diff --git a/app/Presenters/MetricPointPresenter.php b/app/Presenters/MetricPointPresenter.php index 388ef816d390..5cbfdd60817a 100644 --- a/app/Presenters/MetricPointPresenter.php +++ b/app/Presenters/MetricPointPresenter.php @@ -19,16 +19,6 @@ class MetricPointPresenter extends BasePresenter implements Arrayable { use TimestampsTrait; - /** - * Show the actual calculated value; as per (value * counter). - * - * @return int - */ - public function calculated_value() - { - return $this->wrappedObject->value * $this->wrappedObject->counter; - } - /** * Convert the presenter instance to an array. * @@ -37,9 +27,8 @@ public function calculated_value() public function toArray() { return array_merge($this->wrappedObject->toArray(), [ - 'created_at' => $this->created_at(), - 'updated_at' => $this->updated_at(), - 'calculated_value' => $this->calculated_value(), + 'created_at' => $this->created_at(), + 'updated_at' => $this->updated_at(), ]); } } diff --git a/app/Presenters/MetricPresenter.php b/app/Presenters/MetricPresenter.php index f980e93d5c59..4a4ef6607e90 100644 --- a/app/Presenters/MetricPresenter.php +++ b/app/Presenters/MetricPresenter.php @@ -13,9 +13,10 @@ use CachetHQ\Cachet\Presenters\Traits\TimestampsTrait; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; use McCool\LaravelAutoPresenter\BasePresenter; -class MetricPresenter extends BasePresenter implements Arrayable +class MetricPresenter extends BasePresenter implements Arrayable, Jsonable { use TimestampsTrait; @@ -27,14 +28,10 @@ class MetricPresenter extends BasePresenter implements Arrayable public function view_name() { switch ($this->wrappedObject->default_view) { - case 0: - return 'last_hour'; - case 1: - return 'today'; - case 2: - return 'week'; - case 3: - return 'month'; + case 0: return 'last_hour'; + case 1: return 'today'; + case 2: return 'week'; + case 3: return 'month'; } } @@ -56,14 +53,10 @@ public function default_view_name() public function trans_string_name() { switch ($this->wrappedObject->default_view) { - case 0: - return 'last_hour'; - case 1: - return 'hourly'; - case 2: - return 'weekly'; - case 3: - return 'monthly'; + case 0: return 'last_hour'; + case 1: return 'hourly'; + case 2: return 'weekly'; + case 3: return 'monthly'; } } @@ -80,4 +73,18 @@ public function toArray() 'default_view_name' => $this->default_view_name(), ]); } + + /** + * Convert the object to its JSON representation. + * + * @param int $options + * + * @return string + */ + public function toJson($options = 0) + { + $json = json_encode($this->toArray(), $options); + + return $json; + } } diff --git a/app/Presenters/SchedulePresenter.php b/app/Presenters/SchedulePresenter.php new file mode 100644 index 000000000000..ddf0c04ffd1e --- /dev/null +++ b/app/Presenters/SchedulePresenter.php @@ -0,0 +1,261 @@ + + */ +class SchedulePresenter extends BasePresenter implements Arrayable +{ + use TimestampsTrait; + + /** + * The date factory instance. + * + * @var \CachetHQ\Cachet\Services\Dates\DateFactory + */ + protected $dates; + + /** + * Create a new presenter. + * + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates + * @param \CachetHQ\Cachet\Models\Schedule $resource + * + * @return void + */ + public function __construct(DateFactory $dates, Schedule $resource) + { + $this->dates = $dates; + } + + /** + * Renders the message from Markdown into HTML. + * + * @return string + */ + public function formatted_message() + { + return Markdown::convertToHtml($this->wrappedObject->message); + } + + /** + * Present diff for humans date time. + * + * @return string + */ + public function created_at_diff() + { + return $this->dates->make($this->wrappedObject->created_at)->diffForHumans(); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function created_at_formatted() + { + return ucfirst($this->dates->make($this->wrappedObject->created_at)->format($this->incidentDateFormat())); + } + + /** + * Formats the created_at time ready to be used by bootstrap-datetimepicker. + * + * @return string + */ + public function created_at_datetimepicker() + { + return $this->dates->make($this->wrappedObject->created_at)->format('Y-m-d H:i'); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function created_at_iso() + { + return $this->dates->make($this->wrappedObject->created_at)->toISO8601String(); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function scheduled_at() + { + return $this->dates->make($this->wrappedObject->scheduled_at)->toDateTimeString(); + } + + /** + * Present diff for humans date time. + * + * @return string + */ + public function scheduled_at_diff() + { + return $this->dates->make($this->wrappedObject->scheduled_at)->diffForHumans(); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function scheduled_at_formatted() + { + return ucfirst($this->dates->make($this->wrappedObject->scheduled_at)->format($this->incidentDateFormat())); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function scheduled_at_iso() + { + return $this->dates->make($this->wrappedObject->scheduled_at)->toISO8601String(); + } + + /** + * Formats the scheduled_at time ready to be used by bootstrap-datetimepicker. + * + * @return string + */ + public function scheduled_at_datetimepicker() + { + return $this->dates->make($this->wrappedObject->scheduled_at)->format('Y-m-d H:i'); + } + + /** + * Returns a formatted timestamp for use within the timeline. + * + * @return string + */ + public function timestamp_formatted() + { + if ($this->wrappedObject->is_scheduled) { + return $this->scheduled_at_formatted; + } + + return $this->created_at_formatted; + } + + /** + * Present formatted date time. + * + * @return string + */ + public function completed_at() + { + return $this->dates->make($this->wrappedObject->completed_at)->toDateTimeString(); + } + + /** + * Present diff for humans date time. + * + * @return string + */ + public function completed_at_diff() + { + return $this->dates->make($this->wrappedObject->completed_at)->diffForHumans(); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function completed_at_formatted() + { + return ucfirst($this->dates->make($this->wrappedObject->completed_at)->format($this->incidentDateFormat())); + } + + /** + * Present formatted date time. + * + * @return string + */ + public function completed_at_iso() + { + return $this->dates->make($this->wrappedObject->completed_at)->toISO8601String(); + } + + /** + * Formats the completed_at time ready to be used by bootstrap-datetimepicker. + * + * @return string|void + */ + public function completed_at_datetimepicker() + { + if ($this->wrappedObject->completed_at) { + return $this->dates->make($this->wrappedObject->completed_at)->format('Y-m-d H:i'); + } + } + + /** + * Return the iso timestamp for use within the timeline. + * + * @return string + */ + public function timestamp_iso() + { + if ($this->wrappedObject->is_scheduled) { + return $this->scheduled_at_iso; + } + + return $this->completed_at_iso; + } + + /** + * Returns a human readable version of the status. + * + * @return string + */ + public function human_status() + { + // return trans('cachet.incidents.status.'.$this->wrappedObject->status); + // TODO: Refactor into translations. + switch ($this->wrappedObject->status) { + case 0: return 'Upcoming'; + case 1: return 'In Progress'; + case 2: return 'Complete'; + } + } + + /** + * Convert the presenter instance to an array. + * + * @return string[] + */ + public function toArray() + { + return array_merge($this->wrappedObject->toArray(), [ + 'human_status' => $this->human_status(), + 'scheduled_at' => $this->scheduled_at(), + 'completed_at' => $this->completed_at(), + 'created_at' => $this->created_at(), + 'updated_at' => $this->updated_at(), + ]); + } +} diff --git a/app/Presenters/SubscriberPresenter.php b/app/Presenters/SubscriberPresenter.php index 2da85041d989..71c2112614e1 100644 --- a/app/Presenters/SubscriberPresenter.php +++ b/app/Presenters/SubscriberPresenter.php @@ -11,10 +11,9 @@ namespace CachetHQ\Cachet\Presenters; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Presenters\Traits\TimestampsTrait; +use CachetHQ\Cachet\Services\Dates\DateFactory; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Facades\Config; use McCool\LaravelAutoPresenter\BasePresenter; class SubscriberPresenter extends BasePresenter implements Arrayable @@ -28,7 +27,7 @@ class SubscriberPresenter extends BasePresenter implements Arrayable */ public function verified_at() { - return ucfirst(app(DateFactory::class)->make($this->wrappedObject->verified_at)->format(Config::get('setting.incident_date_format', 'l jS F Y H:i:s'))); + return ucfirst(app(DateFactory::class)->make($this->wrappedObject->verified_at)->format($this->incidentDateFormat())); } /** diff --git a/app/Presenters/Traits/TimestampsTrait.php b/app/Presenters/Traits/TimestampsTrait.php index eba58b2abdb9..8642ac7ac625 100644 --- a/app/Presenters/Traits/TimestampsTrait.php +++ b/app/Presenters/Traits/TimestampsTrait.php @@ -11,8 +11,16 @@ namespace CachetHQ\Cachet\Presenters\Traits; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Services\Dates\DateFactory; +use Illuminate\Support\Facades\Config; +/** + * This is the timestamps trait. + * + * @author Joseph Cohen + * @author Graham Campbell + * @author James Brooks + */ trait TimestampsTrait { /** @@ -44,4 +52,14 @@ public function deleted_at() { return app(DateFactory::class)->make($this->wrappedObject->deleted_at)->toDateTimeString(); } + + /** + * Get the incident date format setting, or fallback to a sane default. + * + * @return string + */ + protected function incidentDateFormat() + { + return Config::get('setting.incident_date_format', 'l jS F Y H:i:s'); + } } diff --git a/app/Foundation/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php similarity index 68% rename from app/Foundation/Providers/AppServiceProvider.php rename to app/Providers/AppServiceProvider.php index 0c93d6edf222..007a271ca4fe 100644 --- a/app/Foundation/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -9,11 +9,14 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use AltThree\Bus\Dispatcher; +use AltThree\Validator\ValidatingMiddleware; use CachetHQ\Cachet\Bus\Middleware\UseDatabaseTransactions; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Services\Dates\DateFactory; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; @@ -30,18 +33,31 @@ class AppServiceProvider extends ServiceProvider * Boot the service provider. * * @param \AltThree\Bus\Dispatcher $dispatcher + * + * @return void */ public function boot(Dispatcher $dispatcher) { + Schema::defaultStringLength(191); + $dispatcher->mapUsing(function ($command) { return Dispatcher::simpleMapping($command, 'CachetHQ\Cachet\Bus', 'CachetHQ\Cachet\Bus\Handlers'); }); - $dispatcher->pipeThrough([UseDatabaseTransactions::class]); + $dispatcher->pipeThrough([UseDatabaseTransactions::class, ValidatingMiddleware::class]); Str::macro('canonicalize', function ($url) { return preg_replace('/([^\/])$/', '$1/', $url); }); + + Relation::morphMap([ + 'components' => \CachetHQ\Cachet\Models\Component::class, + 'incidents' => \CachetHQ\Cachet\Models\Incident::class, + 'metrics' => \CachetHQ\Cachet\Models\Metric::class, + 'schedules' => \CachetHQ\Cachet\Models\Schedule::class, + 'subscriber' => \CachetHQ\Cachet\Models\Subscriber::class, + 'tags' => \CachetHQ\Cachet\Models\Tag::class, + ]); } /** diff --git a/app/Foundation/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php similarity index 59% rename from app/Foundation/Providers/ComposerServiceProvider.php rename to app/Providers/ComposerServiceProvider.php index 9bb135341687..d3a23d62c4c1 100644 --- a/app/Foundation/Providers/ComposerServiceProvider.php +++ b/app/Providers/ComposerServiceProvider.php @@ -9,19 +9,19 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use CachetHQ\Cachet\Composers\AppComposer; +use CachetHQ\Cachet\Composers\ComponentsComposer; use CachetHQ\Cachet\Composers\CurrentUserComposer; use CachetHQ\Cachet\Composers\DashboardComposer; -use CachetHQ\Cachet\Composers\ModuleComposer; -use CachetHQ\Cachet\Composers\Modules\ComponentsComposer as ComponentsModuleComposer; -use CachetHQ\Cachet\Composers\Modules\MetricsComposer as MetricsModuleComposer; -use CachetHQ\Cachet\Composers\Modules\ScheduledComposer as ScheduledModuleComposer; -use CachetHQ\Cachet\Composers\Modules\StatusComposer as StatusModuleComposer; -use CachetHQ\Cachet\Composers\Modules\StickiedComposer as StickiedModuleComposer; -use CachetHQ\Cachet\Composers\Modules\TimelineComposer as TimelineModuleComposer; +use CachetHQ\Cachet\Composers\MetricsComposer; +use CachetHQ\Cachet\Composers\ScheduledComposer; +use CachetHQ\Cachet\Composers\SettingsComposer; +use CachetHQ\Cachet\Composers\StatusComposer; +use CachetHQ\Cachet\Composers\StickiedComposer; use CachetHQ\Cachet\Composers\ThemeComposer; +use CachetHQ\Cachet\Composers\TimelineComposer; use CachetHQ\Cachet\Composers\TimezoneLocaleComposer; use Illuminate\Contracts\View\Factory; use Illuminate\Support\ServiceProvider; @@ -37,17 +37,17 @@ public function boot(Factory $factory) { $factory->composer('*', AppComposer::class); $factory->composer('*', CurrentUserComposer::class); - $factory->composer(['index', 'single-incident', 'subscribe.*', 'signup', 'dashboard.settings.theme', 'emails.*'], ThemeComposer::class); + $factory->composer(['index', 'single-incident', 'subscribe.*', 'signup', 'dashboard.settings.theme', 'notifications::email', 'single-schedule', 'errors.*'], ThemeComposer::class); $factory->composer('dashboard.*', DashboardComposer::class); $factory->composer(['setup.*', 'dashboard.settings.localization'], TimezoneLocaleComposer::class); - $factory->composer('*', ModuleComposer::class); - $factory->composer('partials.modules.components', ComponentsModuleComposer::class); - $factory->composer('partials.modules.metrics', MetricsModuleComposer::class); - $factory->composer('partials.modules.stickied', StickiedModuleComposer::class); - $factory->composer('partials.modules.scheduled', ScheduledModuleComposer::class); - $factory->composer('partials.modules.status', StatusModuleComposer::class); - $factory->composer('partials.modules.timeline', TimelineModuleComposer::class); + $factory->composer('partials.modules.components', ComponentsComposer::class); + $factory->composer('partials.modules.metrics', MetricsComposer::class); + $factory->composer('partials.modules.stickied', StickiedComposer::class); + $factory->composer('partials.modules.scheduled', ScheduledComposer::class); + $factory->composer('partials.modules.status', StatusComposer::class); + $factory->composer('partials.modules.timeline', TimelineComposer::class); + $factory->composer(['dashboard.settings.mail', 'setup.*'], SettingsComposer::class); } /** @@ -57,6 +57,6 @@ public function boot(Factory $factory) */ public function register() { - // + $this->app->singleton(DashboardComposer::class); } } diff --git a/app/Foundation/Providers/ConfigServiceProvider.php b/app/Providers/ConfigServiceProvider.php similarity index 79% rename from app/Foundation/Providers/ConfigServiceProvider.php rename to app/Providers/ConfigServiceProvider.php index 4de2669381f7..7390f720d778 100644 --- a/app/Foundation/Providers/ConfigServiceProvider.php +++ b/app/Providers/ConfigServiceProvider.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use CachetHQ\Cachet\Models\Setting as SettingModel; use CachetHQ\Cachet\Settings\Cache; @@ -58,20 +58,24 @@ public function boot() // } + // Set the app url. if ($appDomain = $this->app->config->get('setting.app_domain')) { $this->app->config->set('app.url', $appDomain); } + // Set the locale. if ($appLocale = $this->app->config->get('setting.app_locale')) { $this->app->config->set('app.locale', $appLocale); $this->app->translator->setLocale($appLocale); Date::setLocale($appLocale); } + // Set the timezone. if ($appTimezone = $this->app->config->get('setting.app_timezone')) { $this->app->config->set('cachet.timezone', $appTimezone); } + // Set allowed domains for CORS. $allowedOrigins = $this->app->config->get('cors.defaults.allowedOrigins'); if ($allowedDomains = $this->app->config->get('setting.allowed_domains')) { @@ -84,6 +88,23 @@ public function boot() } $this->app->config->set('cors.paths.api/v1/*.allowedOrigins', $allowedOrigins); + + // Set the mail from address. + if (!$this->app->config->get('mail.from.address')) { + $url = parse_url($appDomain); + + if (isset($url['host'])) { + $this->app->config->set('mail.from.address', "notify@{$url['host']}"); + } + } + + // Set the mail from name. + if (!$this->app->config->get('mail.from.name')) { + $this->app->config->set( + 'mail.from.name', + $this->app->config->get('setting.app_name', $this->app->config->get('app.name')) + ); + } } /** diff --git a/app/Foundation/Providers/ConsoleServiceProvider.php b/app/Providers/ConsoleServiceProvider.php similarity index 94% rename from app/Foundation/Providers/ConsoleServiceProvider.php rename to app/Providers/ConsoleServiceProvider.php index 54d2b92b9835..6976453b5c82 100644 --- a/app/Foundation/Providers/ConsoleServiceProvider.php +++ b/app/Providers/ConsoleServiceProvider.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use CachetHQ\Cachet\Subscribers\CommandSubscriber; use Illuminate\Support\ServiceProvider; diff --git a/app/Foundation/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php similarity index 79% rename from app/Foundation/Providers/EventServiceProvider.php rename to app/Providers/EventServiceProvider.php index 0bdee120e895..792e2b8bbf7c 100644 --- a/app/Foundation/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -21,13 +21,16 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ + 'CachetHQ\Cachet\Bus\Events\ActionInterface' => [ + 'CachetHQ\Cachet\Bus\Handlers\Events\ActionStorageHandler', + ], 'CachetHQ\Cachet\Bus\Events\Beacon\BeaconFailedToSendEvent' => [ - // + 'CachetHQ\Cachet\Bus\Handlers\Events\Beacon\LogBeaconFailedHandler', ], 'CachetHQ\Cachet\Bus\Events\Beacon\BeaconWasSentEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasAddedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasCreatedEvent' => [ // ], 'CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasRemovedEvent' => [ @@ -36,10 +39,10 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasUpdatedEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent' => [ 'CachetHQ\Cachet\Bus\Handlers\Events\Component\SendComponentUpdateEmailNotificationHandler', ], - 'CachetHQ\Cachet\Bus\Events\Component\ComponentWasAddedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\Component\ComponentWasCreatedEvent' => [ // ], 'CachetHQ\Cachet\Bus\Events\Component\ComponentWasRemovedEvent' => [ @@ -52,30 +55,24 @@ class EventServiceProvider extends ServiceProvider // ], 'CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasReportedEvent' => [ - // + 'CachetHQ\Cachet\Bus\Handlers\Events\IncidentUpdate\SendIncidentUpdateEmailNotificationHandler', ], 'CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasUpdatedEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent' => [ - // - ], - 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasReportedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent' => [ 'CachetHQ\Cachet\Bus\Handlers\Events\Incident\SendIncidentEmailNotificationHandler', ], - 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent' => [ - // - ], 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\Incident\MaintenanceWasScheduledEvent' => [ - 'CachetHQ\Cachet\Bus\Handlers\Events\Incident\SendMaintenanceEmailNotificationHandler', + 'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent' => [ + // ], 'CachetHQ\Cachet\Bus\Events\Invite\InviteWasClaimedEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasAddedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasCreatedEvent' => [ // ], 'CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasRemovedEvent' => [ @@ -84,7 +81,7 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasUpdatedEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\Metric\MetricWasAddedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\Metric\MetricWasCreatedEvent' => [ // ], 'CachetHQ\Cachet\Bus\Events\Metric\MetricWasRemovedEvent' => [ @@ -93,8 +90,17 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\Metric\MetricWasUpdatedEvent' => [ // ], + 'CachetHQ\Cachet\Bus\Events\Schedule\ScheduleWasCreatedEvent' => [ + 'CachetHQ\Cachet\Bus\Handlers\Events\Schedule\SendScheduleEmailNotificationHandler', + ], + 'CachetHQ\Cachet\Bus\Events\Schedule\ScheduleWasRemovedEvent' => [ + // + ], + 'CachetHQ\Cachet\Bus\Events\Schedule\ScheduleWasUpdatedEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasSubscribedEvent' => [ - 'CachetHQ\Cachet\Bus\Handlers\Events\Subscriber\SendSubscriberVerificationEmailHandler', + // ], 'CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasUnsubscribedEvent' => [ // @@ -117,6 +123,9 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\System\SystemWasUpdatedEvent' => [ // ], + 'CachetHQ\Cachet\Bus\Events\User\UserAcceptedInviteEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\User\UserDisabledTwoAuthEvent' => [ // ], @@ -138,11 +147,11 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\User\UserRegeneratedApiTokenEvent' => [ // ], - 'CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent' => [ + 'CachetHQ\Cachet\Bus\Events\User\UserWasCreatedEvent' => [ // ], 'CachetHQ\Cachet\Bus\Events\User\UserWasInvitedEvent' => [ - 'CachetHQ\Cachet\Bus\Handlers\Events\User\SendInviteUserEmailHandler', + // ], 'CachetHQ\Cachet\Bus\Events\User\UserWasRemovedEvent' => [ // diff --git a/app/Foundation/Providers/IntegrationServiceProvider.php b/app/Providers/IntegrationServiceProvider.php similarity index 94% rename from app/Foundation/Providers/IntegrationServiceProvider.php rename to app/Providers/IntegrationServiceProvider.php index 4f4ba9e0ab31..57d27523cdab 100644 --- a/app/Foundation/Providers/IntegrationServiceProvider.php +++ b/app/Providers/IntegrationServiceProvider.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; use CachetHQ\Cachet\Integrations\Contracts\Beacon as BeaconContract; use CachetHQ\Cachet\Integrations\Contracts\Credits as CreditsContract; @@ -96,7 +96,10 @@ protected function registerFeed() protected function registerSystem() { $this->app->singleton(SystemContract::class, function (Container $app) { - return new System(); + $config = $app['config']; + $auth = $app['auth.driver']; + + return new System($config, $auth); }); } diff --git a/app/Foundation/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php similarity index 62% rename from app/Foundation/Providers/RepositoryServiceProvider.php rename to app/Providers/RepositoryServiceProvider.php index 56afc6a1656a..550aa17f1b35 100644 --- a/app/Foundation/Providers/RepositoryServiceProvider.php +++ b/app/Providers/RepositoryServiceProvider.php @@ -9,13 +9,13 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Repositories\Metric\MetricRepository; -use CachetHQ\Cachet\Repositories\Metric\MySqlRepository as MetricMySqlRepository; -use CachetHQ\Cachet\Repositories\Metric\PgSqlRepository as MetricPgSqlRepository; -use CachetHQ\Cachet\Repositories\Metric\SqliteRepository as MetricSqliteRepository; +use CachetHQ\Cachet\Repositories\Metric\MySqlRepository; +use CachetHQ\Cachet\Repositories\Metric\PgSqlRepository; +use CachetHQ\Cachet\Repositories\Metric\SqliteRepository; +use CachetHQ\Cachet\Services\Dates\DateFactory; use Illuminate\Contracts\Config\Repository as ConfigRepository; use Illuminate\Contracts\Container\Container; use Illuminate\Support\ServiceProvider; @@ -46,14 +46,14 @@ protected function registerMetricRepository() { $this->app->singleton(MetricRepository::class, function (Container $app) { $config = $app->make(ConfigRepository::class); - $driver = $config->get('database.default'); - if ($driver == 'mysql') { - $repository = new MetricMySqlRepository($config); - } elseif ($driver == 'pgsql') { - $repository = new MetricPgSqlRepository($config); - } elseif ($driver == 'sqlite') { - $repository = new MetricSqliteRepository($config); + switch ($config->get('database.default')) { + case 'mysql': $repository = new MySqlRepository($config); + break; + case 'pgsql': $repository = new PgSqlRepository($config); + break; + case 'sqlite': $repository = new SqliteRepository($config); + break; } $dates = $app->make(DateFactory::class); diff --git a/app/Foundation/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php similarity index 61% rename from app/Foundation/Providers/RouteServiceProvider.php rename to app/Providers/RouteServiceProvider.php index c78f873f4db5..f23d7a023da4 100644 --- a/app/Foundation/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -9,14 +9,20 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Foundation\Providers; +namespace CachetHQ\Cachet\Providers; -use Barryvdh\Cors\HandleCors; use CachetHQ\Cachet\Http\Middleware\Acceptable; +use CachetHQ\Cachet\Http\Middleware\Authenticate; +use CachetHQ\Cachet\Http\Middleware\RemoteUserAuthenticate; use CachetHQ\Cachet\Http\Middleware\Timezone; +use CachetHQ\Cachet\Http\Middleware\VerifyCsrfToken; +use CachetHQ\Cachet\Http\Routes\ApiSystemRoutes; +use CachetHQ\Cachet\Http\Routes\AuthRoutes; +use CachetHQ\Cachet\Http\Routes\Setup\ApiRoutes as ApiSetupRoutes; +use CachetHQ\Cachet\Http\Routes\SetupRoutes; +use CachetHQ\Cachet\Http\Routes\SignupRoutes; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Routing\Router; @@ -41,6 +47,21 @@ class RouteServiceProvider extends ServiceProvider */ protected $namespace = 'CachetHQ\Cachet\Http\Controllers'; + /** + * These are the route files that should always be available anonymously. + * + * When applying the always_authenticate feature, these routes will be skipped. + * + * @var string[] + */ + protected $whitelistedAuthRoutes = [ + AuthRoutes::class, + SetupRoutes::class, + SignupRoutes::class, + ApiSystemRoutes::class, + ApiSetupRoutes::class, + ]; + /** * Define the route model bindings, pattern filters, etc. * @@ -69,6 +90,7 @@ public function bind(Router $router) $router->model('incident_update', 'CachetHQ\Cachet\Models\IncidentUpdate'); $router->model('metric', 'CachetHQ\Cachet\Models\Metric'); $router->model('metric_point', 'CachetHQ\Cachet\Models\MetricPoint'); + $router->model('schedule', 'CachetHQ\Cachet\Models\Schedule'); $router->model('setting', 'CachetHQ\Cachet\Models\Setting'); $router->model('subscriber', 'CachetHQ\Cachet\Models\Subscriber'); $router->model('subscription', 'CachetHQ\Cachet\Models\Subscription'); @@ -88,7 +110,11 @@ public function map(Router $router) $router->group(['namespace' => $this->namespace, 'as' => 'core::'], function (Router $router) { $path = app_path('Http/Routes'); - foreach (glob("{$path}/*{,/*}.php", GLOB_BRACE) as $file) { + $applyAlwaysAuthenticate = $this->app['config']->get('setting.always_authenticate', false); + $AllFileIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path)); + $PhpFileIterator = new \RegexIterator($AllFileIterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH); + + foreach ($PhpFileIterator as $file => $object) { $class = substr($file, strlen($path)); $class = str_replace('/', '\\', $class); $class = substr($class, 0, -4); @@ -96,9 +122,9 @@ public function map(Router $router) $routes = $this->app->make("CachetHQ\\Cachet\\Http\\Routes${class}"); if ($routes::$browser) { - $this->mapForBrowser($router, $routes); + $this->mapForBrowser($router, $routes, $applyAlwaysAuthenticate); } else { - $this->mapOtherwise($router, $routes); + $this->mapOtherwise($router, $routes, $applyAlwaysAuthenticate); } } }); @@ -109,10 +135,11 @@ public function map(Router $router) * * @param \Illuminate\Routing\Router $router * @param object $routes + * @param bool $applyAlwaysAuthenticate * * @return void */ - protected function mapForBrowser(Router $router, $routes) + protected function mapForBrowser(Router $router, $routes, $applyAlwaysAuthenticate) { $middleware = [ EncryptCookies::class, @@ -123,6 +150,11 @@ protected function mapForBrowser(Router $router, $routes) SubstituteBindings::class, ]; + if ($applyAlwaysAuthenticate && !$this->isWhiteListedAuthRoute($routes)) { + $middleware[] = RemoteUserAuthenticate::class; + $middleware[] = Authenticate::class; + } + $router->group(['middleware' => $middleware], function (Router $router) use ($routes) { $routes->map($router); }); @@ -133,20 +165,43 @@ protected function mapForBrowser(Router $router, $routes) * * @param \Illuminate\Routing\Router $router * @param object $routes + * @param bool $applyAlwaysAuthenticate * * @return void */ - protected function mapOtherwise(Router $router, $routes) + protected function mapOtherwise(Router $router, $routes, $applyAlwaysAuthenticate) { $middleware = [ - HandleCors::class, SubstituteBindings::class, Acceptable::class, Timezone::class, ]; + if ($applyAlwaysAuthenticate && !$this->isWhiteListedAuthRoute($routes)) { + $middleware[] = 'auth.api:true'; + } + $router->group(['middleware' => $middleware], function (Router $router) use ($routes) { $routes->map($router); }); } + + /** + * Validates if the route object is an instance of the whitelisted routes. + * A small workaround since we cant use multiple classes in a `instanceof` comparison. + * + * @param object $routes + * + * @return bool + */ + private function isWhiteListedAuthRoute($routes) + { + foreach ($this->whitelistedAuthRoutes as $whitelistedRoute) { + if (is_a($routes, $whitelistedRoute)) { + return true; + } + } + + return false; + } } diff --git a/app/Repositories/Metric/AbstractMetricRepository.php b/app/Repositories/Metric/AbstractMetricRepository.php index c781d281a398..566827e66619 100644 --- a/app/Repositories/Metric/AbstractMetricRepository.php +++ b/app/Repositories/Metric/AbstractMetricRepository.php @@ -11,8 +11,10 @@ namespace CachetHQ\Cachet\Repositories\Metric; +use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Models\Metric; use Illuminate\Contracts\Config\Repository; +use Illuminate\Support\Collection; /** * This is the abstract metric repository class. @@ -52,12 +54,67 @@ public function __construct(Repository $config) * * @return string */ - protected function getTableName() + protected function getMetricsTable() { - $driver = $this->config->get('database.default'); - $connection = $this->config->get('database.connections.'.$driver); - $prefix = $connection['prefix']; + $prefix = app(System::class)->getTablePrefix(); return $prefix.'metrics'; } + + /** + * Get the metric points table name. + * + * @return string + */ + protected function getMetricPointsTable() + { + $prefix = app(System::class)->getTablePrefix(); + + return $prefix.'metric_points'; + } + + /** + * Return the query type. + * + * @param \CachetHQ\Cachet\Models\Metric $metric + * + * @return string + */ + protected function getQueryType(Metric $metric) + { + if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { + return "sum({$this->getMetricPointsTable()}.value * {$this->getMetricPointsTable()}.counter) AS value"; + } elseif ($metric->calc_type == Metric::CALC_AVG) { + return "avg({$this->getMetricPointsTable()}.value) AS value"; + } else { + return "sum({$this->getMetricPointsTable()}.value * {$this->getMetricPointsTable()}.counter) AS value"; + } + } + + /** + * Map the result set. + * + * @param \CachetHQ\Cachet\Models\Metric $metric + * @param array $results + * + * @return \Illuminate\Support\Collection + */ + protected function mapResults(Metric $metric, array $results) + { + $results = Collection::make($results); + + return $results->map(function ($point) use ($metric) { + if (!$point->value) { + $point->value = $metric->default_value; + } + + if ($point->value === 0 && $metric->default_value != $point->value) { + $point->value = $metric->default_value; + } + + $point->value = round($point->value, $metric->places); + + return $point; + }); + } } diff --git a/app/Repositories/Metric/MetricInterface.php b/app/Repositories/Metric/MetricInterface.php index b355192f4c34..ec0cb1634527 100644 --- a/app/Repositories/Metric/MetricInterface.php +++ b/app/Repositories/Metric/MetricInterface.php @@ -13,36 +13,40 @@ use CachetHQ\Cachet\Models\Metric; +/** + * This is the metric interface. + * + * @author James Brooks + */ interface MetricInterface { /** - * Returns metrics for the last hour. + * Returns metrics since given minutes. * * @param \CachetHQ\Cachet\Models\Metric $metric - * @param int $hour - * @param int $minute + * @param int $minutes * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsLastHour(Metric $metric, $hour, $minute); + public function getPointsSinceMinutes(Metric $metric, $minutes); /** - * Returns metrics for a given hour. + * Returns metrics since given hour. * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $hour * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsByHour(Metric $metric, $hour); + public function getPointsSinceHour(Metric $metric, $hour); /** - * Returns metrics for the week. + * Returns metrics since given day. * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $day * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsForDayInWeek(Metric $metric, $day); + public function getPointsSinceDay(Metric $metric, $day); } diff --git a/app/Repositories/Metric/MetricRepository.php b/app/Repositories/Metric/MetricRepository.php index 315ffc6e2280..c424336b19cd 100644 --- a/app/Repositories/Metric/MetricRepository.php +++ b/app/Repositories/Metric/MetricRepository.php @@ -11,10 +11,15 @@ namespace CachetHQ\Cachet\Repositories\Metric; -use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Services\Dates\DateFactory; use DateInterval; +/** + * This is the metric repository class. + * + * @author James Brooks + */ class MetricRepository { /** @@ -27,7 +32,7 @@ class MetricRepository /** * The date factory instance. * - * @var \CachetHQ\Cachet\Dates\DateFactory + * @var \CachetHQ\Cachet\Services\Dates\DateFactory */ protected $dates; @@ -35,7 +40,7 @@ class MetricRepository * Create a new metric repository class. * * @param \CachetHQ\Cachet\Repositories\Metric\MetricInterface $repository - * @param \CachetHQ\Cachet\Dates\DateFactory $dates + * @param \CachetHQ\Cachet\Services\Dates\DateFactory $dates * * @return void */ @@ -50,22 +55,41 @@ public function __construct(MetricInterface $repository, DateFactory $dates) * * @param \CachetHQ\Cachet\Models\Metric $metric * - * @return array + * @return \Illuminate\Support\Collection */ public function listPointsLastHour(Metric $metric) { $dateTime = $this->dates->make(); - - $points = []; - - $pointKey = $dateTime->format('H:i'); - - for ($i = 0; $i <= 60; $i++) { - $points[$pointKey] = $this->repository->getPointsLastHour($metric, 0, $i); - $pointKey = $dateTime->sub(new DateInterval('PT1M'))->format('H:i'); + $pointKey = $dateTime->format('Y-m-d H:i'); + $nrOfMinutes = 61; + $points = $this->repository->getPointsSinceMinutes($metric, $nrOfMinutes + $metric->threshold)->pluck('value', 'key')->take(-$nrOfMinutes); + + $timeframe = $nrOfMinutes; + + //Settings counter for minutes without data + $minutesWithNoData = 0; + + for ($i = 0; $i < $timeframe; $i++) { + if (!$points->has($pointKey)) { + if ($i >= $metric->threshold) { + $points->put($pointKey, $metric->default_value); + //We put default value as metric, so we can reset counter for minutes without data + $minutesWithNoData = 0; + } else { + //We didn't find any data, but threshold is not meet yet so we just adding to counter + $minutesWithNoData++; + } + } else { + //We found data within this threshold, zeroing counter + $minutesWithNoData = 0; + } + + $pointKey = $dateTime->sub(new DateInterval('PT1M'))->format('Y-m-d H:i'); } - return array_reverse($points); + return $points->sortBy(function ($point, $key) { + return $key; + }); } /** @@ -79,17 +103,20 @@ public function listPointsLastHour(Metric $metric) public function listPointsToday(Metric $metric, $hours = 12) { $dateTime = $this->dates->make(); + $pointKey = $dateTime->format('Y-m-d H:00'); + $points = $this->repository->getPointsSinceHour($metric, $hours)->pluck('value', 'key'); - $points = []; - - $pointKey = $dateTime->format('H:00'); + for ($i = 0; $i < $hours; $i++) { + if (!$points->has($pointKey)) { + $points->put($pointKey, $metric->default_value); + } - for ($i = 0; $i <= $hours; $i++) { - $points[$pointKey] = $this->repository->getPointsByHour($metric, $i); - $pointKey = $dateTime->sub(new DateInterval('PT1H'))->format('H:00'); + $pointKey = $dateTime->sub(new DateInterval('PT1H'))->format('Y-m-d H:00'); } - return array_reverse($points); + return $points->sortBy(function ($point, $key) { + return $key; + }); } /** @@ -102,17 +129,20 @@ public function listPointsToday(Metric $metric, $hours = 12) public function listPointsForWeek(Metric $metric) { $dateTime = $this->dates->make(); - - $points = []; - - $pointKey = $dateTime->format('D jS M'); + $pointKey = $dateTime->format('Y-m-d'); + $points = $this->repository->getPointsSinceDay($metric, 7)->pluck('value', 'key'); for ($i = 0; $i <= 7; $i++) { - $points[$pointKey] = $this->repository->getPointsForDayInWeek($metric, $i); - $pointKey = $dateTime->sub(new DateInterval('P1D'))->format('D jS M'); + if (!$points->has($pointKey)) { + $points->put($pointKey, $metric->default_value); + } + + $pointKey = $dateTime->sub(new DateInterval('P1D'))->format('Y-m-d'); } - return array_reverse($points); + return $points->sortBy(function ($point, $key) { + return $key; + }); } /** @@ -125,18 +155,20 @@ public function listPointsForWeek(Metric $metric) public function listPointsForMonth(Metric $metric) { $dateTime = $this->dates->make(); - + $pointKey = $dateTime->format('Y-m-d'); $daysInMonth = $dateTime->format('t'); - - $points = []; - - $pointKey = $dateTime->format('jS M'); + $points = $this->repository->getPointsSinceDay($metric, $daysInMonth)->pluck('value', 'key'); for ($i = 0; $i <= $daysInMonth; $i++) { - $points[$pointKey] = $this->repository->getPointsForDayInWeek($metric, $i); - $pointKey = $dateTime->sub(new DateInterval('P1D'))->format('jS M'); + if (!$points->has($pointKey)) { + $points->put($pointKey, $metric->default_value); + } + + $pointKey = $dateTime->sub(new DateInterval('P1D'))->format('Y-m-d'); } - return array_reverse($points); + return $points->sortBy(function ($point, $key) { + return $key; + }); } } diff --git a/app/Repositories/Metric/MySqlRepository.php b/app/Repositories/Metric/MySqlRepository.php index a9cca0861a83..3d5e37159dd8 100644 --- a/app/Repositories/Metric/MySqlRepository.php +++ b/app/Repositories/Metric/MySqlRepository.php @@ -12,9 +12,7 @@ namespace CachetHQ\Cachet\Repositories\Metric; use CachetHQ\Cachet\Models\Metric; -use DateInterval; use Illuminate\Support\Facades\DB; -use Jenssegers\Date\Date; /** * This is the mysql repository class. @@ -24,112 +22,76 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterface { /** - * Returns metrics for the last hour. + * Returns metrics since given minutes. * * @param \CachetHQ\Cachet\Models\Metric $metric - * @param int $hour - * @param int $minute + * @param int $minutes * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsLastHour(Metric $metric, $hour, $minute) + public function getPointsSinceMinutes(Metric $metric, $minutes) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M')); - $timeInterval = $dateTime->format('YmdHi'); - - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'AVG(mp.`value` * mp.`counter`) AS `value`'; - } - - $value = 0; - - $points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H%i') = :timeInterval GROUP BY HOUR(mp.`created_at`), MINUTE(mp.`created_at`)", [ - 'metricId' => $metric->id, - 'timeInterval' => $timeInterval, - ]); - - if (isset($points[0]) && !($value = $points[0]->value)) { - $value = 0; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + + $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d %H:%i') AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :minutes MINUTE) ". + "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ". + "GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`), MINUTE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + 'minutes' => $minutes, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for a given hour. + * Returns metrics since given hour. * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $hour * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsByHour(Metric $metric, $hour) + public function getPointsSinceHour(Metric $metric, $hour) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H')); - $hourInterval = $dateTime->format('YmdH'); - - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'AVG(mp.`value` * mp.`counter`) AS `value`'; - } - - $value = 0; - - $points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H') = :hourInterval GROUP BY HOUR(mp.`created_at`)", [ - 'metricId' => $metric->id, - 'hourInterval' => $hourInterval, - ]); - - if (isset($points[0]) && !($value = $points[0]->value)) { - $value = 0; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d %H:00') AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :hour HOUR) ". + "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ". + "GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`) ". + "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + 'hour' => $hour, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for the week. + * Returns metrics since given day. * * @param \CachetHQ\Cachet\Models\Metric $metric + * @param int $day * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsForDayInWeek(Metric $metric, $day) + public function getPointsSinceDay(Metric $metric, $day) { - $dateTime = (new Date())->sub(new DateInterval('P'.$day.'D')); - - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'AVG(mp.`value` * mp.`counter`) AS `value`'; - } - - $value = 0; - - $points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.`created_at` BETWEEN DATE_SUB(mp.`created_at`, INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 1 DAY) AND DATE_FORMAT(mp.`created_at`, '%Y%m%d') = :timeInterval GROUP BY DATE_FORMAT(mp.`created_at`, '%Y%m%d')", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('Ymd'), - ]); - - if (isset($points[0]) && !($value = $points[0]->value)) { - $value = 0; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d') AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :day DAY) ". + "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ". + "GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + 'day' => $day, + ]); + + return $this->mapResults($metric, $points); } } diff --git a/app/Repositories/Metric/PgSqlRepository.php b/app/Repositories/Metric/PgSqlRepository.php index 739c543b0a0e..c8d135c63170 100644 --- a/app/Repositories/Metric/PgSqlRepository.php +++ b/app/Repositories/Metric/PgSqlRepository.php @@ -12,9 +12,7 @@ namespace CachetHQ\Cachet\Repositories\Metric; use CachetHQ\Cachet\Models\Metric; -use DateInterval; use Illuminate\Support\Facades\DB; -use Jenssegers\Date\Date; /** * This is the pgsql repository class. @@ -24,113 +22,74 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterface { /** - * Returns metrics for the last hour. + * Returns metrics since given minutes. * * @param \CachetHQ\Cachet\Models\Metric $metric - * @param int $hour - * @param int $minute + * @param int $minutes * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsLastHour(Metric $metric, $hour, $minute) + public function getPointsSinceMinutes(Metric $metric, $minutes) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M')); - - // Default metrics calculations. - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(metric_points.value * metric_points.counter)'; - } else { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } - - $value = 0; - $query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24MI') = :timeInterval GROUP BY to_char(metric_points.created_at, 'HHMI')", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('YmdHi'), - ]); - - if (isset($query[0])) { - $value = $query[0]->value; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI') AS key, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$minutes}' MINUTE) ". + "AND {$this->getMetricPointsTable()}.created_at <= NOW() ". + "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI') ". + "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI')", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for a given hour. + * Returns metrics since given hour. * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $hour * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsByHour(Metric $metric, $hour) + public function getPointsSinceHour(Metric $metric, $hour) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H')); - - // Default metrics calculations. - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(metric_points.value * metric_points.counter)'; - } else { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } - - $value = 0; - $query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE metric_points.metric_id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24') = :timeInterval GROUP BY to_char(metric_points.created_at, 'H')", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('YmdH'), - ]); - - if (isset($query[0])) { - $value = $query[0]->value; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') AS key, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$hour}' HOUR) ". + "AND {$this->getMetricPointsTable()}.created_at <= NOW() ". + "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') ". + "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for the week. + * Returns metrics since given day. * * @param \CachetHQ\Cachet\Models\Metric $metric + * @param int $day * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsForDayInWeek(Metric $metric, $day) + public function getPointsSinceDay(Metric $metric, $day) { - $dateTime = (new Date())->sub(new DateInterval('P'.$day.'D')); - - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(mp.value * mp.counter) AS value'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(mp.value * mp.counter) AS value'; - } - - $value = 0; - $points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.created_at BETWEEN (mp.created_at - interval '1 week') AND (now() + interval '1 day') AND to_char(mp.created_at, 'YYYYMMDD') = :timeInterval GROUP BY to_char(mp.created_at, 'YYYYMMDD')", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('Ymd'), - ]); - - if (isset($points[0]) && !($value = $points[0]->value)) { - $value = 0; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') AS key, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.created_at >= (DATE(NOW()) - INTERVAL '{$day}' DAY) ". + "AND {$this->getMetricPointsTable()}.created_at <= DATE(NOW()) ". + "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')". + "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } } diff --git a/app/Repositories/Metric/SqliteRepository.php b/app/Repositories/Metric/SqliteRepository.php index 403d776110af..d979e084ac66 100644 --- a/app/Repositories/Metric/SqliteRepository.php +++ b/app/Repositories/Metric/SqliteRepository.php @@ -12,123 +12,84 @@ namespace CachetHQ\Cachet\Repositories\Metric; use CachetHQ\Cachet\Models\Metric; -use DateInterval; use Illuminate\Support\Facades\DB; -use Jenssegers\Date\Date; +/** + * This is the sqlite repository class. + * + * @author James Brooks + */ class SqliteRepository extends AbstractMetricRepository implements MetricInterface { /** - * Returns metrics for the last hour. + * Returns metrics since given minutes. * * @param \CachetHQ\Cachet\Models\Metric $metric - * @param int $hour - * @param int $minute + * @param int $minutes * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsLastHour(Metric $metric, $hour, $minute) + public function getPointsSinceMinutes(Metric $metric, $minutes) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M')); - - // Default metrics calculations. - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(metric_points.value * metric_points.counter)'; - } else { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } - - $value = 0; - $query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H%M', metric_points.created_at) = :timeInterval GROUP BY strftime('%H%M', metric_points.created_at)", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('YmdHi'), - ]); - - if (isset($query[0])) { - $value = $query[0]->value; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT strftime('%Y-%m-%d %H:%M', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} ". + "INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$minutes} minutes') ". + "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ". + "GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`), strftime('%M', {$this->getMetricPointsTable()}.`created_at`) ". + "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for a given hour. + * Returns metrics since given hour. * * @param \CachetHQ\Cachet\Models\Metric $metric * @param int $hour * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsByHour(Metric $metric, $hour) + public function getPointsSinceHour(Metric $metric, $hour) { - $dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H')); - - // Default metrics calculations. - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(metric_points.value * metric_points.counter)'; - } else { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } - - $value = 0; - $query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H', metric_points.created_at) = :timeInterval GROUP BY strftime('%H', metric_points.created_at)", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('YmdH'), - ]); - - if (isset($query[0])) { - $value = $query[0]->value; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT strftime('%Y-%m-%d %H:00', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$hour} hours') ". + "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ". + "GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } /** - * Returns metrics for the week. + * Returns metrics since given day. * * @param \CachetHQ\Cachet\Models\Metric $metric + * @param int $day * - * @return int + * @return \Illuminate\Support\Collection */ - public function getPointsForDayInWeek(Metric $metric, $day) + public function getPointsSinceDay(Metric $metric, $day) { - $dateTime = (new Date())->sub(new DateInterval('P'.$day.'D')); - - // Default metrics calculations. - if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } elseif ($metric->calc_type == Metric::CALC_AVG) { - $queryType = 'avg(metric_points.value * metric_points.counter)'; - } else { - $queryType = 'sum(metric_points.value * metric_points.counter)'; - } - - $value = 0; - $query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND metric_points.created_at > date('now', '-7 day') AND strftime('%Y%m%d', metric_points.created_at) = :timeInterval GROUP BY strftime('%Y%m%d', metric_points.created_at)", [ - 'metricId' => $metric->id, - 'timeInterval' => $dateTime->format('Ymd'), - ]); - - if (isset($query[0])) { - $value = $query[0]->value; - } - - if ($value === 0 && $metric->default_value != $value) { - return $metric->default_value; - } - - return round($value, $metric->places); + $queryType = $this->getQueryType($metric); + $points = DB::select("SELECT strftime('%Y-%m-%d', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ". + "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ". + "WHERE {$this->getMetricsTable()}.id = :metricId ". + "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$day} days') ". + "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ". + "GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ". + "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [ + 'metricId' => $metric->id, + ]); + + return $this->mapResults($metric, $points); } } diff --git a/app/Dates/DateFactory.php b/app/Services/Dates/DateFactory.php similarity index 98% rename from app/Dates/DateFactory.php rename to app/Services/Dates/DateFactory.php index 523628a2671a..4ccbcb493d4e 100644 --- a/app/Dates/DateFactory.php +++ b/app/Services/Dates/DateFactory.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Cachet\Dates; +namespace CachetHQ\Cachet\Services\Dates; use DateTimeZone; use Jenssegers\Date\Date; diff --git a/app/Services/Modules/Manager.php b/app/Services/Modules/Manager.php deleted file mode 100644 index 61a276c68a2d..000000000000 --- a/app/Services/Modules/Manager.php +++ /dev/null @@ -1,80 +0,0 @@ - - */ -class Manager -{ - /** - * Groups the modules. - * - * @param array $modules - * @param array $groups - * - * @return array - */ - public function groupModules(array $modules, array $groups = []) - { - $grouped = []; - $length = count($modules); - foreach ($modules as $order => $module) { - if (!is_array($module) || empty($module['group'])) { - $order = array_get($module, 'order', PHP_INT_MAX - $length + $order); - - $grouped[] = [$module, 'order' => $order]; - - continue; - } - - $group = $module['group']; - if (empty($grouped[$group])) { - $grouped[$group] = [$module]; - - continue; - } - - $grouped[$group][] = $module; - } - - foreach ($groups as $group => $order) { - if (empty($grouped[$group])) { - continue; - } - - $grouped[$group]['order'] = $order; - } - - return $grouped; - } - - /** - * Orders the modules. - * - * @param array $modules - * - * @return array - */ - public function orderModules($modules) - { - $modules = array_numeric_sort($modules); - - foreach ($modules as $group => $subModules) { - $modules[$group] = array_numeric_sort($subModules); - } - - return $modules; - } -} diff --git a/app/Services/Modules/Renderer.php b/app/Services/Modules/Renderer.php deleted file mode 100644 index b8fe3df339b9..000000000000 --- a/app/Services/Modules/Renderer.php +++ /dev/null @@ -1,75 +0,0 @@ - - */ -class Renderer -{ - /** - * Render the modules. - * - * @param \Illuminate\Contracts\View\Factory $factory - * @param array $data - * @param array $modules - * @param string|null $group - * - * @return string - */ - public function renderModules(Factory $factory, array $data, array $modules, $group = null) - { - if ($group !== null) { - if (empty($modules[$group])) { - return ''; - } - - return $this->renderModulesGroup($factory, $data, $modules[$group]); - } - - return array_reduce( - array_numeric_sort($modules), - function ($reduce, $module) use ($factory, $data) { - return $reduce.$this->renderModulesGroup($factory, $data, $module); - }, - '' - ); - } - - /** - * Render a group of modules. - * - * @param \Illuminate\Contracts\View\Factory $factory - * @param array $data - * @param array $modules - * - * @return string - */ - protected function renderModulesGroup(Factory $factory, array $data, array $modules) - { - return array_reduce( - array_numeric_sort($modules), - function ($reduce, $module) use ($factory, $data) { - if (empty($module['partial'])) { - return $reduce; - } - - return $reduce.$factory->make($module['partial'], $data)->render(); - }, - '' - ); - } -} diff --git a/app/Settings/ReadException.php b/app/Settings/ReadException.php new file mode 100644 index 000000000000..86de0ae3f9e1 --- /dev/null +++ b/app/Settings/ReadException.php @@ -0,0 +1,34 @@ + + */ +class ReadException extends SettingsException +{ + /** + * Create a new read exception instance. + * + * @param \Exception $e + * + * @return void + */ + public function __construct(Exception $e) + { + parent::__construct('Unable to read Cachet settings', $e); + } +} diff --git a/app/Settings/Repository.php b/app/Settings/Repository.php index 35cf79e914b3..e6d54038ee3f 100644 --- a/app/Settings/Repository.php +++ b/app/Settings/Repository.php @@ -12,6 +12,7 @@ namespace CachetHQ\Cachet\Settings; use CachetHQ\Cachet\Models\Setting; +use Exception; /** * This is the settings repository class. @@ -59,13 +60,19 @@ public function __construct(Setting $model) /** * Returns a setting from the database. * + * @throws \CachetHQ\Cachet\Settings\ReadException + * * @return array */ public function all() { - return $this->model->all(['name', 'value'])->pluck('value', 'name')->map(function ($value, $name) { - return $this->castSetting($name, $value); - })->toArray(); + try { + return $this->model->all(['name', 'value'])->pluck('value', 'name')->map(function ($value, $name) { + return $this->castSetting($name, $value); + })->toArray(); + } catch (Exception $e) { + throw new ReadException($e); + } } /** @@ -74,16 +81,22 @@ public function all() * @param string $name * @param string|null $value * + * @throws \CachetHQ\Cachet\Settings\WriteException + * * @return void */ public function set($name, $value) { $this->stale = true; - if ($value === null) { - $this->model->where('name', '=', $name)->delete(); - } else { - $this->model->updateOrCreate(compact('name'), compact('value')); + try { + if ($value === null) { + $this->model->where('name', '=', $name)->delete(); + } else { + $this->model->updateOrCreate(compact('name'), compact('value')); + } + } catch (Exception $e) { + throw new WriteException($e); } } @@ -93,15 +106,21 @@ public function set($name, $value) * @param string $name * @param mixed $default * + * @throws \CachetHQ\Cachet\Settings\ReadException + * * @return mixed */ public function get($name, $default = null) { - if ($setting = $this->model->where('name', '=', $name)->first()) { - return $this->castSetting($name, $setting->value); + try { + if ($setting = $this->model->where('name', '=', $name)->first()) { + return $this->castSetting($name, $setting->value); + } + + return $default; + } catch (Exception $e) { + throw new ReadException($e); } - - return $default; } /** @@ -109,25 +128,37 @@ public function get($name, $default = null) * * @param string $name * + * @throws \CachetHQ\Cachet\Settings\WriteException + * * @return void */ public function delete($name) { $this->stale = true; - $this->model->where('name', '=', $name)->delete(); + try { + $this->model->where('name', '=', $name)->delete(); + } catch (Exception $e) { + throw new WriteException($e); + } } /** * Clear all settings. * + * @throws \CachetHQ\Cachet\Settings\WriteException + * * @return void */ public function clear() { $this->stale = true; - $this->model->query()->delete(); + try { + $this->model->query()->delete(); + } catch (Exception $e) { + throw new WriteException($e); + } } /** diff --git a/app/Settings/SettingsException.php b/app/Settings/SettingsException.php new file mode 100644 index 000000000000..1716ea366d9d --- /dev/null +++ b/app/Settings/SettingsException.php @@ -0,0 +1,35 @@ + + */ +class SettingsException extends Exception +{ + /** + * Create a new write exception instance. + * + * @param string $m + * @param \Exception $e + * + * @return void + */ + public function __construct(string $m, Exception $e) + { + parent::__construct($m, 0, $e); + } +} diff --git a/app/Settings/WriteException.php b/app/Settings/WriteException.php new file mode 100644 index 000000000000..baa41ff7ac1d --- /dev/null +++ b/app/Settings/WriteException.php @@ -0,0 +1,34 @@ + + */ +class WriteException extends SettingsException +{ + /** + * Create a new write exception instance. + * + * @param \Exception $e + * + * @return void + */ + public function __construct(Exception $e) + { + parent::__construct('Unable to write Cachet settings', $e); + } +} diff --git a/app/Subscribers/CommandSubscriber.php b/app/Subscribers/CommandSubscriber.php index 7b7acb6ff664..a879361999a7 100644 --- a/app/Subscribers/CommandSubscriber.php +++ b/app/Subscribers/CommandSubscriber.php @@ -15,10 +15,7 @@ use CachetHQ\Cachet\Bus\Events\System\SystemWasResetEvent; use CachetHQ\Cachet\Bus\Events\System\SystemWasUpdatedEvent; use CachetHQ\Cachet\Settings\Cache; -use Carbon\Carbon; -use Exception; use Illuminate\Console\Command; -use Illuminate\Contracts\Config\Repository; use Illuminate\Contracts\Events\Dispatcher; /** @@ -36,25 +33,16 @@ class CommandSubscriber */ protected $cache; - /** - * The config repository instance. - * - * @var \Illuminate\Contracts\Config\Repository - */ - protected $config; - /** * Create a new command subscriber instance. * - * @param \CachetHQ\Cachet\Settings\Cache $cache - * @param \Illuminate\Contracts\Config\Repository $config + * @param \CachetHQ\Cachet\Settings\Cache $cache * * @return void */ - public function __construct(Cache $cache, Repository $config) + public function __construct(Cache $cache) { $this->cache = $cache; - $this->config = $config; } /** @@ -69,6 +57,15 @@ public function subscribe(Dispatcher $events) $events->listen('command.installing', __CLASS__.'@fireInstallingCommand', 5); $events->listen('command.updating', __CLASS__.'@fireUpdatingCommand', 5); $events->listen('command.resetting', __CLASS__.'@fireResettingCommand', 5); + $events->listen('command.generatekey', __CLASS__.'@onGenerateKey'); + $events->listen('command.cacheconfig', __CLASS__.'@onCacheConfig'); + $events->listen('command.cacheroutes', __CLASS__.'@onCacheRoutes'); + $events->listen('command.publishvendors', __CLASS__.'@onPublishVendors'); + $events->listen('command.resetmigrations', __CLASS__.'@onResetMigrations'); + $events->listen('command.runmigrations', __CLASS__.'@onRunMigrations'); + $events->listen('command.runseeding', __CLASS__.'@onRunSeeding'); + $events->listen('command.linkstorage', __CLASS__.'@onLinkStorage'); + $events->listen('command.updatecache', __CLASS__.'@onUpdateCache'); } /** @@ -120,7 +117,7 @@ public function fireResettingCommand(Command $command) } /** - * Handle the main bulk of the command, clear the settings and backup the database. + * Handle the main bulk of the command, clear the settings. * * @param \Illuminate\Console\Command $command * @@ -133,29 +130,117 @@ protected function handleMainCommand(Command $command) $this->cache->clear(); $command->line('Settings cache cleared!'); + } - // SQLite does not backup. - if ($this->config->get('database.default') === 'sqlite') { - $command->line('Backup skipped: SQLite is not supported.'); + /** + * Handle a command.generatekey event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onGenerateKey(Command $command) + { + $command->call('key:generate'); + } - return; - } + /** + * Handle a command.cacheconfig event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onCacheConfig(Command $command) + { + $command->call('config:cache'); + } + + /** + * Handle a command.cacheroutes event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onCacheRoutes(Command $command) + { + $command->call('route:cache'); + } + + /** + * Handle a command.publishvendors event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onPublishVendors(Command $command) + { + $command->call('vendor:publish', ['--all' => true]); + } + + /** + * Handle a command.resetmigrations event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onResetMigrations(Command $command) + { + $command->call('migrate:reset', ['--force' => true]); + } - $command->line('Backing up database...'); - - try { - $command->call('db:backup', [ - '--compression' => 'gzip', - '--database' => $this->config->get('database.default'), - '--destination' => 'local', - '--destinationPath' => Carbon::now()->format('Y-m-d H.i.s'), - '--no-interaction' => true, - ]); - } catch (Exception $e) { - $command->error($e->getMessage()); - $command->line('Backup skipped!'); + /** + * Handle a command.runmigrations event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onRunMigrations(Command $command) + { + $command->call('migrate', ['--force' => true]); + } + + /** + * Handle a command.runseeding event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onRunSeeding(Command $command) + { + $command->call('db:seed', ['--force' => true]); + } + + /** + * Handle a command.linkstorage event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onLinkStorage(Command $command) + { + if ($command->getApplication()->has('storage:link')) { + $command->call('storage:link'); } + } - $command->line('Backup completed!'); + /** + * Handle a command.updatecache event. + * + * @param \Illuminate\Console\Command $command + * + * @return void + */ + public function onUpdateCache(Command $command) + { + $command->line('Clearing cache...'); + $command->call('cache:clear'); + $command->info('Cache cleared!'); } } diff --git a/app/helpers.php b/app/helpers.php index 23260d9558bd..d1f032545d48 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -9,10 +9,33 @@ * file that was distributed with this source code. */ +use CachetHQ\Cachet\Settings\Repository; +use Illuminate\Contracts\Bus\Dispatcher; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Request; use Jenssegers\Date\Date; +if (!function_exists('setting')) { + /** + * Get a setting, or the default value. + * + * @param string $name + * @param mixed $default + * + * @return mixed + */ + function setting($name, $default = null) + { + static $settings = []; + + if (isset($settings[$name])) { + return $settings[$name]; + } + + return $settings[$name] = app(Repository::class)->get($name, $default); + } +} + if (!function_exists('set_active')) { /** * Set active class if request is in path. @@ -51,22 +74,6 @@ function formatted_date($date) } } -if (!function_exists('subscribers_enabled')) { - /** - * Is the subscriber functionality enabled and configured. - * - * @return bool - */ - function subscribers_enabled() - { - $isEnabled = Config::get('setting.enable_subscribers', false); - $mailAddress = Config::get('mail.from.address', false); - $mailFrom = Config::get('mail.from.name', false); - - return $isEnabled && $mailAddress && $mailFrom; - } -} - if (!function_exists('color_darken')) { /** * Darken a color. @@ -107,36 +114,28 @@ function color_darken($hex, $percent) */ function color_contrast($hexcolor) { - $r = hexdec(substr($hexcolor, 0, 2)); - $g = hexdec(substr($hexcolor, 2, 2)); - $b = hexdec(substr($hexcolor, 4, 2)); + $r = ctype_xdigit(substr($hexcolor, 0, 2)); + $g = ctype_xdigit(substr($hexcolor, 2, 2)); + $b = ctype_xdigit(substr($hexcolor, 4, 2)); $yiq = (($r * 100) + ($g * 400) + ($b * 114)) / 1000; return ($yiq >= 128) ? 'black' : 'white'; } } -if (!function_exists('array_numeric_sort')) { +if (!function_exists('cachet_route_generator')) { /** - * Numerically sort an array based on a specific key. + * Generate the route string. * - * @param array $array - * @param string $key + * @param string $name + * @param string $method + * @param string $domain * - * @return array + * @return string */ - function array_numeric_sort(array $array = [], $key = 'order') + function cachet_route_generator($name, $method = 'get', $domain = 'core') { - uasort($array, function ($a, $b) use ($key) { - $a = array_get($a, $key, PHP_INT_MAX); - $b = array_get($b, $key, PHP_INT_MAX); - - $default = PHP_MAJOR_VERSION < 7 ? 1 : 0; - - return $a < $b ? -1 : ($a === $b ? $default : 1); - }); - - return $array; + return "{$domain}::{$method}:{$name}"; } } @@ -153,7 +152,11 @@ function array_numeric_sort(array $array = [], $key = 'order') */ function cachet_route($name, $parameters = [], $method = 'get', $domain = 'core') { - return app('url')->route("{$domain}::{$method}:{$name}", $parameters, true); + return app('url')->route( + cachet_route_generator($name, $method, $domain), + $parameters, + true + ); } } @@ -177,3 +180,17 @@ function cachet_redirect($name, $parameters = [], $status = 302, $headers = [], return app('redirect')->to($url, $status, $headers); } } + +if (!function_exists('execute')) { + /** + * Send the given command to the dispatcher for execution. + * + * @param object $command + * + * @return void + */ + function execute($command) + { + return app(Dispatcher::class)->dispatchNow($command); + } +} diff --git a/artisan b/artisan index d00c7161e88b..d294ad8bf35c 100644 --- a/artisan +++ b/artisan @@ -28,11 +28,11 @@ $app = require_once __DIR__.'/bootstrap/app.php'; | */ -$kernel = $app->make('Illuminate\Contracts\Console\Kernel'); +$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); $status = $kernel->handle( - $input = new Symfony\Component\Console\Input\ArgvInput(), - new Symfony\Component\Console\Output\ConsoleOutput() + $input = new Symfony\Component\Console\Input\ArgvInput(), + new Symfony\Component\Console\Output\ConsoleOutput() ); /* @@ -40,7 +40,7 @@ $status = $kernel->handle( | Shutdown The Application |-------------------------------------------------------------------------- | -| Once Artisan has finished running. We will fire off the shutdown events +| Once Artisan has finished running, we will fire off the shutdown events | so that any final work may be done by the application before we shut | down the process. This is the last thing to happen to the request. | diff --git a/bootstrap/app.php b/bootstrap/app.php index 8223651ac393..2b2ff8cb519f 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -22,11 +22,11 @@ | */ -$app->singleton('Illuminate\Contracts\Http\Kernel', 'CachetHQ\Cachet\Http\Kernel'); +$app->singleton(Illuminate\Contracts\Http\Kernel::class, CachetHQ\Cachet\Http\Kernel::class); -$app->singleton('Illuminate\Contracts\Console\Kernel', 'CachetHQ\Cachet\Console\Kernel'); +$app->singleton(Illuminate\Contracts\Console\Kernel::class, CachetHQ\Cachet\Console\Kernel::class); -$app->singleton('Illuminate\Contracts\Debug\ExceptionHandler', 'GrahamCampbell\Exceptions\NewExceptionHandler'); +$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, GrahamCampbell\Exceptions\ExceptionHandler::class); /* |-------------------------------------------------------------------------- diff --git a/composer.json b/composer.json index a6bff1215542..ea6814120e24 100644 --- a/composer.json +++ b/composer.json @@ -24,43 +24,52 @@ "email": "joe@alt-three.com" } ], + "replace": { + "paragonie/random_compat": "*", + "symfony/polyfill-mbstring": "*" + }, "require": { - "php": ">=5.6.4", + "php": "^7.1.3", + "ext-mbstring": "*", + "ext-openssl": "*", "ext-xml": "*", - "alt-three/badger": "^3.1", - "alt-three/bus": "^2.0", - "alt-three/emoji": "^3.1", - "alt-three/throttle": "^1.0", - "alt-three/validator": "^1.5", + "alt-three/bus": "^4.1", + "cachethq/badger": "^2.0", + "cachethq/emoji": "^3.0", + "cachethq/twitter": "^3.0", + "alt-three/validator": "^4.1", "aws/aws-sdk-php": "^3.7", - "backup-manager/laravel": "^1.1", - "barryvdh/laravel-cors": "^0.8", - "doctrine/dbal": "^2.5", - "fedeisas/laravel-mail-css-inliner": "^1.5", - "fideloper/proxy": "^3.1", - "graham-campbell/binput": "^3.5", - "graham-campbell/core": "^5.1", - "graham-campbell/exceptions": "^9.1", - "graham-campbell/markdown": "^6.1", - "guzzlehttp/guzzle": "^6.2.1", - "jenssegers/date": "^3.2", - "laravel/framework": "5.3.*", - "mccool/laravel-auto-presenter": "^4.3", - "pragmarx/google2fa": "^0.7.1", + "barryvdh/laravel-cors": "^0.11.0", + "bugsnag/bugsnag-laravel": "^2.15", + "chillerlan/php-qrcode": "^2.0", + "doctrine/dbal": "2.9.*", + "fideloper/proxy": "^4.0", + "graham-campbell/binput": "^6.0", + "graham-campbell/exceptions": "^11.1", + "graham-campbell/markdown": "^11.2", + "guzzlehttp/guzzle": "^6.3.3", + "jenssegers/date": "^3.4", + "laravel/framework": "5.7.*", + "laravel/tinker": "^1.0", + "mccool/laravel-auto-presenter": "^7.1", + "nexmo/client": "^1.5", + "pragmarx/google2fa": "^5.0", "predis/predis": "^1.1", - "twig/twig": "^1.26.1", - "roumen/feed": "^2.10.4" + "twig/twig": "^2.13" }, "require-dev": { - "alt-three/testbench": "^1.9", - "filp/whoops": "^2.1", - "fzaninotto/faker": "^1.6", - "graham-campbell/testbench-core": "^1.1", - "mockery/mockery": "0.9.5", - "phpunit/phpunit": "~5.0", - "symfony/css-selector": "^3.1", - "symfony/dom-crawler": "^3.1", - "tightenco/mailthief": "^0.3.2" + "ext-sqlite3": "*", + "alt-three/testbench": "5.0.x-dev", + "barryvdh/laravel-debugbar": "^3.2", + "filp/whoops": "^2.3", + "fzaninotto/faker": "^1.8", + "graham-campbell/analyzer": "^2.1", + "mockery/mockery": "^1.2", + "phpunit/phpunit": "^7.4", + "tightenco/mailthief": "^0.3.14" + }, + "suggest": { + "ext-apc": "APC Support cache driver." }, "autoload": { "classmap": [ @@ -80,33 +89,40 @@ }, "scripts": { "post-root-package-install": [ - "php -r \"copy('.env.example', '.env');\"", - "php artisan key:generate" + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ - "php artisan key:generate" + "@php artisan key:generate" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" ], - "post-install-cmd": [ - "Illuminate\\Foundation\\ComposerScripts::postInstall", - "php artisan optimize --force", - "php artisan config:cache", - "php artisan route:cache" + "test": [ + "@php artisan config:clear", + "vendor/bin/phpunit" ], - "post-update-cmd": [ - "Illuminate\\Foundation\\ComposerScripts::postUpdate", - "php artisan optimize --force", - "php artisan config:cache", - "php artisan route:cache" + "test-coverage": [ + "@php artisan config:clear", + "vendor/bin/phpunit --coverage-clover=coverage.xml" ] }, "config": { - "preferred-install": "dist" + "platform": { + "php": "7.1.3" + }, + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true, + "allow-plugins": { + "kylekatarnls/update-helper": true + } }, "extra": { "branch-alias": { "dev-master": "2.4-dev" } }, - "minimum-stability": "stable", + "minimum-stability": "dev", "prefer-stable": true } diff --git a/composer.lock b/composer.lock index ad9ac7ec152a..5694c9cc3939 100644 --- a/composer.lock +++ b/composer.lock @@ -1,107 +1,40 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "fca8fc5b2e78a82f98a0bfa85672b87f", - "content-hash": "d60fff17875690a829a28ad77b35e68d", + "content-hash": "6ca7a749bbb1681ee57e72dd9387f9ec", "packages": [ - { - "name": "alt-three/badger", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/AltThree/Badger.git", - "reference": "c5de4afcefcc0dd6576d2ae4bd5d5e83fb0cb8d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/AltThree/Badger/zipball/c5de4afcefcc0dd6576d2ae4bd5d5e83fb0cb8d9", - "reference": "c5de4afcefcc0dd6576d2ae4bd5d5e83fb0cb8d9", - "shasum": "" - }, - "require": { - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" - }, - "require-dev": { - "graham-campbell/testbench": "^3.1", - "phpunit/phpunit": "^4.8|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "AltThree\\Badger\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" - } - ], - "description": "A Badge Generator For Laravel 5", - "keywords": [ - "Alt Three", - "badge", - "badger", - "shield", - "svg" - ], - "time": "2016-04-22 17:23:42" - }, { "name": "alt-three/bus", - "version": "v2.0.0", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/AltThree/Bus.git", - "reference": "cf98cf46654491c4f9f286ab32dd72fb6eb446cc" + "reference": "21d1623520c0ad48acb72420fd7f986cd23f349a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltThree/Bus/zipball/cf98cf46654491c4f9f286ab32dd72fb6eb446cc", - "reference": "cf98cf46654491c4f9f286ab32dd72fb6eb446cc", + "url": "https://api.github.com/repos/AltThree/Bus/zipball/21d1623520c0ad48acb72420fd7f986cd23f349a", + "reference": "21d1623520c0ad48acb72420fd7f986cd23f349a", "shasum": "" }, "require": { - "illuminate/bus": "5.3.*", - "illuminate/container": "5.3.*", - "illuminate/contracts": "5.3.*", - "illuminate/pipeline": "5.3.*", - "illuminate/support": "5.3.*", - "php": ">=5.6.4" + "illuminate/bus": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "illuminate/container": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "illuminate/pipeline": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "php": "^7.1.3 || ^8.0" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "graham-campbell/testbench": "^5.5", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { "psr-4": { "AltThree\\Bus\\": "src/" @@ -113,23 +46,11 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - }, - { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" + "name": "Alt Three", + "email": "support@alt-three.com" } ], - "description": "An improved command bus for Laravel 5.2+", + "description": "An improved command bus for Laravel", "keywords": [ "Alt Three", "bus", @@ -137,43 +58,41 @@ "command bus", "job" ], - "time": "2016-08-25 10:38:17" + "support": { + "issues": "https://github.com/AltThree/Bus/issues", + "source": "https://github.com/AltThree/Bus/tree/4.5" + }, + "abandoned": true, + "time": "2020-07-25T19:26:48+00:00" }, { - "name": "alt-three/emoji", - "version": "v3.1.0", + "name": "alt-three/validator", + "version": "v4.5.0", "source": { "type": "git", - "url": "https://github.com/AltThree/Emoji.git", - "reference": "631119fb03162af8f42f7eda4c1f92c87611e36f" + "url": "https://github.com/AltThree/Validator.git", + "reference": "65ffc90cda5589052f0dac124d588946dfffd803" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltThree/Emoji/zipball/631119fb03162af8f42f7eda4c1f92c87611e36f", - "reference": "631119fb03162af8f42f7eda4c1f92c87611e36f", + "url": "https://api.github.com/repos/AltThree/Validator/zipball/65ffc90cda5589052f0dac124d588946dfffd803", + "reference": "65ffc90cda5589052f0dac124d588946dfffd803", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^5.3|^6.0", - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "league/commonmark": "^0.13", - "php": ">=5.5.9" + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0", + "php": "^7.1.3 || ^8.0", + "psr/log": "^1.1" }, "require-dev": { - "graham-campbell/markdown": "^6.0", - "graham-campbell/testbench": "^3.1", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { "psr-4": { - "AltThree\\Emoji\\": "src/" + "AltThree\\Validator\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -182,58 +101,55 @@ ], "authors": [ { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" + "name": "Alt Three", + "email": "support@alt-three.com" } ], - "description": "An Emoji Parser For Laravel 5", + "description": "A validation wrapper for Laravel", "keywords": [ "Alt Three", - "emoji", - "parser" + "validation", + "validator" ], - "time": "2016-04-22 17:24:35" + "support": { + "issues": "https://github.com/AltThree/Validator/issues", + "source": "https://github.com/AltThree/Validator/tree/4.5" + }, + "abandoned": true, + "time": "2020-07-25T18:31:34+00:00" }, { - "name": "alt-three/throttle", - "version": "v1.1.0", + "name": "asm89/stack-cors", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/AltThree/Throttle.git", - "reference": "3e4d57e8c61f02521b91cd911e0173710be0c1bb" + "url": "https://github.com/asm89/stack-cors.git", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltThree/Throttle/zipball/3e4d57e8c61f02521b91cd911e0173710be0c1bb", - "reference": "3e4d57e8c61f02521b91cd911e0173710be0c1bb", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", "shasum": "" }, "require": { - "illuminate/cache": "5.2.*|5.3.*", - "illuminate/http": "5.2.*|5.3.*", - "php": ">=5.5.9" + "php": ">=5.5.9", + "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "phpunit/phpunit": "^4.8|^5.0" + "phpunit/phpunit": "^5.0 || ^4.8.10", + "squizlabs/php_codesniffer": "^2.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { "psr-4": { - "AltThree\\Throttle\\": "src/" + "Asm89\\Stack\\": "src/Asm89/Stack/" } }, "notification-url": "https://packagist.org/downloads/", @@ -242,129 +158,127 @@ ], "authors": [ { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" + "name": "Alexander", + "email": "iam.asm89@gmail.com" } ], - "description": "A request rate limiter for Laravel 5.2+", + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", "keywords": [ - "Alt Three", - "http", - "rate limit", - "rate limiter", - "throttle" + "cors", + "stack" ], - "time": "2016-08-26 21:13:17" + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/1.3.0" + }, + "time": "2019-12-24T22:41:47+00:00" }, { - "name": "alt-three/validator", - "version": "v1.5.0", + "name": "aws/aws-crt-php", + "version": "v1.2.3", "source": { "type": "git", - "url": "https://github.com/AltThree/Validator.git", - "reference": "fbfe733bac9614edc2c09f8dea7ee3ce465402bb" + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "5545a4fa310aec39f54279fdacebcce33b3ff382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltThree/Validator/zipball/fbfe733bac9614edc2c09f8dea7ee3ce465402bb", - "reference": "fbfe733bac9614edc2c09f8dea7ee3ce465402bb", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/5545a4fa310aec39f54279fdacebcce33b3ff382", + "reference": "5545a4fa310aec39f54279fdacebcce33b3ff382", "shasum": "" }, "require": { - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9", - "psr/log": "^1.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." }, + "type": "library", "autoload": { - "psr-4": { - "AltThree\\Validator\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" } ], - "description": "A Validation Wrapper For Laravel 5", + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", "keywords": [ - "Alt Three", - "logging", - "validator" + "amazon", + "aws", + "crt", + "sdk" ], - "time": "2016-04-22 17:26:22" + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.3" + }, + "time": "2023-10-16T20:10:06+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.19.18", + "version": "3.278.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "d9004dac4bd7f5405952f963da3bcf986295a4de" + "reference": "596534c0627d8b38597061341e99b460437d1a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d9004dac4bd7f5405952f963da3bcf986295a4de", - "reference": "d9004dac4bd7f5405952f963da3bcf986295a4de", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/596534c0627d8b38597061341e99b460437d1a16", + "reference": "596534c0627d8b38597061341e99b460437d1a16", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^5.3.1|^6.2.1", - "guzzlehttp/promises": "~1.0", - "guzzlehttp/psr7": "~1.3.1", - "mtdowling/jmespath.php": "~2.2", - "php": ">=5.5" + "aws/aws-crt-php": "^1.0.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=5.5", + "psr/http-message": "^1.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", - "ext-json": "*", "ext-openssl": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "ext-spl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", "nette/neon": "^2.3", - "phpunit/phpunit": "~4.0|~5.0", - "psr/cache": "^1.0" + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", "doctrine/cache": "To use the DoctrineCacheAdapter", "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages" + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" }, "type": "library", "extra": { @@ -373,12 +287,12 @@ } }, "autoload": { - "psr-4": { - "Aws\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Aws\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -402,53 +316,54 @@ "s3", "sdk" ], - "time": "2016-10-20 20:21:56" + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.278.3" + }, + "time": "2023-08-15T18:07:55+00:00" }, { - "name": "backup-manager/backup-manager", - "version": "1.1.1", + "name": "barryvdh/laravel-cors", + "version": "v0.11.4", "source": { "type": "git", - "url": "https://github.com/backup-manager/backup-manager.git", - "reference": "e793277e6f6efae6a31c7abbd8028cae7e151201" + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/backup-manager/backup-manager/zipball/e793277e6f6efae6a31c7abbd8028cae7e151201", - "reference": "e793277e6f6efae6a31c7abbd8028cae7e151201", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/03492f1a3bc74a05de23f93b94ac7cc5c173eec9", + "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9", "shasum": "" }, "require": { - "league/flysystem": "~1.0", - "php": ">=5.5.9", - "symfony/process": "~2.1||~3.0" + "asm89/stack-cors": "^1.2", + "illuminate/support": "^5.5|^6", + "php": ">=7", + "symfony/http-foundation": "^3.1|^4", + "symfony/http-kernel": "^3.1|^4" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "dropbox/dropbox-sdk": "~1.1", - "league/flysystem-aws-s3-v3": "~1.0", - "league/flysystem-dropbox": "~1.0", - "league/flysystem-rackspace": "~1.0", - "league/flysystem-sftp": "~1.0", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "~2.1", - "satooshi/php-coveralls": "~0.6" - }, - "suggest": { - "league/flysystem-aws-s3-v3": "AwsS3 and GoogleCS adapter support.", - "league/flysystem-dropbox": "Dropbox adapter support.", - "league/flysystem-rackspace": "Rackspace adapter support.", - "league/flysystem-sftp": "Sftp adapter support." + "laravel/framework": "^5.5", + "orchestra/testbench": "3.3.x|3.4.x|3.5.x|3.6.x|3.7.x", + "phpunit/phpunit": "^4.8|^5.2|^7.0", + "squizlabs/php_codesniffer": "^2.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "0.11-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Cors\\ServiceProvider" + ] } }, "autoload": { "psr-4": { - "BackupManager\\": "src/" + "Barryvdh\\Cors\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -457,54 +372,59 @@ ], "authors": [ { - "name": "Shawn McCool", - "email": "shawn@heybigname.com", - "homepage": "http://heybigname.com/" - }, - { - "name": "Mitchell van Wijngaarden", - "email": "mitchell@kooding.nl", - "homepage": "http://heybigname.com/" + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" } ], - "description": "A framework agnostic database backup manager with user-definable procedures and support for S3, Dropbox, FTP, SFTP, and more with drivers for popular frameworks.", - "time": "2016-02-05 10:01:19" + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v0.11.4" + }, + "abandoned": true, + "time": "2019-08-28T11:27:11+00:00" }, { - "name": "backup-manager/laravel", - "version": "1.1.1", + "name": "bugsnag/bugsnag", + "version": "v3.29.1", "source": { "type": "git", - "url": "https://github.com/backup-manager/laravel.git", - "reference": "d7e6d12d24b8a27f58cf5eccb1ac943104c09856" + "url": "https://github.com/bugsnag/bugsnag-php.git", + "reference": "7fff8512b237a57323f600975ada6376e2b912c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/backup-manager/laravel/zipball/d7e6d12d24b8a27f58cf5eccb1ac943104c09856", - "reference": "d7e6d12d24b8a27f58cf5eccb1ac943104c09856", + "url": "https://api.github.com/repos/bugsnag/bugsnag-php/zipball/7fff8512b237a57323f600975ada6376e2b912c1", + "reference": "7fff8512b237a57323f600975ada6376e2b912c1", "shasum": "" }, "require": { - "backup-manager/backup-manager": "^1.0", - "illuminate/console": "^4.0||^5.0", - "illuminate/container": "^4.0||^5.0", - "illuminate/support": "^4.0||^5.0", - "php": ">=5.5.0", - "symfony/process": "^2.0||^3.0" + "composer/ca-bundle": "^1.0", + "guzzlehttp/guzzle": "^5.0|^6.0|^7.0", + "php": ">=5.5" }, "require-dev": { - "mockery/mockery": "dev-master", - "satooshi/php-coveralls": "~0.6" + "guzzlehttp/psr7": "^1.3", + "mtdowling/burgomaster": "dev-master#72151eddf5f0cf101502b94bf5031f9c53501a04", + "php-mock/php-mock-phpunit": "^1.1|^2.1", + "phpunit/phpunit": "^4.8.36|^7.5.15|^9.3.10", + "sebastian/version": ">=1.0.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "3.20-dev" } }, "autoload": { "psr-4": { - "BackupManager\\Laravel\\": "src/" + "Bugsnag\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -513,93 +433,122 @@ ], "authors": [ { - "name": "Shawn McCool", - "email": "shawn@heybigname.com", - "homepage": "http://heybigname.com/" - }, - { - "name": "Mitchell van Wijngaarden", - "email": "mitchell@kooding.nl", - "homepage": "http://heybigname.com/" + "name": "James Smith", + "email": "notifiers@bugsnag.com", + "homepage": "https://bugsnag.com" } ], - "description": "Database backup manager seamlessly integrated with Laravel 4 or 5 with user-definable procedures and support for S3, Dropbox, FTP, SFTP, and more.", - "time": "2016-02-22 10:52:12" + "description": "Official Bugsnag notifier for PHP applications.", + "homepage": "https://github.com/bugsnag/bugsnag-php", + "keywords": [ + "bugsnag", + "errors", + "exceptions", + "logging", + "tracking" + ], + "support": { + "issues": "https://github.com/bugsnag/bugsnag-php/issues", + "source": "https://github.com/bugsnag/bugsnag-php/tree/v3.29.1" + }, + "time": "2023-05-10T11:07:22+00:00" }, { - "name": "bacon/bacon-qr-code", - "version": "1.0.1", + "name": "bugsnag/bugsnag-laravel", + "version": "v2.26.0", "source": { "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "031a2ce68c5794064b49d11775b2daf45c96e21c" + "url": "https://github.com/bugsnag/bugsnag-laravel.git", + "reference": "333a912e38ead3e02724381093778b271168c8a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/031a2ce68c5794064b49d11775b2daf45c96e21c", - "reference": "031a2ce68c5794064b49d11775b2daf45c96e21c", + "url": "https://api.github.com/repos/bugsnag/bugsnag-laravel/zipball/333a912e38ead3e02724381093778b271168c8a3", + "reference": "333a912e38ead3e02724381093778b271168c8a3", "shasum": "" }, "require": { - "php": ">=5.3.3" + "bugsnag/bugsnag": "^3.29.0", + "bugsnag/bugsnag-psr-logger": "^1.4|^2.0", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0", + "monolog/monolog": "^1.12|^2.0|^3.0", + "php": ">=5.5" }, - "suggest": { - "ext-gd": "to generate QR code images" + "require-dev": { + "orchestra/testbench": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0", + "phpunit/phpunit": "^4.8.36|^6.3.1|^7.5.15|^8.3.5|^9.3.10" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.18-dev" + } + }, "autoload": { - "psr-0": { - "BaconQrCode": "src/" + "psr-4": { + "Bugsnag\\BugsnagLaravel\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "http://www.dasprids.de", - "role": "Developer" + "name": "James Smith", + "email": "notifiers@bugsnag.com" } ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "time": "2016-01-09 22:55:35" + "description": "Official Bugsnag notifier for Laravel applications.", + "homepage": "https://github.com/bugsnag/bugsnag-laravel", + "keywords": [ + "bugsnag", + "errors", + "exceptions", + "laravel", + "logging", + "tracking" + ], + "support": { + "issues": "https://github.com/bugsnag/bugsnag-laravel/issues", + "source": "https://github.com/bugsnag/bugsnag-laravel/tree/v2.26.0" + }, + "time": "2023-02-16T08:48:39+00:00" }, { - "name": "barryvdh/laravel-cors", - "version": "v0.8.2", + "name": "bugsnag/bugsnag-psr-logger", + "version": "v1.4.5", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-cors.git", - "reference": "bc7f40a71221b46d24971da7f0230ed4a75a18c6" + "url": "https://github.com/bugsnag/bugsnag-psr-logger.git", + "reference": "366430a94d983488d265c1068f47d78ebfbacd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/bc7f40a71221b46d24971da7f0230ed4a75a18c6", - "reference": "bc7f40a71221b46d24971da7f0230ed4a75a18c6", + "url": "https://api.github.com/repos/bugsnag/bugsnag-psr-logger/zipball/366430a94d983488d265c1068f47d78ebfbacd74", + "reference": "366430a94d983488d265c1068f47d78ebfbacd74", "shasum": "" }, "require": { - "illuminate/support": "5.1.x|5.2.x|5.3.x", - "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0", - "symfony/http-kernel": "~2.7|~3.0" + "bugsnag/bugsnag": "^3.10", + "php": ">=5.5", + "psr/log": "^1.0|^2.0" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5.2" + "graham-campbell/testbench-core": "^1.1", + "mockery/mockery": "^0.9.4|^1.3.1", + "phpunit/phpunit": "^4.8.36|^7.5.15|^9.4.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.8-dev" + "dev-master": "1.5-dev" } }, "autoload": { "psr-4": { - "Barryvdh\\Cors\\": "src/" + "Bugsnag\\PsrLogger\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -608,49 +557,65 @@ ], "authors": [ { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" + "name": "James Smith", + "email": "notifiers@bugsnag.com", + "homepage": "https://bugsnag.com" } ], - "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "description": "Official Bugsnag PHP PSR Logger.", + "homepage": "https://github.com/bugsnag/bugsnag-psr", "keywords": [ - "api", - "cors", - "crossdomain", - "laravel" + "bugsnag", + "errors", + "exceptions", + "logging", + "psr", + "tracking" ], - "time": "2016-08-11 08:46:01" + "support": { + "issues": "https://github.com/bugsnag/bugsnag-psr-logger/issues", + "source": "https://github.com/bugsnag/bugsnag-psr-logger/tree/v1.4.5" + }, + "time": "2021-12-13T09:52:57+00:00" }, { - "name": "christian-riesen/base32", - "version": "1.3.1", + "name": "cachethq/badger", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/ChristianRiesen/base32.git", - "reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa" + "url": "https://github.com/CachetHQ/Badger.git", + "reference": "9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa", - "reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa", + "url": "https://api.github.com/repos/CachetHQ/Badger/zipball/9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3", + "reference": "9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3", "shasum": "" }, "require": { - "php": ">=5.3.0" + "illuminate/contracts": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "0.*" + "graham-campbell/analyzer": "^2.1", + "graham-campbell/testbench": "^5.1", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "CachetHQ\\Badger\\BadgerServiceProvider" + ] } }, "autoload": { "psr-4": { - "Base32\\": "src/" + "CachetHQ\\Badger\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -659,52 +624,67 @@ ], "authors": [ { - "name": "Christian Riesen", - "email": "chris.riesen@gmail.com", - "homepage": "http://christianriesen.com", - "role": "Developer" + "name": "Cachet", + "email": "support@cachethq.io" } ], - "description": "Base32 encoder/decoder according to RFC 4648", - "homepage": "https://github.com/ChristianRiesen/base32", + "description": "A Badge Generator For Laravel 5 and 6.", "keywords": [ - "base32", - "decode", - "encode", - "rfc4648" + "CachetHQ", + "badge", + "badger", + "cachet", + "shield", + "svg" ], - "time": "2016-05-05 11:49:03" + "support": { + "issues": "https://github.com/CachetHQ/Badger/issues", + "source": "https://github.com/CachetHQ/Badger/tree/v2.0.0" + }, + "time": "2019-11-18T20:06:20+00:00" }, { - "name": "classpreloader/classpreloader", - "version": "3.0.0", + "name": "cachethq/emoji", + "version": "v3.0.0", "source": { "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a" + "url": "https://github.com/CachetHQ/Emoji.git", + "reference": "45227616c9b8077deeefe5561035e219b4118233" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", + "url": "https://api.github.com/repos/CachetHQ/Emoji/zipball/45227616c9b8077deeefe5561035e219b4118233", + "reference": "45227616c9b8077deeefe5561035e219b4118233", "shasum": "" }, "require": { - "nikic/php-parser": "^1.0|^2.0", - "php": ">=5.5.9" + "graham-campbell/guzzle-factory": "^3.0", + "illuminate/contracts": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "league/commonmark": "^1.0", + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.1", + "graham-campbell/markdown": "^11.0", + "graham-campbell/testbench": "^5.1", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" + }, + "laravel": { + "providers": [ + "CachetHQ\\Emoji\\EmojiServiceProvider" + ] } }, "autoload": { "psr-4": { - "ClassPreloader\\": "src/" + "CachetHQ\\Emoji\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -713,86 +693,115 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" + "name": "Cachet", + "email": "support@cachethq.io" } ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "description": "An Emoji Parser For Laravel 5 and 6", "keywords": [ - "autoload", - "class", - "preload" + "CachetHQ", + "cachet", + "emoji", + "parser" ], - "time": "2015-11-09 22:51:51" + "support": { + "issues": "https://github.com/CachetHQ/Emoji/issues", + "source": "https://github.com/CachetHQ/Emoji/tree/v3.0.0" + }, + "time": "2019-11-19T17:04:13+00:00" }, { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", + "name": "cachethq/twitter", + "version": "v3.0.0", "source": { "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + "url": "https://github.com/CachetHQ/Twitter.git", + "reference": "81216cbc3c1f1a32df70bfb73837f59a35a22b1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "url": "https://api.github.com/repos/CachetHQ/Twitter/zipball/81216cbc3c1f1a32df70bfb73837f59a35a22b1c", + "reference": "81216cbc3c1f1a32df70bfb73837f59a35a22b1c", "shasum": "" }, "require": { - "php": ">=5.3.2" + "illuminate/contracts": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "league/commonmark": "^1.0", + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "@stable" + "graham-campbell/analyzer": "^2.1", + "graham-campbell/markdown": "^11.0", + "graham-campbell/testbench": "^5.1", + "phpunit/phpunit": "^6.5|^7.0|^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + }, + "laravel": { + "providers": [ + "CachetHQ\\Twitter\\TwitterServiceProvider" + ] + } }, - "type": "project", "autoload": { "psr-4": { - "XdgBaseDir\\": "src/" + "CachetHQ\\Twitter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24 07:27:01" + "authors": [ + { + "name": "Cachet", + "email": "support@cachethq.io" + } + ], + "description": "A Twitter handle parser for Laravel 5 and 6", + "keywords": [ + "CachetHQ", + "cachet", + "markdown", + "parser", + "twitter" + ], + "support": { + "issues": "https://github.com/CachetHQ/Twitter/issues", + "source": "https://github.com/CachetHQ/Twitter/tree/v3.0.0" + }, + "time": "2019-11-19T17:04:54+00:00" }, { - "name": "doctrine/annotations", - "version": "v1.2.7", + "name": "chillerlan/php-qrcode", + "version": "2.0.8", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", - "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/bf0382aaf2f79fa41c2dcb0f216675f74d633fe7", + "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "php": ">=5.3.2" + "chillerlan/php-traits": "^1.1", + "php": ">=7.0.3" }, "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "4.*" + "chillerlan/php-authenticator": "^2.0", + "phpunit/phpunit": "^6.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" + "psr-4": { + "chillerlan\\QRCode\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -801,69 +810,56 @@ ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" } ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "description": "A QR code generator. PHP 7+", + "homepage": "https://github.com/chillerlan/php-qrcode", "keywords": [ - "annotations", - "docblock", - "parser" + "qr code" + ], + "support": { + "issues": "https://github.com/chillerlan/php-qrcode/issues", + "source": "https://github.com/chillerlan/php-qrcode/tree/v2.0.x" + }, + "funding": [ + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } ], - "time": "2015-08-31 12:32:49" + "time": "2020-04-12T07:38:35+00:00" }, { - "name": "doctrine/cache", - "version": "v1.6.0", + "name": "chillerlan/php-traits", + "version": "1.1.13", "source": { "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6" + "url": "https://github.com/chillerlan/php-traits.git", + "reference": "264759946b6aaeb427346b749fc9639b790b8e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6", - "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6", + "url": "https://api.github.com/repos/chillerlan/php-traits/zipball/264759946b6aaeb427346b749fc9639b790b8e7f", + "reference": "264759946b6aaeb427346b749fc9639b790b8e7f", "shasum": "" }, "require": { - "php": "~5.5|~7.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" + "php": ">=7.0.3" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" + "phpunit/phpunit": "^6.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + "chillerlan\\Traits\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -872,63 +868,61 @@ ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" } ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", + "description": "Some useful traits for PHP 7+", + "homepage": "https://github.com/chillerlan/php-traits", "keywords": [ - "cache", - "caching" + "PHP7", + "container", + "dotenv", + "helper", + "trait" ], - "time": "2015-12-31 16:37:02" + "support": { + "issues": "https://github.com/chillerlan/php-traits/issues", + "source": "https://github.com/chillerlan/php-traits" + }, + "abandoned": true, + "time": "2018-06-22T00:30:47+00:00" }, { - "name": "doctrine/collections", - "version": "v1.3.0", + "name": "composer/ca-bundle", + "version": "1.3.7", "source": { "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "76e46335014860eec1aa5a724799a00a2e47cc85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85", + "reference": "76e46335014860eec1aa5a724799a00a2e47cc85", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-main": "1.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" + "psr-4": { + "Composer\\CaBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -937,69 +931,115 @@ ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.3.7" + }, + "funding": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "url": "https://packagist.com", + "type": "custom" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "url": "https://github.com/composer", + "type": "github" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ], - "time": "2015-04-14 22:21:58" + "time": "2023-08-30T09:31:38+00:00" }, { - "name": "doctrine/common", - "version": "v2.6.1", + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", "source": { "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "a579557bc689580c19fee4e27487a67fe60defc0" + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0", - "reference": "a579557bc689580c19fee4e27487a67fe60defc0", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", "shasum": "" }, "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": "~5.5|~7.0" + "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0" + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "doctrine/cache", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "56cd022adb5514472cb144c087393c1821911d09" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09", + "reference": "56cd022adb5514472cb144c087393c1821911d09", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "predis/predis": "~1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" } }, "notification-url": "https://packagist.org/downloads/", @@ -1007,6 +1047,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1015,10 +1059,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1028,38 +1068,66 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.13.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } ], - "time": "2015-12-25 13:18:31" + "time": "2022-05-20T20:06:54+00:00" }, { "name": "doctrine/dbal", - "version": "v2.5.5", + "version": "v2.9.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9" + "reference": "7345cd59edfa2036eb0fa4264b77ae2576842035" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", - "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/7345cd59edfa2036eb0fa4264b77ae2576842035", + "reference": "7345cd59edfa2036eb0fa4264b77ae2576842035", "shasum": "" }, "require": { - "doctrine/common": ">=2.4,<2.7-dev", - "php": ">=5.3.2" + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "2.*||^3.0" + "doctrine/coding-standard": "^5.0", + "jetbrains/phpstorm-stubs": "^2018.1.2", + "phpstan/phpstan": "^0.10.1", + "phpunit/phpunit": "^7.4", + "symfony/console": "^2.0.5|^3.0|^4.0", + "symfony/phpunit-bridge": "^3.4.5|^4.0.5" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1070,12 +1138,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5.x-dev" + "dev-master": "2.9.x-dev", + "dev-develop": "3.0.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" } }, "notification-url": "https://packagist.org/downloads/", @@ -1083,6 +1152,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1091,54 +1164,107 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" } ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", "keywords": [ + "abstraction", "database", "dbal", + "mysql", "persistence", + "pgsql", + "php", "queryobject" ], - "time": "2016-09-09 19:13:33" + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.9" + }, + "time": "2019-11-02T22:19:34+00:00" }, { - "name": "doctrine/inflector", - "version": "v1.1.0", + "name": "doctrine/deprecations", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "4.*" + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + }, + "time": "2023-09-27T20:04:15+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" + }, + "type": "library", "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1146,6 +1272,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1154,10 +1284,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1165,44 +1291,75 @@ { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } ], - "time": "2015-11-06 14:35:42" + "time": "2022-10-12T20:51:15+00:00" }, { - "name": "doctrine/lexer", - "version": "v1.0.1", + "name": "doctrine/inflector", + "version": "1.4.4", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "url": "https://github.com/doctrine/inflector.git", + "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", + "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector", + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -1210,59 +1367,88 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" }, { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ - "lexer", - "parser" - ], - "time": "2014-09-09 13:34:57" - }, + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/1.4.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2021-04-16T17:34:40+00:00" + }, { - "name": "fedeisas/laravel-mail-css-inliner", - "version": "1.5", + "name": "doctrine/lexer", + "version": "1.2.3", "source": { "type": "git", - "url": "https://github.com/fedeisas/laravel-mail-css-inliner.git", - "reference": "8c3cd958634e865a90fc398900ea59c427dd35cc" + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fedeisas/laravel-mail-css-inliner/zipball/8c3cd958634e865a90fc398900ea59c427dd35cc", - "reference": "8c3cd958634e865a90fc398900ea59c427dd35cc", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { - "illuminate/support": "~5.0", - "php": ">=5.4.0", - "tijsverkoyen/css-to-inline-styles": "~1.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "jakub-onderka/php-console-highlighter": "0.3.*", - "jakub-onderka/php-parallel-lint": "0.8.*", - "phpmd/phpmd": "~1.5", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "~0.7@dev", - "squizlabs/php_codesniffer": "~1.5", - "swiftmailer/swiftmailer": "~5.0" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", "autoload": { "psr-4": { - "Fedeisas\\LaravelMailCssInliner\\": "src/" + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -1271,44 +1457,258 @@ ], "authors": [ { - "name": "Fede Isas", - "email": "fedeisas@hotmail.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Inline the CSS of your HTML emails using Laravel", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "css", - "laravel", - "mailer" + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2020-10-13T00:52:37+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" ], - "time": "2016-04-19 07:02:48" + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "time": "2019-12-30T22:54:17+00:00" }, { "name": "fideloper/proxy", - "version": "3.1.0", + "version": "4.4.2", "source": { "type": "git", "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "ec4dd30141e2515e307aea3539ff242e85c3f120" + "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/ec4dd30141e2515e307aea3539ff242e85c3f120", - "reference": "ec4dd30141e2515e307aea3539ff242e85c3f120", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", + "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", "shasum": "" }, "require": { - "illuminate/contracts": "~5.0", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", "php": ">=5.4.0" }, "require-dev": { - "illuminate/http": "~5.0", - "mockery/mockery": "~0.9.3" + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^8.5.8|^9.3.3" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.1-dev" + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] } }, "autoload": { @@ -1332,38 +1732,48 @@ "proxy", "trusted proxy" ], - "time": "2015-12-24 15:02:55" + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.2" + }, + "time": "2022-02-09T13:33:34+00:00" }, { "name": "graham-campbell/binput", - "version": "v3.5.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Binput.git", - "reference": "2da3554abbb6585ed09183a68a09a2f3c8bfbfb1" + "reference": "9c0df9c3d0481a495bdc0638ee67bc199d70e3b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Binput/zipball/2da3554abbb6585ed09183a68a09a2f3c8bfbfb1", - "reference": "2da3554abbb6585ed09183a68a09a2f3c8bfbfb1", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Binput/zipball/9c0df9c3d0481a495bdc0638ee67bc199d70e3b4", + "reference": "9c0df9c3d0481a495bdc0638ee67bc199d70e3b4", "shasum": "" }, "require": { - "graham-campbell/security": "^3.5", - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/http": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" + "graham-campbell/security": "^6.2", + "illuminate/contracts": "^5.5|^6.0", + "illuminate/http": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "php": "^7.1.3" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.1", + "graham-campbell/testbench": "^5.2", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.5-dev" + "dev-master": "6.2-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Binput\\BinputServiceProvider" + ] } }, "autoload": { @@ -1395,42 +1805,59 @@ "laravel", "security" ], - "time": "2016-10-21 10:11:30" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Binput/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Binput/tree/master" + }, + "time": "2019-08-26T16:30:03+00:00" }, { - "name": "graham-campbell/core", - "version": "v5.1.0", + "name": "graham-campbell/exceptions", + "version": "v11.3.0", "source": { "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Core.git", - "reference": "9ca45b4d0f9bde7084ffac6ca3337af153340790" + "url": "https://github.com/GrahamCampbell/Laravel-Exceptions.git", + "reference": "c33548417cf9903a049c7311ab57352a7e720b33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Core/zipball/9ca45b4d0f9bde7084ffac6ca3337af153340790", - "reference": "9ca45b4d0f9bde7084ffac6ca3337af153340790", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/c33548417cf9903a049c7311ab57352a7e720b33", + "reference": "c33548417cf9903a049c7311ab57352a7e720b33", "shasum": "" }, "require": { - "illuminate/console": "5.1.*|5.2.*|5.3.*", - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" + "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", + "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", + "php": "^7.1.3", + "psr/log": "^1.0", + "symfony/console": "^3.3|^4.0", + "symfony/debug": "^3.3|^4.0", + "symfony/http-foundation": "^3.3|^4.0" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" + "filp/whoops": "^2.1.4", + "graham-campbell/analyzer": "^2.1", + "graham-campbell/testbench": "^5.2", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.5|^7.0|^8.0" + }, + "suggest": { + "filp/whoops": "Enables use of the debug displayer." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-master": "11.3-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Exceptions\\ExceptionsServiceProvider" + ] } }, "autoload": { "psr-4": { - "GrahamCampbell\\Core\\": "src/" + "GrahamCampbell\\Exceptions\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1443,61 +1870,57 @@ "email": "graham@alt-three.com" } ], - "description": "Core Provides Some Extra Functionality For Laravel 5", + "description": "Provides A Powerful Error Response System For Both Development And Production", "keywords": [ "Graham Campbell", "GrahamCampbell", - "Laravel Core", - "Laravel-Core", - "base", - "core", + "Laravel Exceptions", + "Laravel-Exceptions", + "error", + "errors", + "exception", + "exceptions", "framework", "laravel", - "starter" + "whoops" ], - "time": "2016-05-25 09:22:06" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Exceptions/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Exceptions/tree/v11.3.0" + }, + "time": "2019-06-03T06:57:27+00:00" }, { - "name": "graham-campbell/exceptions", - "version": "v9.1.0", + "name": "graham-campbell/guzzle-factory", + "version": "v3.0.4", "source": { "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Exceptions.git", - "reference": "8e106aba52f7ef69360035e872b5f7a0a94bf06b" + "url": "https://github.com/GrahamCampbell/Guzzle-Factory.git", + "reference": "618cf7220b177c6d9939a36331df937739ffc596" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/8e106aba52f7ef69360035e872b5f7a0a94bf06b", - "reference": "8e106aba52f7ef69360035e872b5f7a0a94bf06b", + "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/618cf7220b177c6d9939a36331df937739ffc596", + "reference": "618cf7220b177c6d9939a36331df937739ffc596", "shasum": "" }, "require": { - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "paragonie/random_compat": "^1.1|^2.0", - "php": ">=5.5.9", - "psr/log": "^1.0", - "symfony/debug": "^2.7|^3.0", - "symfony/http-foundation": "^2.7|^3.0" + "guzzlehttp/guzzle": "^6.2", + "php": "^7.0|^8.0" }, "require-dev": { - "filp/whoops": "^1.1|^2.0", - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" - }, - "suggest": { - "filp/whoops": "Enables use of the debug displayer." + "graham-campbell/analyzer": "^2.4", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { "psr-4": { - "GrahamCampbell\\Exceptions\\": "src/" + "GrahamCampbell\\GuzzleFactory\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1510,53 +1933,67 @@ "email": "graham@alt-three.com" } ], - "description": "Provides A Powerful Error Response System For Both Development And Production", + "description": "Provides A Simple Guzzle Factory With Good Defaults", "keywords": [ "Graham Campbell", "GrahamCampbell", - "Laravel Exceptions", - "Laravel-Exceptions", - "error", - "errors", - "exception", - "exceptions", - "framework", - "laravel", - "whoops" + "Guzzle", + "Guzzle Factory", + "Guzzle-Factory", + "http" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Guzzle-Factory/issues", + "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/guzzle-factory", + "type": "tidelift" + } ], - "time": "2016-08-19 08:58:30" + "time": "2020-05-02T14:45:48+00:00" }, { "name": "graham-campbell/markdown", - "version": "v6.1.0", + "version": "v11.2.1", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", - "reference": "2208ec910d9880d6bca28d332ae7f3b7350355d1" + "reference": "7ead48c43098b562707a30650843d4279786b0d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/2208ec910d9880d6bca28d332ae7f3b7350355d1", - "reference": "2208ec910d9880d6bca28d332ae7f3b7350355d1", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/7ead48c43098b562707a30650843d4279786b0d9", + "reference": "7ead48c43098b562707a30650843d4279786b0d9", "shasum": "" }, "require": { - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "illuminate/view": "5.1.*|5.2.*|5.3.*", - "league/commonmark": "^0.13", - "php": ">=5.5.9" + "illuminate/contracts": "^5.5|^6.0|^7.0", + "illuminate/support": "^5.5|^6.0|^7.0", + "illuminate/view": "^5.5|^6.0|^7.0", + "league/commonmark": "^1.3", + "php": "^7.1.3" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "league/commonmark-extras": "^0.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.4", + "graham-campbell/testbench": "^5.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "11.2-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Markdown\\MarkdownServiceProvider" + ] } }, "autoload": { @@ -1574,7 +2011,7 @@ "email": "graham@alt-three.com" } ], - "description": "Markdown Is A CommonMark Wrapper For Laravel 5", + "description": "Markdown Is A CommonMark Wrapper For Laravel", "keywords": [ "Graham Campbell", "GrahamCampbell", @@ -1586,35 +2023,60 @@ "laravel", "markdown" ], - "time": "2016-04-26 14:28:21" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/11.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://www.patreon.com/GrahamJCampbell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/markdown", + "type": "tidelift" + } + ], + "time": "2020-04-14T14:11:12+00:00" }, { "name": "graham-campbell/security", - "version": "v3.6.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Security.git", - "reference": "07d4ec2658582032afe225928bde883474e2a543" + "reference": "93b3e09774987916f9a91071b2e53738180f2ba8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Security/zipball/07d4ec2658582032afe225928bde883474e2a543", - "reference": "07d4ec2658582032afe225928bde883474e2a543", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Security/zipball/93b3e09774987916f9a91071b2e53738180f2ba8", + "reference": "93b3e09774987916f9a91071b2e53738180f2ba8", "shasum": "" }, "require": { - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" + "graham-campbell/security-core": "^1.0", + "illuminate/contracts": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "php": "^7.1.3" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.1", + "graham-campbell/testbench": "^5.2", + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6-dev" + "dev-master": "6.2-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Security\\SecurityServiceProvider" + ] } }, "autoload": { @@ -1643,44 +2105,42 @@ "laravel", "security" ], - "time": "2016-04-26 14:29:04" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Security/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Security/tree/master" + }, + "time": "2019-08-26T16:30:00+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "6.2.2", + "name": "graham-campbell/security-core", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60" + "url": "https://github.com/GrahamCampbell/Security-Core.git", + "reference": "3b14e58dba84b0238a3409818d6f67acc5c00bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ebf29dee597f02f09f4d5bbecc68230ea9b08f60", - "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60", + "url": "https://api.github.com/repos/GrahamCampbell/Security-Core/zipball/3b14e58dba84b0238a3409818d6f67acc5c00bf9", + "reference": "3b14e58dba84b0238a3409818d6f67acc5c00bf9", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.3.1", - "php": ">=5.5" + "php": "^7.0" }, "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.0", - "psr/log": "^1.0" + "graham-campbell/analyzer": "^2.4", + "phpunit/phpunit": "^6.5|^7.5|^8.4|^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "GuzzleHttp\\": "src/" + "GrahamCampbell\\SecurityCore\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1689,161 +2149,368 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Graham Campbell", + "email": "graham@alt-three.com" } ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", + "description": "Security Core Is A Port Of The Security Class From Codeigniter 3 For General Use", "keywords": [ - "client", - "curl", + "Graham Campbell", + "GrahamCampbell", + "Security Core", + "Security-Core", + "codeigniter", "framework", - "http", - "http client", - "rest", - "web service" + "laravel", + "security" ], - "time": "2016-10-08 15:01:37" - }, + "support": { + "issues": "https://github.com/GrahamCampbell/Security-Core/issues", + "source": "https://github.com/GrahamCampbell/Security-Core/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://www.patreon.com/GrahamJCampbell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/security-core", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:30:49+00:00" + }, { - "name": "guzzlehttp/promises", - "version": "1.2.0", + "name": "guzzlehttp/guzzle", + "version": "6.5.8", "source": { "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579", - "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", "shasum": "" }, "require": { - "php": ">=5.5.0" + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.9", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "6.5-dev" } }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "GuzzleHttp\\Promise\\": "src/" + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5.8" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-20T22:16:07+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "autoload": { "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], - "time": "2016-05-18 16:56:05" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-05-21T12:31:43+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.3.1", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, + "type": "library", "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "PSR-7 message implementation", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ "http", "message", + "psr-7", + "request", + "response", "stream", - "uri" + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } ], - "time": "2016-06-24 23:00:38" + "time": "2023-04-17T16:00:37+00:00" }, { "name": "jakub-onderka/php-console-color", - "version": "0.1", + "version": "v0.2", "source": { "type": "git", "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.4.0" }, "require-dev": { "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "0.*", + "jakub-onderka/php-parallel-lint": "1.0", "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "3.7.*", + "phpunit/phpunit": "~4.3", "squizlabs/php_codesniffer": "1.*" }, "type": "library", "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleColor": "src/" + "psr-4": { + "JakubOnderka\\PhpConsoleColor\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1853,41 +2520,46 @@ "authors": [ { "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com", - "homepage": "http://www.acci.cz" + "email": "jakub.onderka@gmail.com" } ], - "time": "2014-04-08 15:00:19" + "support": { + "issues": "https://github.com/JakubOnderka/PHP-Console-Color/issues", + "source": "https://github.com/JakubOnderka/PHP-Console-Color/tree/master" + }, + "abandoned": "php-parallel-lint/php-console-color", + "time": "2018-09-29T17:23:10+00:00" }, { "name": "jakub-onderka/php-console-highlighter", - "version": "v0.3.2", + "version": "v0.4", "source": { "type": "git", "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", "shasum": "" }, "require": { - "jakub-onderka/php-console-color": "~0.1", - "php": ">=5.3.0" + "ext-tokenizer": "*", + "jakub-onderka/php-console-color": "~0.2", + "php": ">=5.4.0" }, "require-dev": { "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~0.5", + "jakub-onderka/php-parallel-lint": "~1.0", "jakub-onderka/php-var-dump-check": "~0.1", "phpunit/phpunit": "~4.0", "squizlabs/php_codesniffer": "~1.5" }, "type": "library", "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleHighlighter": "src/" + "psr-4": { + "JakubOnderka\\PhpConsoleHighlighter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1901,35 +2573,49 @@ "homepage": "http://www.acci.cz/" } ], - "time": "2015-04-20 18:58:01" + "description": "Highlight PHP code in terminal", + "support": { + "issues": "https://github.com/JakubOnderka/PHP-Console-Highlighter/issues", + "source": "https://github.com/JakubOnderka/PHP-Console-Highlighter/tree/master" + }, + "abandoned": "php-parallel-lint/php-console-highlighter", + "time": "2018-09-29T18:48:56+00:00" }, { "name": "jenssegers/date", - "version": "v3.2.6", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/jenssegers/date.git", - "reference": "ce421c34d7d3be22f3afccaae3718cb58f82a488" + "reference": "58393b0544fc2525b3fcd02aa4c989857107e05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jenssegers/date/zipball/ce421c34d7d3be22f3afccaae3718cb58f82a488", - "reference": "ce421c34d7d3be22f3afccaae3718cb58f82a488", + "url": "https://api.github.com/repos/jenssegers/date/zipball/58393b0544fc2525b3fcd02aa4c989857107e05a", + "reference": "58393b0544fc2525b3fcd02aa4c989857107e05a", "shasum": "" }, "require": { - "nesbot/carbon": "^1.0", - "php": ">=5.4", - "symfony/translation": "^2.7|^3.0" + "nesbot/carbon": "^1.0|^2.0", + "php": ">=5.6", + "symfony/translation": "^2.7|^3.0|^4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0|^5.0", - "satooshi/php-coveralls": "^1.0" + "phpunit/phpunit": "^5.0|^6.0|^7.0", + "satooshi/php-coveralls": "^2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1-dev" + }, + "laravel": { + "providers": [ + "Jenssegers\\Date\\DateServiceProvider" + ], + "aliases": { + "Date": "Jenssegers\\Date\\Date" + } } }, "autoload": { @@ -1958,39 +2644,42 @@ "time", "translation" ], - "time": "2016-10-06 13:59:12" + "support": { + "issues": "https://github.com/jenssegers/date/issues", + "source": "https://github.com/jenssegers/date/tree/master" + }, + "time": "2019-03-10T08:50:58+00:00" }, { - "name": "jeremeamia/SuperClosure", - "version": "2.2.0", + "name": "kylekatarnls/update-helper", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/jeremeamia/super_closure.git", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "429be50660ed8a196e0798e5939760f168ec8ce9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/29a88be2a4846d27c1613aed0c9071dfad7b5938", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/429be50660ed8a196e0798e5939760f168ec8ce9", + "reference": "429be50660ed8a196e0798e5939760f168ec8ce9", "shasum": "" }, "require": { - "nikic/php-parser": "^1.2|^2.0", - "php": ">=5.4", - "symfony/polyfill-php56": "^1.0" + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "2.0.x-dev || ^2.0.0-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" }, - "type": "library", + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } + "class": "UpdateHelper\\ComposerPlugin" }, "autoload": { - "psr-4": { - "SuperClosure\\": "src/" + "psr-0": { + "UpdateHelper\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1999,64 +2688,75 @@ ], "authors": [ { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia", - "role": "Developer" + "name": "Kyle", + "email": "kylekatarnls@gmail.com" } ], - "description": "Serialize Closure objects, including their context and binding", - "homepage": "https://github.com/jeremeamia/super_closure", - "keywords": [ - "closure", - "function", - "lambda", - "parser", - "serializable", - "serialize", - "tokenizer" + "description": "Update helper", + "support": { + "issues": "https://github.com/kylekatarnls/update-helper/issues", + "source": "https://github.com/kylekatarnls/update-helper/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } ], - "time": "2015-12-05 17:17:57" + "time": "2020-04-07T20:44:10+00:00" }, { "name": "laravel/framework", - "version": "v5.3.19", + "version": "v5.7.29", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f1a5bb417b3e0d1949fe84617eacd1a14d75d7f1" + "reference": "2555bf6ef6e6739e5f49f4a5d40f6264c57abd56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f1a5bb417b3e0d1949fe84617eacd1a14d75d7f1", - "reference": "f1a5bb417b3e0d1949fe84617eacd1a14d75d7f1", + "url": "https://api.github.com/repos/laravel/framework/zipball/2555bf6ef6e6739e5f49f4a5d40f6264c57abd56", + "reference": "2555bf6ef6e6739e5f49f4a5d40f6264c57abd56", "shasum": "" }, "require": { - "classpreloader/classpreloader": "~3.0", - "doctrine/inflector": "~1.0", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", - "jeremeamia/superclosure": "~2.2", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", - "psy/psysh": "0.7.*", - "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.1", - "symfony/console": "3.1.*", - "symfony/debug": "3.1.*", - "symfony/finder": "3.1.*", - "symfony/http-foundation": "3.1.*", - "symfony/http-kernel": "3.1.*", - "symfony/process": "3.1.*", - "symfony/routing": "3.1.*", - "symfony/translation": "3.1.*", - "symfony/var-dumper": "3.1.*", - "vlucas/phpdotenv": "~2.2" + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", + "league/flysystem": "^1.0.8", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", + "php": "^7.1.3", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", + "vlucas/phpdotenv": "^2.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" }, "replace": { "illuminate/auth": "self.version", @@ -2071,7 +2771,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -2087,36 +2786,50 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "mockery/mockery": "~0.9.4", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.4", - "predis/predis": "~1.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.1.4", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", + "predis/predis": "^1.1.1", + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", - "symfony/psr-http-message-bridge": "Required to use psr7 bridging features (0.2.*)." + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -2144,126 +2857,111 @@ "framework", "laravel" ], - "time": "2016-10-17 19:35:14" + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2020-04-14T14:16:19+00:00" }, { - "name": "league/commonmark", - "version": "0.13.4", + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "83f8210427fb01f671e272bb8d44b4ed3a94d459" + "url": "https://github.com/laravel/vonage-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/83f8210427fb01f671e272bb8d44b4ed3a94d459", - "reference": "83f8210427fb01f671e272bb8d44b4ed3a94d459", + "url": "https://api.github.com/repos/laravel/vonage-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=5.4.8" - }, - "replace": { - "colinodell/commonmark-php": "*" + "nexmo/client": "^1.0", + "php": "^7.1.3" }, "require-dev": { - "cebe/markdown": "~1.0", - "erusev/parsedown": "~1.0", - "jgm/commonmark": "0.25", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "~1.2.0", - "phpunit/phpunit": "~4.3|~5.0", - "scrutinizer/ocular": "~1.1", - "symfony/finder": "~2.3|~3.0" - }, - "suggest": { - "league/commonmark-extras": "Library of useful extensions including smart punctuation" + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" }, - "bin": [ - "bin/commonmark" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "0.14-dev" + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] } }, "autoload": { "psr-4": { - "League\\CommonMark\\": "src/" + "Illuminate\\Notifications\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Markdown parser for PHP based on the CommonMark spec", - "homepage": "https://github.com/thephpleague/commonmark", + "description": "Nexmo Notification Channel for laravel.", "keywords": [ - "commonmark", - "markdown", - "parser" + "laravel", + "nexmo", + "notifications" ], - "time": "2016-06-14 14:49:29" + "support": { + "issues": "https://github.com/laravel/vonage-notification-channel/issues", + "source": "https://github.com/laravel/vonage-notification-channel/tree/v1.0.1" + }, + "abandoned": "laravel/vonage-notification-channel", + "time": "2018-12-04T12:57:08+00:00" }, { - "name": "league/flysystem", - "version": "1.0.32", + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "1b5c4a0031697f46e779a9d1b309c2e1b24daeab" + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1b5c4a0031697f46e779a9d1b309c2e1b24daeab", - "reference": "1b5c4a0031697f46e779a9d1b309c2e1b24daeab", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", "shasum": "" }, "require": { - "php": ">=5.5.9" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" }, "require-dev": { - "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" - }, - "suggest": { - "ext-fileinfo": "Required for MimeType", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", - "league/flysystem-dropbox": "Allows you to use Dropbox storage", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] } }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "Illuminate\\Notifications\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2272,69 +2970,64 @@ ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frenky.net" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "Slack Notification Channel for laravel.", "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" + "laravel", + "notifications", + "slack" ], - "time": "2016-10-19 20:38:46" + "support": { + "issues": "https://github.com/laravel/slack-notification-channel/issues", + "source": "https://github.com/laravel/slack-notification-channel/tree/1.0" + }, + "time": "2018-12-12T13:12:06+00:00" }, { - "name": "mccool/laravel-auto-presenter", - "version": "4.3.0", + "name": "laravel/tinker", + "version": "v1.0.10", "source": { "type": "git", - "url": "https://github.com/laravel-auto-presenter/laravel-auto-presenter.git", - "reference": "08ce32a41aa5d6c842b4cc19ae442e211cb3dd96" + "url": "https://github.com/laravel/tinker.git", + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel-auto-presenter/laravel-auto-presenter/zipball/08ce32a41aa5d6c842b4cc19ae442e211cb3dd96", - "reference": "08ce32a41aa5d6c842b4cc19ae442e211cb3dd96", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7", + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7", "shasum": "" }, "require": { - "illuminate/container": "5.1.*|5.2.*|5.3.*", - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/events": "5.1.*|5.2.*|5.3.*", - "illuminate/pagination": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "illuminate/view": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" + "illuminate/console": "~5.1|^6.0", + "illuminate/contracts": "~5.1|^6.0", + "illuminate/support": "~5.1|^6.0", + "php": ">=5.5.9", + "psy/psysh": "0.7.*|0.8.*|0.9.*", + "symfony/var-dumper": "~3.0|~4.0" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" + "phpunit/phpunit": "~4.0|~5.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (~5.1)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] } }, "autoload": { "psr-4": { - "McCool\\LaravelAutoPresenter\\": "src/" + "Laravel\\Tinker\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2343,181 +3036,244 @@ ], "authors": [ { - "name": "Shawn McCool", - "email": "shawn@heybigname.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "A system for auto-decorating models with presenter objects.", + "description": "Powerful REPL for the Laravel framework.", "keywords": [ - "eloquent", + "REPL", + "Tinker", "laravel", - "lpm", - "presenter" + "psysh" ], - "time": "2016-05-01 15:29:13" + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v1.0.10" + }, + "time": "2019-08-07T15:10:45+00:00" }, { - "name": "monolog/monolog", - "version": "1.21.0", + "name": "lcobucci/jwt", + "version": "3.4.6", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" + "url": "https://github.com/lcobucci/jwt.git", + "reference": "3ef8657a78278dfeae7707d51747251db4176240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/3ef8657a78278dfeae7707d51747251db4176240", + "reference": "3ef8657a78278dfeae7707d51747251db4176240", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "~5.3" + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" }, "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "lcobucci/clock": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.1-dev" } }, "autoload": { + "files": [ + "compat/class-aliases.php", + "compat/json-exception-polyfill.php", + "compat/lcobucci-clock-polyfill.php" + ], "psr-4": { - "Monolog\\": "src/Monolog" + "Lcobucci\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "description": "A simple library to work with JSON Web Token and JSON Web Signature", "keywords": [ - "log", - "logging", - "psr-3" + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/3.4.6" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } ], - "time": "2016-07-29 03:23:52" + "time": "2021-09-28T19:18:28+00:00" }, { - "name": "mtdowling/cron-expression", - "version": "v1.1.0", + "name": "league/commonmark", + "version": "1.6.7", "source": { "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" }, + "bin": [ + "bin/commonmark" + ], "type": "library", "autoload": { - "psr-0": { - "Cron": "src/" + "psr-4": { + "League\\CommonMark\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" } ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", "keywords": [ - "cron", - "schedule" + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } ], - "time": "2016-01-26 21:23:30" + "time": "2022-01-13T17:18:13+00:00" }, { - "name": "mtdowling/jmespath.php", - "version": "2.3.0", + "name": "league/flysystem", + "version": "1.0.70", "source": { "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "192f93e43c2c97acde7694993ab171b3de284093" + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/192f93e43c2c97acde7694993ab171b3de284093", - "reference": "192f93e43c2c97acde7694993ab171b3de284093", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/585824702f534f8d3cf7fab7225e8466cc4b7493", + "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493", "shasum": "" }, "require": { - "php": ">=5.4.0" + "ext-fileinfo": "*", + "php": ">=5.5.9" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpspec/phpspec": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "phpunit/phpunit": "^5.7.26" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, - "bin": [ - "bin/jp.php" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "JmesPath\\": "src/" - }, - "files": [ - "src/JmesPath.php" - ] + "League\\Flysystem\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2525,43 +3281,85 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Frank de Jonge", + "email": "info@frenky.net" } ], - "description": "Declaratively specify how to extract elements from a JSON document", + "description": "Filesystem abstraction: Many filesystems, one API.", "keywords": [ - "json", - "jsonpath" + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.0.70" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } ], - "time": "2016-01-05 18:25:05" + "time": "2020-07-26T07:20:36+00:00" }, { - "name": "nesbot/carbon", - "version": "1.21.0", + "name": "mccool/laravel-auto-presenter", + "version": "7.7.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" + "url": "https://github.com/laravel-auto-presenter/laravel-auto-presenter.git", + "reference": "e139110a82c8a1573d4015b4f6d600d79e1d33e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", + "url": "https://api.github.com/repos/laravel-auto-presenter/laravel-auto-presenter/zipball/e139110a82c8a1573d4015b4f6d600d79e1d33e5", + "reference": "e139110a82c8a1573d4015b4f6d600d79e1d33e5", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6|~3.0" + "illuminate/container": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0", + "illuminate/events": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0", + "illuminate/pagination": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0", + "illuminate/view": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0", + "php": "^7.1.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "graham-campbell/testbench": "^5.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.7-dev" + }, + "laravel": { + "providers": [ + "McCool\\LaravelAutoPresenter\\AutoPresenterServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "McCool\\LaravelAutoPresenter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2570,99 +3368,163 @@ ], "authors": [ { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "name": "Shawn McCool", + "email": "shawn@mccool.email", + "homepage": "https://github.com/ShawnMcCool" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "A system for auto-decorating models with presenter objects.", "keywords": [ - "date", - "datetime", - "time" + "eloquent", + "laravel", + "lpm", + "presenter" + ], + "support": { + "issues": "https://github.com/laravel-auto-presenter/laravel-auto-presenter/issues", + "source": "https://github.com/laravel-auto-presenter/laravel-auto-presenter/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/mccool/laravel-auto-presenter", + "type": "tidelift" + } ], - "time": "2015-11-04 20:07:17" + "time": "2022-02-09T09:14:24+00:00" }, { - "name": "nikic/php-parser", - "version": "v2.1.1", + "name": "monolog/monolog", + "version": "1.27.1", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" + "url": "https://github.com/Seldaek/monolog.git", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.4" + "php": ">=5.3.0", + "psr/log": "~1.0" }, - "require-dev": { - "phpunit/phpunit": "~4.0" + "provide": { + "psr/log-implementation": "1.0.0" }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "~4.5", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "A PHP parser written in PHP", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", "keywords": [ - "parser", - "php" + "log", + "logging", + "psr-3" ], - "time": "2016-09-16 12:04:44" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.27.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-06-09T08:53:42+00:00" }, { - "name": "paragonie/random_compat", - "version": "v2.0.3", + "name": "mtdowling/jmespath.php", + "version": "2.6.1", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "c0125896dbb151380ab47e96c621741e79623beb" + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c0125896dbb151380ab47e96c621741e79623beb", - "reference": "c0125896dbb151380ab47e96c621741e79623beb", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^5.4 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "composer/xdebug-handler": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^7.5.15" }, + "bin": [ + "bin/jp.php" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, "autoload": { "files": [ - "lib/random.php" - ] + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2670,101 +3532,167 @@ ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Declaratively specify how to extract elements from a JSON document", "keywords": [ - "csprng", - "pseudorandom", - "random" + "json", + "jsonpath" ], - "time": "2016-10-17 15:23:22" + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + }, + "time": "2021-06-14T00:11:39+00:00" }, { - "name": "pragmarx/google2fa", - "version": "v0.7.1", + "name": "nesbot/carbon", + "version": "1.39.1", "source": { "type": "git", - "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "908678ba9b26cf8ecd7ddca6bfd86afc5b4874df" + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/908678ba9b26cf8ecd7ddca6bfd86afc5b4874df", - "reference": "908678ba9b26cf8ecd7ddca6bfd86afc5b4874df", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33", + "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33", "shasum": "" }, "require": { - "christian-riesen/base32": "~1.0", - "php": ">=5.3.7", - "simplesoftwareio/simple-qrcode": "1.3.*" + "kylekatarnls/update-helper": "^1.1", + "php": ">=5.3.9", + "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { - "phpspec/phpspec": "~2.1" + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { - "component": "package", - "frameworks": [ - "Laravel" - ] + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } }, "autoload": { "psr-4": { - "PragmaRX\\Google2FA\\": "src/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Antonio Carlos Ribeiro", - "email": "acr@antoniocarlosribeiro.com", - "role": "Creator & Designer" + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" } ], - "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", "keywords": [ - "Authentication", - "Two Factor Authentication", - "google2fa", - "laravel" + "date", + "datetime", + "time" ], - "time": "2015-11-07 13:57:42" + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "time": "2019-10-14T05:51:36+00:00" }, { - "name": "predis/predis", - "version": "v1.1.1", + "name": "nexmo/client", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/nrk/predis.git", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" + "url": "https://github.com/Nexmo/nexmo-php-complete.git", + "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", + "url": "https://api.github.com/repos/Nexmo/nexmo-php-complete/zipball/c6d11d953c8c5594590bb9ebaba9616e76948f93", + "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93", "shasum": "" }, "require": { - "php": ">=5.3.9" + "nexmo/client-core": "^1.0", + "php": ">=5.6", + "php-http/guzzle6-adapter": "^1.0" }, - "require-dev": { - "phpunit/phpunit": "~4.8" + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + }, + { + "name": "Michael Heap", + "email": "michael.heap@vonage.com", + "role": "Developer" + }, + { + "name": "Lorna Mitchell", + "email": "lorna.mitchell@vonage.com", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "support": { + "email": "devrel@nexmo.com", + "source": "https://github.com/Nexmo/nexmo-php-complete/tree/1.9.1" }, - "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + "time": "2019-11-26T15:25:11+00:00" + }, + { + "name": "nexmo/client-core", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" }, "type": "library", "autoload": { "psr-4": { - "Predis\\": "src/" + "Nexmo\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2773,96 +3701,108 @@ ], "authors": [ { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net" + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" } ], - "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "homepage": "http://github.com/nrk/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "time": "2016-06-16 16:22:20" + "description": "PHP Client for using Nexmo's API.", + "support": { + "email": "devrel@nexmo.com", + "source": "https://github.com/Nexmo/nexmo-php/tree/1.8.1" + }, + "time": "2019-05-13T20:27:43+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "nikic/php-parser", + "version": "v4.17.1", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Nikita Popov" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "A PHP parser written in PHP", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "parser", + "php" ], - "time": "2016-08-06 14:39:51" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + }, + "time": "2023-08-13T19:53:39+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "opis/closure", + "version": "3.6.3", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/opis/closure.git", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.6.x-dev" } }, "autoload": { + "files": [ + "functions.php" + ], "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Opis\\Closure\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2871,68 +3811,55 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", "keywords": [ - "log", - "psr", - "psr-3" + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" ], - "time": "2016-10-10 12:19:37" + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" + }, + "time": "2022-01-27T09:35:39+00:00" }, { - "name": "psy/psysh", - "version": "v0.7.2", + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1", - "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "^1.2.1|~2.0", - "php": ">=5.3.9", - "symfony/console": "~2.3.10|^2.4.2|~3.0", - "symfony/var-dumper": "~2.7|~3.0" + "php": "^7|^8" }, "require-dev": { - "fabpot/php-cs-fixer": "~1.5", - "phpunit/phpunit": "~3.7|~4.0|~5.0", - "squizlabs/php_codesniffer": "~2.0", - "symfony/finder": "~2.1|~3.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" }, - "bin": [ - "bin/psysh" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.8.x-dev" - } - }, "autoload": { - "files": [ - "src/Psy/functions.php" - ], "psr-4": { - "Psy\\": "src/Psy/" + "ParagonIE\\ConstantTime\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2941,71 +3868,76 @@ ], "authors": [ { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" } ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", "keywords": [ - "REPL", - "console", - "interactive", - "shell" + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" ], - "time": "2016-03-09 05:03:14" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" }, { - "name": "ramsey/uuid", - "version": "3.5.1", + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "a07797b986671b0dc823885a81d5e3516b931599" + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/a07797b986671b0dc823885a81d5e3516b931599", - "reference": "a07797b986671b0dc823885a81d5e3516b931599", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0", - "php": ">=5.4" + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" }, - "replace": { - "rhumsaa/uuid": "self.version" + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" }, "require-dev": { - "apigen/apigen": "^4.1", - "codeception/aspect-mock": "1.0.0", - "goaop/framework": "1.0.0-alpha.2", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.4", - "moontoast/math": "^1.1", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", - "satooshi/php-coveralls": "^0.6.1", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.2-dev" } }, "autoload": { "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Http\\Adapter\\Guzzle6\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3014,55 +3946,1452 @@ ], "authors": [ { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" }, { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "support": { + "issues": "https://github.com/php-http/guzzle6-adapter/issues", + "source": "https://github.com/php-http/guzzle6-adapter/tree/master" + }, + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/master" + }, + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/ef4905bfb492ff389eb7f12e26925a0f20073050", + "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.2.0" + }, + "time": "2023-10-24T09:20:26+00:00" + }, + { + "name": "pragmarx/google2fa", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/17c969c82f427dd916afe4be50bafc6299aef1b4", + "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "~1.0|~2.0", + "paragonie/random_compat": ">=1", + "php": ">=5.4", + "symfony/polyfill-php56": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5|~6" + }, + "type": "library", + "extra": { + "component": "package", + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PragmaRX\\Google2FA\\": "src/", + "PragmaRX\\Google2FA\\Tests\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/master" + }, + "time": "2019-03-19T22:44:16+00:00" + }, + { + "name": "predis/predis", + "version": "v1.1.10", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e", + "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net", + "role": "Creator & Maintainer" + }, + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v1.1.10" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2022-01-05T17:46:08+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.9.12", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "90da7f37568aee36b116a030c5f99c915267edd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4", + "reference": "90da7f37568aee36b116a030c5f99c915267edd4", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1.*", + "ext-json": "*", + "ext-tokenizer": "*", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", + "php": ">=5.4.0", + "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0", + "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "~2.15|~3.16", + "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.9.12" + }, + "time": "2019-12-06T14:19:43+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.9.7", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/dc75aa439eb4c1b77f5379fd958b3dc0e6014178", + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178", + "shasum": "" + }, + "require": { + "ext-json": "*", + "paragonie/random_compat": "^1 | ^2 | ^9.99.99", + "php": "^5.4 | ^7.0 | ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | >=2.1.0 <=2.3.2", + "mockery/mockery": "^0.9.11 | ^1", + "moontoast/math": "^1.1", + "nikic/php-parser": "<=4.5.0", + "paragonie/random-lib": "^2", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1 | ^2.6", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpunit/phpunit": ">=4.8.36 <9.0.0 | >=9.3.0", + "squizlabs/php_codesniffer": "^3.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid", + "wiki": "https://github.com/ramsey/uuid/wiki" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2022-12-19T21:55:10+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" + }, + { + "name": "symfony/console", + "version": "v4.4.49", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.49" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-05T17:10:16+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "1a692492190773c5310bc7877cb590c04c2f05be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/1a692492190773c5310bc7877cb590c04c2f05be", + "reference": "1a692492190773c5310bc7877cb590c04c2f05be", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "Provides tools to ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "abandoned": "symfony/error-handler", + "time": "2022-07-28T16:29:46+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "be731658121ef2d8be88f3a1ec938148a9237291" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/be731658121ef2d8be88f3a1ec938148a9237291", + "reference": "be731658121ef2d8be88f3a1ec938148a9237291", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "^1|^2|^3", + "symfony/debug": "^4.4.5", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-28T16:29:46+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "guid", - "identifier", - "uuid" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:41:36+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.44", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:35:46+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v1.1.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "59f37624a82635962f04c98f31aed122e539a89e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/59f37624a82635962f04c98f31aed122e539a89e", + "reference": "59f37624a82635962f04c98f31aed122e539a89e", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-10-02 15:51:17" + "time": "2022-04-11T14:52:04+00:00" }, { - "name": "roumen/feed", - "version": "v2.10.4", + "name": "symfony/http-foundation", + "version": "v4.4.49", "source": { "type": "git", - "url": "https://github.com/RoumenDamianoff/laravel-feed.git", - "reference": "900594412cab37515b2b53c8953af1201024e48d" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "191413c7b832c015bb38eae963f2e57498c3c173" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/RoumenDamianoff/laravel-feed/zipball/900594412cab37515b2b53c8953af1201024e48d", - "reference": "900594412cab37515b2b53c8953af1201024e48d", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/191413c7b832c015bb38eae963f2e57498c3c173", + "reference": "191413c7b832c015bb38eae963f2e57498c3c173", "shasum": "" }, "require": { - "illuminate/support": "^5.0", - "php": ">=5.5.9" + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "orchestra/testbench": "^3.0", - "phpunit/phpunit": "^4.8" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "autoload": { - "psr-0": { - "Roumen\\Feed": "src/" - } + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3070,52 +5399,103 @@ ], "authors": [ { - "name": "Roumen Damianoff", - "email": "roumen@dawebs.com", - "homepage": "https://roumen.it", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A simple feed generator for Laravel.", - "homepage": "https://roumen.it/projects/laravel-feed", - "keywords": [ - "atom", - "feed", - "generator", - "laravel", - "rss" + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v4.4.49" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-07-17 13:06:35" + "time": "2022-11-04T16:17:57+00:00" }, { - "name": "simplesoftwareio/simple-qrcode", - "version": "1.3.3", + "name": "symfony/http-kernel", + "version": "v4.4.50", "source": { "type": "git", - "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git", - "reference": "17c5e45c79c40f717d4bc08cf5e568f29ebf9333" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/17c5e45c79c40f717d4bc08cf5e568f29ebf9333", - "reference": "17c5e45c79c40f717d4bc08cf5e568f29ebf9333", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa6df6c045f034aa13ac752fc234bb300b9488ef", + "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "1.0.*", - "ext-gd": "*", - "illuminate/support": ">=4.2.0", - "php": ">=5.4.0" + "php": ">=7.1.3", + "psr/log": "^1|^2", + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^4.4.30|^5.3.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/console": ">=5", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "twig/twig": "<1.43|<2.13,>=2" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "4.7.*" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" }, "type": "library", "autoload": { - "psr-0": { - "SimpleSoftwareIO\\QrCode\\": "src" - } + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3123,50 +5503,70 @@ ], "authors": [ { - "name": "Simple Software LLC", - "email": "support@simplesoftware.io" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple QrCode is a QR code generator made for Laravel.", - "homepage": "http://www.simplesoftware.io", - "keywords": [ - "Simple", - "generator", - "laravel", - "qrcode", - "wrapper" + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v4.4.50" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-01-31 02:09:25" + "time": "2023-02-01T08:01:31+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.3", + "name": "symfony/mime", + "version": "v4.4.47", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153" + "url": "https://github.com/symfony/mime.git", + "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", + "url": "https://api.github.com/repos/symfony/mime/zipball/0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d", + "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "symfony/mailer": "<4.4" }, "require-dev": { - "mockery/mockery": "~0.9.1" + "egulias/email-validator": "^2.1.10|^3.1", + "symfony/dependency-injection": "^3.4|^4.1|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.4-dev" - } - }, "autoload": { - "files": [ - "lib/swift_required.php" + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3174,65 +5574,80 @@ "MIT" ], "authors": [ - { - "name": "Chris Corbyn" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", "keywords": [ - "email", - "mail", - "mailer" + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-07-08 11:51:25" + "time": "2022-10-03T15:15:11+00:00" }, { - "name": "symfony/console", - "version": "v3.1.5", + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "6cb0872fb57b38b3b09ff213c21ed693956b9eb0" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/6cb0872fb57b38b3b09ff213c21ed693956b9eb0", - "reference": "6cb0872fb57b38b3b09ff213c21ed693956b9eb0", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1" }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "provide": { + "ext-ctype": "*" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3240,48 +5655,81 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/css-selector", - "version": "v3.1.5", + "name": "symfony/polyfill-iconv", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ca809c64072e0fe61c1c7fb3c76cdc32265042ac", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Iconv\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3289,60 +5737,81 @@ ], "authors": [ { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Symfony polyfill for the Iconv extension", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/debug", - "version": "v3.1.5", + "name": "symfony/polyfill-intl-idn", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3350,58 +5819,86 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:30:37+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v3.1.5", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "php": ">=7.1" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3410,48 +5907,69 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", - "time": "2016-07-19 10:45:57" + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/finder", - "version": "v3.1.5", + "name": "symfony/polyfill-php56", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", "shasum": "" }, "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } + "php": ">=7.1" }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3459,52 +5977,75 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/http-foundation", - "version": "v3.1.5", + "name": "symfony/polyfill-php72", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "5114f1becca9f29e3af94374f1689c83c1aa3d97" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5114f1becca9f29e3af94374f1689c83c1aa3d97", - "reference": "5114f1becca9f29e3af94374f1689c83c1aa3d97", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.1" - }, - "require-dev": { - "symfony/expression-language": "~2.8|~3.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3512,80 +6053,77 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2016-09-21 20:55:10" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/http-kernel", - "version": "v3.1.5", + "name": "symfony/polyfill-php73", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "dc339d6eebadfa6e39c52868b4d4a715eff13c69" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc339d6eebadfa6e39c52868b4d4a715eff13c69", - "reference": "dc339d6eebadfa6e39c52868b4d4a715eff13c69", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" - }, - "conflict": { - "symfony/config": "<2.8" - }, - "require-dev": { - "symfony/browser-kit": "~2.8|~3.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/dom-crawler": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0", - "symfony/routing": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0", - "symfony/templating": "~2.8|~3.0", - "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~2.8|~3.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/class-loader": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3594,50 +6132,77 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpKernel Component", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2016-10-03 19:01:06" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.2.0", + "name": "symfony/polyfill-php80", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "dff51f72b0706335131b00a7f49606168c582594" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", - "reference": "dff51f72b0706335131b00a7f49606168c582594", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3645,6 +6210,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3654,47 +6223,58 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", "polyfill", "portable", "shim" ], - "time": "2016-05-18 14:26:46" + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.2.0", + "name": "symfony/process", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" + "url": "https://github.com/symfony/process.git", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", + "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" + "Symfony\\Component\\Process\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3703,51 +6283,82 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "support": { + "source": "https://github.com/symfony/process/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-05-18 14:26:46" + "time": "2022-06-27T13:16:42+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.2.0", + "name": "symfony/routing", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" + "url": "https://github.com/symfony/routing.git", + "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", + "url": "https://api.github.com/repos/symfony/routing/zipball/f7751fd8b60a07f3f349947a309b5bdfce22d6ae", + "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "psr/log": "^1|^2|^3", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3755,54 +6366,76 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v4.4.44" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-05-18 14:26:46" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "symfony/process", - "version": "v3.1.5", + "name": "symfony/service-contracts", + "version": "v1.1.13", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", + "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Service\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3810,64 +6443,92 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-27T14:01:05+00:00" }, { - "name": "symfony/routing", - "version": "v3.1.5", + "name": "symfony/translation", + "version": "v4.4.47", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" + "url": "https://github.com/symfony/translation.git", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", + "url": "https://api.github.com/repos/symfony/translation/zipball/45036b1d53accc48fe9bab71ccd86d57eba0dd94", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "symfony/translation-implementation": "1.0|2.0" }, "require-dev": { - "doctrine/annotations": "~1.0", - "doctrine/common": "~2.2", - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/finder": "~2.8|~3.0|~4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" + "Symfony\\Component\\Translation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3883,65 +6544,65 @@ "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "time": "2016-08-16 14:58:24" + "time": "2022-10-03T15:15:11+00:00" }, { - "name": "symfony/translation", - "version": "v3.1.5", + "name": "symfony/translation-contracts", + "version": "v1.1.13", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "93013a18d272e59dab8e67f583155b78c68947eb" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "7462e5c4cb8b9cd152f992e8f10963b5641921f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/93013a18d272e59dab8e67f583155b78c68947eb", - "reference": "93013a18d272e59dab8e67f583155b78c68947eb", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/7462e5c4cb8b9cd152f992e8f10963b5641921f6", + "reference": "7462e5c4cb8b9cd152f992e8f10963b5641921f6", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<2.8" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "php": ">=7.1.3" }, "suggest": { - "psr/log": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/translation-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Translation\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3949,48 +6610,82 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Translation Component", + "description": "Generic abstractions related to translation", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.1.5", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "70bfe927b86ba9999aeebd829715b0bb2cd39a10" + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/70bfe927b86ba9999aeebd829715b0bb2cd39a10", - "reference": "70bfe927b86ba9999aeebd829715b0bb2cd39a10", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { - "twig/twig": "~1.20|~2.0" + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" }, "suggest": { - "ext-symfony_debug": "" + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { "files": [ "Resources/functions/dump.php" @@ -4016,39 +6711,58 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ "debug", "dump" ], - "time": "2016-09-29 14:13:09" + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-03T15:15:11+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "1.5.5", + "version": "2.2.6", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3" + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/9753fc340726e327e4d48b7c0604f85475ae0bc3", - "reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/css-selector": "~2.1|~3.0" + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -4058,7 +6772,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "authors": [ { @@ -4069,38 +6783,48 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2015-12-08 16:14:14" + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" }, { "name": "twig/twig", - "version": "v1.26.1", + "version": "v2.15.5", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a09d8ee17ac1cfea29ed60c83960ad685c6a898d" + "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a09d8ee17ac1cfea29ed60c83960ad685c6a898d", - "reference": "a09d8ee17ac1cfea29ed60c83960ad685c6a898d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/fc02a6af3eeb97c4bf5650debc76c2eda85ac22e", + "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.8" }, "require-dev": { - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.26-dev" + "dev-master": "2.15-dev" } }, "autoload": { "psr-0": { "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4114,48 +6838,68 @@ "homepage": "http://fabien.potencier.org", "role": "Lead Developer" }, + { + "name": "Twig Team", + "role": "Contributors" + }, { "name": "Armin Ronacher", "email": "armin.ronacher@active-4.com", "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" } ], "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", + "homepage": "https://twig.symfony.com", "keywords": [ "templating" ], - "time": "2016-10-05 18:57:41" + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v2.15.5" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-05-03T17:49:41+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.4.0", + "version": "v2.6.9", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" + "reference": "2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141", + "reference": "2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^5.3.9 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -4165,13 +6909,18 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause-Attribution" + "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://github.com/vlucas" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4180,42 +6929,126 @@ "env", "environment" ], - "time": "2016-09-01 10:05:43" + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v2.6.9" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T22:59:22+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "de5847b068362a88684a55b0dbb40d85986cfa52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/de5847b068362a88684a55b0dbb40d85986cfa52", + "reference": "de5847b068362a88684a55b0dbb40d85986cfa52", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "support": { + "docs": "https://docs.zendframework.com/zend-diactoros/", + "forum": "https://discourse.zendframework.com/c/questions/exprssive", + "issues": "https://github.com/zendframework/zend-diactoros/issues", + "rss": "https://github.com/zendframework/zend-diactoros/releases.atom", + "slack": "https://zendframework-slack.herokuapp.com", + "source": "https://github.com/zendframework/zend-diactoros" + }, + "abandoned": "laminas/laminas-diactoros", + "time": "2019-11-13T19:16:13+00:00" } ], "packages-dev": [ { "name": "alt-three/testbench", - "version": "v1.9.0", + "version": "5.0.x-dev", "source": { "type": "git", "url": "https://github.com/AltThree/TestBench.git", - "reference": "51b9d3aa9b2cd6d00ee72e018089df4c60913825" + "reference": "246d9744ec1cde265e5ea40c7cd4eebd5577b601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltThree/TestBench/zipball/51b9d3aa9b2cd6d00ee72e018089df4c60913825", - "reference": "51b9d3aa9b2cd6d00ee72e018089df4c60913825", + "url": "https://api.github.com/repos/AltThree/TestBench/zipball/246d9744ec1cde265e5ea40c7cd4eebd5577b601", + "reference": "246d9744ec1cde265e5ea40c7cd4eebd5577b601", "shasum": "" }, "require": { - "graham-campbell/testbench-core": "^1.1", - "php": ">=5.5.9" + "graham-campbell/testbench-core": "^3.2", + "php": "^7.0 || ^8.0" }, "require-dev": { - "nikic/php-parser": "^2.0", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0" }, "suggest": { - "laravel/framework": "Enables the use of every trait.", - "nikic/php-parser": "Enables the use of the static analyzer." + "laravel/framework": "Enables the use of most traits." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "psr-4": { "AltThree\\TestBench\\": "src/" @@ -4227,56 +7060,130 @@ ], "authors": [ { - "name": "James Brooks", - "email": "james@alt-three.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - }, - { - "name": "Joseph Cohen", - "email": "joe@alt-three.com" + "name": "Alt Three", + "email": "support@alt-three.com" } ], - "description": "Provides Some Testing Traits For Apps", + "description": "Provides some testing traits for apps", "keywords": [ "Alt Three", "TestBench", "app" ], - "time": "2016-08-25 14:09:25" + "support": { + "issues": "https://github.com/AltThree/TestBench/issues", + "source": "https://github.com/AltThree/TestBench/tree/5.0" + }, + "abandoned": true, + "time": "2021-03-29T11:19:11+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "barryvdh/laravel-debugbar", + "version": "v3.4.2", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/91ee8b3acf0d72a4937f4855bd245acbda9910ac", + "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "illuminate/routing": "^5.5|^6|^7", + "illuminate/session": "^5.5|^6|^7", + "illuminate/support": "^5.5|^6|^7", + "maximebf/debugbar": "^1.16.3", + "php": ">=7.0", + "symfony/debug": "^3|^4|^5", + "symfony/finder": "^3|^4|^5" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "orchestra/testbench": "^3.5|^4.0|^5.0", + "phpunit/phpunit": "^6.0|^7.0|^8.5|^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.2-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facade" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/3.4" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" } + ], + "time": "2020-08-30T07:08:17+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, + "type": "library", "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -4290,52 +7197,137 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.3" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-07-13T12:00:00+00:00" }, { - "name": "filp/whoops", - "version": "2.1.4", + "name": "fzaninotto/faker", + "version": "v1.9.2", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "3f5cbd0e6a2fc17bc40b0238025ef1ff4c8c3efa" + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/3f5cbd0e6a2fc17bc40b0238025ef1ff4c8c3efa", - "reference": "3f5cbd0e6a2fc17bc40b0238025ef1ff4c8c3efa", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", - "symfony/var-dumper": "^2.6 || ^3.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Whoops\\": "src/Whoops/" + "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4344,52 +7336,57 @@ ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "name": "François Zaninotto" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "error", - "exception", - "handling", - "library", - "whoops", - "zf2" + "data", + "faker", + "fixtures" ], - "time": "2016-10-11 15:32:23" + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + }, + "abandoned": true, + "time": "2020-12-11T09:56:16+00:00" }, { - "name": "fzaninotto/faker", - "version": "v1.6.0", + "name": "graham-campbell/analyzer", + "version": "v2.4.3", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123" + "url": "https://github.com/GrahamCampbell/Analyzer.git", + "reference": "baecd15b7e1185075a8db63ca1806c555cd60bc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123", - "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123", + "url": "https://api.github.com/repos/GrahamCampbell/Analyzer/zipball/baecd15b7e1185075a8db63ca1806c555cd60bc8", + "reference": "baecd15b7e1185075a8db63ca1806c555cd60bc8", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "nikic/php-parser": "^3.0|^4.0", + "php": "^7.0|^8.0", + "phpdocumentor/reflection-docblock": "^4.2", + "phpdocumentor/type-resolver": "~0.4|^1.0" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "phpunit/phpunit": "^6.5|^7.5|^8.4|^9.0" + }, + "suggest": { + "phpunit/phpunit": "Required to use the analysis trait." }, "type": "library", "extra": { - "branch-alias": [] + "branch-alias": { + "dev-master": "2.4-dev" + } }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "GrahamCampbell\\Analyzer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4398,36 +7395,55 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Graham Campbell", + "email": "graham@alt-three.com" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Checks if referenced classes really exist.", "keywords": [ - "data", - "faker", - "fixtures" + "Graham Campbell", + "GrahamCampbell", + "analysis", + "analyzer", + "classes", + "testing" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Analyzer/issues", + "source": "https://github.com/GrahamCampbell/Analyzer/tree/v2.4.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/analyzer", + "type": "tidelift" + } ], - "time": "2016-04-29 12:21:54" + "time": "2020-05-02T14:42:06+00:00" }, { "name": "graham-campbell/testbench-core", - "version": "v1.1.1", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-TestBench-Core.git", - "reference": "407e8cff5568ab95c4788ed5f7633e54be712de1" + "reference": "f62a3d0200cbea9f8156ac2cd7d16684ad324c8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-TestBench-Core/zipball/407e8cff5568ab95c4788ed5f7633e54be712de1", - "reference": "407e8cff5568ab95c4788ed5f7633e54be712de1", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-TestBench-Core/zipball/f62a3d0200cbea9f8156ac2cd7d16684ad324c8d", + "reference": "f62a3d0200cbea9f8156ac2cd7d16684ad324c8d", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9.0 || ^10.0" }, "suggest": { "illuminate/support": "Required to use the laravel trait.", @@ -4435,11 +7451,6 @@ "phpunit/phpunit": "Required to use the most of the features." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { "GrahamCampbell\\TestBenchCore\\": "src/" @@ -4452,10 +7463,11 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "TestBench Core Provides Some Testing Functionality For Laravel 5", + "description": "TestBench Core Provides Some Testing Functionality For Laravel", "keywords": [ "Graham Campbell", "GrahamCampbell", @@ -4467,24 +7479,38 @@ "testbench-core", "testing" ], - "time": "2016-01-30 13:57:27" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-TestBench-Core/issues", + "source": "https://github.com/GrahamCampbell/Laravel-TestBench-Core/tree/v3.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/testbench-core", + "type": "tidelift" + } + ], + "time": "2023-02-25T15:19:33+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -4492,54 +7518,126 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, "autoload": { "classmap": [ "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ "test" ], - "time": "2015-05-11 14:41:42" + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "maximebf/debugbar", + "version": "v1.19.1", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "03dd40a1826f4d585ef93ef83afa2a9874a00523" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/03dd40a1826f4d585ef93ef83afa2a9874a00523", + "reference": "03dd40a1826f4d585ef93ef83afa2a9874a00523", + "shasum": "" + }, + "require": { + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": ">=7.5.20 <10.0", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.19.1" + }, + "time": "2023-10-12T08:10:52+00:00" }, { "name": "mockery/mockery", - "version": "0.9.5", + "version": "1.3.6", "source": { "type": "git", - "url": "https://github.com/padraic/mockery.git", - "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2" + "url": "https://github.com/mockery/mockery.git", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2", - "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~1.1", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.3.2" + "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -4563,8 +7661,8 @@ "homepage": "http://davedevelopment.co.uk" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ "BDD", "TDD", @@ -4577,31 +7675,43 @@ "test double", "testing" ], - "time": "2016-05-22 21:52:33" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.6" + }, + "time": "2022-09-07T15:05:49+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.5.4", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/ea74994a3dc7f8d2f65a06009348f2d63c81e61f", - "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } @@ -4611,7 +7721,6 @@ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -4619,39 +7728,154 @@ "object", "object graph" ], - "time": "2016-09-16 13:37:59" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, + "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4673,33 +7897,44 @@ "reflection", "static analysis" ], - "time": "2015-12-27 11:43:31" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" + }, + "time": "2020-04-27T09:25:28+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4718,41 +7953,44 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x" + }, + "time": "2019-12-28T18:55:12+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4765,41 +8003,47 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-06-10 07:14:17" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2" + }, + "time": "2019-08-22T18:11:29+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.6.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4827,44 +8071,48 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + }, + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.1", + "version": "6.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", - "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -4879,7 +8127,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -4890,29 +8138,36 @@ "testing", "xunit" ], - "time": "2016-07-26 14:39:29" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" + }, + "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4927,7 +8182,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -4937,7 +8192,17 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:42:26+00:00" }, { "name": "phpunit/php-text-template", @@ -4978,29 +8243,38 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^8.5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5013,7 +8287,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -5022,33 +8296,43 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:20:02+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.8", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -5071,55 +8355,68 @@ "keywords": [ "tokenizer" ], - "time": "2015-09-15 10:49:45" + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2021-07-26T12:15:06+00:00" }, { "name": "phpunit/phpunit", - "version": "5.6.1", + "version": "7.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "60c32c5b5e79c2248001efa2560f831da11cc2d7" + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/60c32c5b5e79c2248001efa2560f831da11cc2d7", - "reference": "60c32c5b5e79c2248001efa2560f831da11cc2d7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -5127,7 +8424,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -5153,86 +8450,31 @@ "testing", "xunit" ], - "time": "2016-10-07 13:03:26" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2016-10-09 07:01:45" + "time": "2020-01-08T08:45:45+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -5257,34 +8499,44 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.0", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "php": ">=7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5297,6 +8549,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -5308,45 +8564,52 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:31:48+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae", + "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5359,46 +8622,62 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2015-12-08 07:14:41" + "time": "2023-05-07T05:30:20+00:00" }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -5423,34 +8702,44 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:53:42+00:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -5463,6 +8752,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -5471,17 +8764,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -5490,27 +8779,37 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:00:17+00:00" }, { "name": "sebastian/global-state", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" @@ -5518,7 +8817,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5541,33 +8840,38 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + }, + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -5587,32 +8891,42 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" }, { - "name": "sebastian/recursion-context", - "version": "1.0.2", + "name": "sebastian/object-reflector", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -5625,44 +8939,49 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - }, + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" + "time": "2020-11-30T07:37:18+00:00" }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", + "name": "sebastian/recursion-context", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -5678,33 +8997,51 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:34:24+00:00" }, { - "name": "sebastian/version", - "version": "2.0.0", + "name": "sebastian/resource-operations", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5719,139 +9056,134 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:30:19+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v3.1.5", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb7395e8b1db3654de82b9f35d019958276de4d7", - "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "symfony/css-selector": "~2.8|~3.0" - }, - "suggest": { - "symfony/css-selector": "" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2016-08-05 08:37:39" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "symfony/yaml", - "version": "v3.1.5", + "name": "theseer/tokenizer", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/368b9738d4033c8b93454cb0dbd45d305135a6d3", - "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-09-25 08:27:07" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "time": "2019-06-13T22:48:21+00:00" }, { "name": "tightenco/mailthief", - "version": "v0.3.2", + "version": "v0.3.14", "source": { "type": "git", - "url": "https://github.com/tightenco/mailthief.git", - "reference": "a42277459092ae87f5ac11271f969625509f7f49" + "url": "https://github.com/tighten/mailthief.git", + "reference": "9a8c2443be2b3d77753596f70ae6cd879b5b26a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tightenco/mailthief/zipball/a42277459092ae87f5ac11271f969625509f7f49", - "reference": "a42277459092ae87f5ac11271f969625509f7f49", + "url": "https://api.github.com/repos/tighten/mailthief/zipball/9a8c2443be2b3d77753596f70ae6cd879b5b26a6", + "reference": "9a8c2443be2b3d77753596f70ae6cd879b5b26a6", "shasum": "" }, "require": { - "illuminate/mail": "^5.0", - "illuminate/view": "^5.0" + "illuminate/mail": "5.*", + "illuminate/view": "5.*" }, "require-dev": { - "laravel/framework": "^5.1", + "laravel/framework": ">=5.0 <5.5", "mockery/mockery": "^0.9.5", "phpunit/phpunit": "^5.5" }, @@ -5872,35 +9204,38 @@ } ], "description": "A fake Mailer for Laravel applications that takes the pain out of testing mail.", - "time": "2016-10-12 22:32:47" + "support": { + "issues": "https://github.com/tighten/mailthief/issues", + "source": "https://github.com/tighten/mailthief/tree/v0.3.14" + }, + "time": "2018-02-10T04:17:52+00:00" }, { "name": "webmozart/assert", - "version": "1.1.0", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -5922,17 +9257,31 @@ "check", "validate" ], - "time": "2016-08-09 15:02:57" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], + "minimum-stability": "dev", + "stability-flags": { + "alt-three/testbench": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6.4", + "php": "^7.1.3", + "ext-mbstring": "*", + "ext-openssl": "*", "ext-xml": "*" }, - "platform-dev": [] + "platform-dev": { + "ext-sqlite3": "*" + }, + "platform-overrides": { + "php": "7.1.3" + }, + "plugin-api-version": "2.3.0" } diff --git a/config/app.php b/config/app.php index 22316987e183..b9599092fed0 100644 --- a/config/app.php +++ b/config/app.php @@ -47,7 +47,7 @@ | */ - 'debug' => env('APP_DEBUG', false), + 'debug' => (bool) env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- @@ -73,7 +73,7 @@ | */ - 'timezone' => 'UTC', + 'timezone' => env('APP_TIMEZONE', 'UTC'), /* |-------------------------------------------------------------------------- @@ -147,60 +147,57 @@ /* * Laravel Framework Service Providers... */ - 'Illuminate\Auth\AuthServiceProvider', - 'Illuminate\Broadcasting\BroadcastServiceProvider', - 'AltThree\Bus\BusServiceProvider', - 'Illuminate\Cache\CacheServiceProvider', - 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', - 'Illuminate\Cookie\CookieServiceProvider', - 'Illuminate\Database\DatabaseServiceProvider', - 'Illuminate\Encryption\EncryptionServiceProvider', - 'Illuminate\Filesystem\FilesystemServiceProvider', - 'Illuminate\Foundation\Providers\FoundationServiceProvider', - 'Illuminate\Hashing\HashServiceProvider', - 'Illuminate\Mail\MailServiceProvider', + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + AltThree\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, - 'Illuminate\Pagination\PaginationServiceProvider', - 'Illuminate\Pipeline\PipelineServiceProvider', - 'Illuminate\Queue\QueueServiceProvider', - 'Illuminate\Redis\RedisServiceProvider', - 'Illuminate\Auth\Passwords\PasswordResetServiceProvider', - 'Illuminate\Session\SessionServiceProvider', - 'Illuminate\Translation\TranslationServiceProvider', - 'Illuminate\Validation\ValidationServiceProvider', - 'Illuminate\View\ViewServiceProvider', + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, /* * Packages Service Providers... */ - 'AltThree\Badger\BadgerServiceProvider', - 'AltThree\Emoji\EmojiServiceProvider', - 'BackupManager\Laravel\Laravel5ServiceProvider', - 'Barryvdh\Cors\ServiceProvider', - 'Fedeisas\LaravelMailCssInliner\LaravelMailCssInlinerServiceProvider', - 'Fideloper\Proxy\TrustedProxyServiceProvider', - 'GrahamCampbell\Binput\BinputServiceProvider', - 'GrahamCampbell\Exceptions\ExceptionsServiceProvider', - 'GrahamCampbell\Core\CoreServiceProvider', - 'GrahamCampbell\Markdown\MarkdownServiceProvider', - 'GrahamCampbell\Security\SecurityServiceProvider', - 'Jenssegers\Date\DateServiceProvider', - 'McCool\LaravelAutoPresenter\AutoPresenterServiceProvider', - 'PragmaRX\Google2FA\Vendor\Laravel\ServiceProvider', - 'Roumen\Feed\FeedServiceProvider', + env('APP_DEBUG') ? Bugsnag\BugsnagLaravel\BugsnagServiceProvider::class : null, + Barryvdh\Cors\ServiceProvider::class, + env('APP_DEBUG') ? Barryvdh\Debugbar\ServiceProvider::class : null, + CachetHQ\Badger\BadgerServiceProvider::class, + CachetHQ\Emoji\EmojiServiceProvider::class, + CachetHQ\Twitter\TwitterServiceProvider::class, + GrahamCampbell\Binput\BinputServiceProvider::class, + GrahamCampbell\Exceptions\ExceptionsServiceProvider::class, + GrahamCampbell\Markdown\MarkdownServiceProvider::class, + GrahamCampbell\Security\SecurityServiceProvider::class, + Jenssegers\Date\DateServiceProvider::class, + Laravel\Tinker\TinkerServiceProvider::class, + McCool\LaravelAutoPresenter\AutoPresenterServiceProvider::class, /* * Application Service Providers... */ - 'CachetHQ\Cachet\Foundation\Providers\AppServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\ComposerServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\ConsoleServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\ConfigServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\EventServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\IntegrationServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\ModuleServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\RepositoryServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\RouteServiceProvider', + CachetHQ\Cachet\Providers\AppServiceProvider::class, + CachetHQ\Cachet\Providers\ComposerServiceProvider::class, + CachetHQ\Cachet\Providers\ConsoleServiceProvider::class, + CachetHQ\Cachet\Providers\ConfigServiceProvider::class, + CachetHQ\Cachet\Providers\EventServiceProvider::class, + CachetHQ\Cachet\Providers\IntegrationServiceProvider::class, + CachetHQ\Cachet\Providers\RepositoryServiceProvider::class, + CachetHQ\Cachet\Providers\RouteServiceProvider::class, ]), @@ -217,39 +214,41 @@ 'aliases' => [ - 'App' => 'Illuminate\Support\Facades\App', - 'Artisan' => 'Illuminate\Support\Facades\Artisan', - 'Auth' => 'Illuminate\Support\Facades\Auth', - 'Blade' => 'Illuminate\Support\Facades\Blade', - 'Cache' => 'Illuminate\Support\Facades\Cache', - 'Config' => 'Illuminate\Support\Facades\Config', - 'Cookie' => 'Illuminate\Support\Facades\Cookie', - 'Crypt' => 'Illuminate\Support\Facades\Crypt', - 'DB' => 'Illuminate\Support\Facades\DB', - 'Event' => 'Illuminate\Support\Facades\Event', - 'File' => 'Illuminate\Support\Facades\File', - 'Gate' => 'Illuminate\Support\Facades\Gate', - 'Hash' => 'Illuminate\Support\Facades\Hash', - 'Lang' => 'Illuminate\Support\Facades\Lang', - 'Log' => 'Illuminate\Support\Facades\Log', - 'Mail' => 'Illuminate\Support\Facades\Mail', + 'App' => Illuminate\Support\Facades\App::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => 'Illuminate\Support\Facades\Password', - 'Queue' => 'Illuminate\Support\Facades\Queue', - 'Redirect' => 'Illuminate\Support\Facades\Redirect', - 'Redis' => 'Illuminate\Support\Facades\Redis', - 'Request' => 'Illuminate\Support\Facades\Request', - 'Response' => 'Illuminate\Support\Facades\Response', - 'Route' => 'Illuminate\Support\Facades\Route', - 'Schema' => 'Illuminate\Support\Facades\Schema', - 'Session' => 'Illuminate\Support\Facades\Session', - 'Storage' => 'Illuminate\Support\Facades\Storage', - 'URL' => 'Illuminate\Support\Facades\URL', - 'Validator' => 'Illuminate\Support\Facades\Validator', - 'View' => 'Illuminate\Support\Facades\View', - - 'Binput' => 'GrahamCampbell\Binput\Facades\Binput', - 'Str' => 'Illuminate\Support\Str', + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + 'Binput' => GrahamCampbell\Binput\Facades\Binput::class, + 'Str' => Illuminate\Support\Str::class, ], diff --git a/config/avatar.php b/config/avatar.php new file mode 100644 index 000000000000..68590dd603b9 --- /dev/null +++ b/config/avatar.php @@ -0,0 +1,88 @@ + 'gd', + + // Whether all characters supplied must be replaced with their closest ASCII counterparts + 'ascii' => false, + + // Image shape: circle or square + 'shape' => 'circle', + + // Image width, in pixel + 'width' => 100, + + // Image height, in pixel + 'height' => 100, + + // Number of characters used as initials. If name consists of single word, the first N character will be used + 'chars' => 2, + + // font size + 'fontSize' => 48, + + // convert initial letter in uppercase + 'uppercase' => false, + + // Fonts used to render text. + // If contains more than one fonts, randomly selected based on name supplied + // You can provide absolute path, path relative to folder resources/laravolt/avatar/fonts/, or mixed. + 'fonts' => ['OpenSans-Bold.ttf', 'rockwell.ttf'], + + // List of foreground colors to be used, randomly selected based on name supplied + 'foregrounds' => [ + '#FFFFFF', + ], + + // List of background colors to be used, randomly selected based on name supplied + 'backgrounds' => [ + '#f44336', + '#E91E63', + '#9C27B0', + '#673AB7', + '#3F51B5', + '#2196F3', + '#03A9F4', + '#00BCD4', + '#009688', + '#4CAF50', + '#8BC34A', + '#CDDC39', + '#FFC107', + '#FF9800', + '#FF5722', + ], + + 'border' => [ + 'size' => 1, + + // border color, available value are: + // 'foreground' (same as foreground color) + // 'background' (same as background color) + // or any valid hex ('#aabbcc') + 'color' => 'foreground', + ], + +]; diff --git a/config/backup-manager.php b/config/backup-manager.php deleted file mode 100644 index 40c8539bc14a..000000000000 --- a/config/backup-manager.php +++ /dev/null @@ -1,70 +0,0 @@ - [ - 'type' => 'Local', - 'root' => database_path('backups'), - ], - 's3' => [ - 'type' => 'AwsS3', - 'key' => '', - 'secret' => '', - 'region' => 'us-east-1', - 'bucket' => '', - 'root' => '', - ], - 'gcs' => [ - 'type' => 'Gcs', - 'key' => '', - 'secret' => '', - 'bucket' => '', - 'root' => '', - ], - 'rackspace' => [ - 'type' => 'Rackspace', - 'username' => '', - 'key' => '', - 'container' => '', - 'zone' => '', - 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', - 'root' => '', - ], - 'dropbox' => [ - 'type' => 'Dropbox', - 'token' => '', - 'key' => '', - 'secret' => '', - 'app' => '', - 'root' => '', - ], - 'ftp' => [ - 'type' => 'Ftp', - 'host' => '', - 'username' => '', - 'password' => '', - 'port' => 21, - 'passive' => true, - 'ssl' => true, - 'timeout' => 30, - 'root' => '', - ], - 'sftp' => [ - 'type' => 'Sftp', - 'host' => '', - 'username' => '', - 'password' => '', - 'port' => 21, - 'timeout' => 10, - 'privateKey' => '', - 'root' => '', - ], -]; diff --git a/config/broadcasting.php b/config/broadcasting.php index 9305cdeb5c32..01c1213a4c7d 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -20,9 +20,11 @@ | framework when an event needs to be broadcast. You may set this to | any of the connections defined in the "connections" array below. | + | Supported: "pusher", "redis", "log", "null" + | */ - 'default' => env('BROADCAST_DRIVER', 'pusher'), + 'default' => env('BROADCAST_DRIVER', 'null'), /* |-------------------------------------------------------------------------- @@ -39,9 +41,9 @@ 'pusher' => [ 'driver' => 'pusher', - 'key' => null, - 'secret' => null, - 'app_id' => null, + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), 'options' => [ // ], @@ -56,6 +58,10 @@ 'driver' => 'log', ], + 'null' => [ + 'driver' => 'null', + ], + ], ]; diff --git a/config/cache.php b/config/cache.php index c10d17614d4f..06ec44c36eaf 100644 --- a/config/cache.php +++ b/config/cache.php @@ -10,6 +10,7 @@ */ return [ + /* |-------------------------------------------------------------------------- | Default Cache Store @@ -22,7 +23,9 @@ | Supported: "apc", "array", "database", "file", "memcached", "redis" | */ + 'default' => env('CACHE_DRIVER', 'file'), + /* |-------------------------------------------------------------------------- | Cache Stores @@ -33,22 +36,28 @@ | same cache driver to group types of items stored in your caches. | */ + 'stores' => [ + 'apc' => [ 'driver' => 'apc', ], + 'array' => [ 'driver' => 'array', ], + 'database' => [ 'driver' => 'database', 'table' => 'cache', 'connection' => null, ], + 'file' => [ 'driver' => 'file', - 'path' => storage_path('framework/cache'), + 'path' => storage_path('framework/cache/data'), ], + 'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), @@ -67,11 +76,17 @@ ], ], ], + 'redis' => [ 'driver' => 'redis', 'connection' => 'default', + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DB', 0), ], + ], + /* |-------------------------------------------------------------------------- | Cache Key Prefix @@ -82,5 +97,7 @@ | value to get prefixed to all our keys so we can avoid collisions. | */ + 'prefix' => 'laravel', + ]; diff --git a/config/cachet.php b/config/cachet.php index 2f193d21e84c..6e0c9f8debdc 100644 --- a/config/cachet.php +++ b/config/cachet.php @@ -31,7 +31,7 @@ | */ - 'is_docker' => env('DOCKER', false), + 'is_docker' => env('DOCKER', false), /* |-------------------------------------------------------------------------- @@ -44,6 +44,23 @@ | */ - 'beacon' => env('CACHET_BEACON', true), + 'beacon' => env('CACHET_BEACON', true), + /* + |-------------------------------------------------------------------------- + | Templates configurations + |-------------------------------------------------------------------------- + | + | Security fix: now user can provide information which will be included to the Twig sandbox settings + | + | Default: Described below + | + */ + 'twig' => [ + 'methods' => [], + 'functions' => [], + 'filters' => ['escape'], + 'tags' => ['if'], + 'props' => [], + ], ]; diff --git a/config/cors.php b/config/cors.php index fb12f8c9df49..6e843598bebd 100644 --- a/config/cors.php +++ b/config/cors.php @@ -10,6 +10,7 @@ */ return [ + /* |-------------------------------------------------------------------------- | Laravel CORS @@ -19,11 +20,13 @@ | to accept any value. | */ - 'supportsCredentials' => false, - 'allowedOrigins' => ['*'], - 'allowedHeaders' => ['X-Cachet-Token'], - 'allowedMethods' => ['*'], - 'exposedHeaders' => [], - 'maxAge' => 3600, - 'hosts' => [], + + 'supportsCredentials' => false, + 'allowedOrigins' => ['*'], + 'allowedOriginsPatterns' => [], + 'allowedHeaders' => ['X-Cachet-Token'], + 'allowedMethods' => ['*'], + 'exposedHeaders' => [], + 'maxAge' => 3600, + ]; diff --git a/config/css-inliner.php b/config/css-inliner.php deleted file mode 100644 index f1e9c78bf342..000000000000 --- a/config/css-inliner.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - - /* - |-------------------------------------------------------------------------- - | Remove classes - |-------------------------------------------------------------------------- - | - | Settings this to false disables the removal of class attributes from - | your html elements (do not enable this if you use media queries) - | - */ - - 'strip-classes' => true, - -]; diff --git a/config/database.php b/config/database.php index b6d967af0e50..bb5f8221b91b 100644 --- a/config/database.php +++ b/config/database.php @@ -11,19 +11,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | PDO Fetch Style - |-------------------------------------------------------------------------- - | - | By default, database results will be returned as instances of the PHP - | stdClass object; however, you may desire to retrieve records in an - | array format for simplicity. Here you can tweak the fetch style. - | - */ - - 'fetch' => PDO::FETCH_CLASS, - /* |-------------------------------------------------------------------------- | Default Database Connection Name @@ -58,33 +45,35 @@ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), - 'prefix' => env('DB_PREFIX', null), + 'prefix' => '', ], 'mysql' => [ - 'driver' => 'mysql', - 'host' => env('DB_HOST', null), - 'database' => env('DB_DATABASE', null), - 'username' => env('DB_USERNAME', null), - 'password' => env('DB_PASSWORD', null), - 'port' => env('DB_PORT', '3306'), - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', - 'prefix' => env('DB_PREFIX', null), - 'strict' => false, - 'engine' => null, + 'driver' => 'mysql', + 'host' => env('DB_HOST', '127.0.0.1'), + 'unix_socket' => env('DB_UNIX_SOCKET', null), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => env('DB_PREFIX', null), + 'strict' => false, + 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', - 'host' => env('DB_HOST', null), - 'database' => env('DB_DATABASE', null), - 'username' => env('DB_USERNAME', null), - 'password' => env('DB_PASSWORD', null), + 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => env('DB_PREFIX', null), 'schema' => env('DB_SCHEMA', 'public'), + 'sslmode' => 'prefer', ], ], @@ -115,13 +104,13 @@ 'redis' => [ - 'cluster' => false, + 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DATABASE', 0), - 'password' => env('REDIS_PASSWORD', null), ], ], diff --git a/config/debugbar.php b/config/debugbar.php new file mode 100644 index 000000000000..f2591b99f80f --- /dev/null +++ b/config/debugbar.php @@ -0,0 +1,201 @@ + env('DEBUGBAR_ENABLED', null), + + /* + |-------------------------------------------------------------------------- + | Storage settings + |-------------------------------------------------------------------------- + | + | DebugBar stores data for session/ajax requests. + | You can disable this, so the debugbar stores data in headers/session, + | but this can cause problems with large data collectors. + | By default, file storage (in the storage folder) is used. Redis and PDO + | can also be used. For PDO, run the package migrations first. + | + */ + 'storage' => [ + 'enabled' => true, + 'driver' => 'file', // redis, file, pdo, custom + 'path' => storage_path('debugbar'), // For file driver + 'connection' => null, // Leave null for default connection (Redis/PDO) + 'provider' => '', // Instance of StorageInterface for custom driver + ], + + /* + |-------------------------------------------------------------------------- + | Vendors + |-------------------------------------------------------------------------- + | + | Vendor files are included by default, but can be set to false. + | This can also be set to 'js' or 'css', to only include javascript or css vendor files. + | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) + | and for js: jquery and and highlight.js + | So if you want syntax highlighting, set it to true. + | jQuery is set to not conflict with existing jQuery scripts. + | + */ + + 'include_vendors' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Ajax Requests + |-------------------------------------------------------------------------- + | + | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), + | you can use this option to disable sending the data through the headers. + | + | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. + */ + + 'capture_ajax' => true, + 'add_ajax_timing' => false, + + /* + |-------------------------------------------------------------------------- + | Custom Error Handler for Deprecated warnings + |-------------------------------------------------------------------------- + | + | When enabled, the Debugbar shows deprecated warnings for Symfony components + | in the Messages tab. + | + */ + 'error_handler' => false, + + /* + |-------------------------------------------------------------------------- + | Clockwork integration + |-------------------------------------------------------------------------- + | + | The Debugbar can emulate the Clockwork headers, so you can use the Chrome + | Extension, without the server-side code. It uses Debugbar collectors instead. + | + */ + 'clockwork' => false, + + /* + |-------------------------------------------------------------------------- + | DataCollectors + |-------------------------------------------------------------------------- + | + | Enable/disable DataCollectors + | + */ + + 'collectors' => [ + 'phpinfo' => true, // Php version + 'messages' => true, // Messages + 'time' => true, // Time Datalogger + 'memory' => true, // Memory usage + 'exceptions' => true, // Exception displayer + 'log' => true, // Logs from Monolog (merged in messages if enabled) + 'db' => true, // Show database (PDO) queries and bindings + 'views' => true, // Views with their data + 'route' => true, // Current route information + 'auth' => true, // Display Laravel authentication status + 'gate' => true, // Display Laravel Gate checks + 'session' => true, // Display session data + 'symfony_request' => true, // Only one can be enabled.. + 'mail' => true, // Catch mail messages + 'laravel' => false, // Laravel version and environment + 'events' => false, // All events fired + 'default_request' => false, // Regular or special Symfony request logger + 'logs' => false, // Add the latest log messages + 'files' => false, // Show the included files + 'config' => false, // Display config settings + ], + + /* + |-------------------------------------------------------------------------- + | Extra options + |-------------------------------------------------------------------------- + | + | Configure some DataCollectors + | + */ + + 'options' => [ + 'auth' => [ + 'show_name' => true, // Also show the users name/email in the debugbar + ], + 'db' => [ + 'with_params' => true, // Render SQL with the parameters substituted + 'backtrace' => true, // Use a backtrace to find the origin of the query in your files. + 'timeline' => false, // Add the queries to the timeline + 'explain' => [ // Show EXPLAIN output on queries + 'enabled' => false, + 'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+ + ], + 'hints' => true, // Show hints for common mistakes + ], + 'mail' => [ + 'full_log' => false, + ], + 'views' => [ + 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + ], + 'route' => [ + 'label' => true, // show complete route on bar + ], + 'logs' => [ + 'file' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Inject Debugbar in Response + |-------------------------------------------------------------------------- + | + | Usually, the debugbar is added just before , by listening to the + | Response after the App is done. If you disable this, you have to add them + | in your template yourself. See http://phpdebugbar.com/docs/rendering.html + | + */ + + 'inject' => true, + + /* + |-------------------------------------------------------------------------- + | DebugBar route prefix + |-------------------------------------------------------------------------- + | + | Sometimes you want to set route prefix to be used by DebugBar to load + | its resources from. Usually the need comes from misconfigured web server or + | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 + | + */ + 'route_prefix' => '_debugbar', + + /* + |-------------------------------------------------------------------------- + | DebugBar route domain + |-------------------------------------------------------------------------- + | + | By default DebugBar route served from the same domain that request served. + | To override default domain, specify it as a non-empty value. + */ + 'route_domain' => null, +]; diff --git a/config/emoji.php b/config/emoji.php index d7964b23443a..38834500e338 100644 --- a/config/emoji.php +++ b/config/emoji.php @@ -23,4 +23,38 @@ 'token' => env('GITHUB_TOKEN', null), + /* + |-------------------------------------------------------------------------- + | Cache Connection + |-------------------------------------------------------------------------- + | + | Here you may tell us what cache connection to use. To use the default, + | set this to null. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Cache Key + |-------------------------------------------------------------------------- + | + | Here you may tell us what cache key to use for storing the emoji map. + | + */ + + 'key' => 'emoji', + + /* + |-------------------------------------------------------------------------- + | Cache Life + |-------------------------------------------------------------------------- + | + | Here you may tell us how long in minutes to cache the emoji map. + | + */ + + 'life' => 10080, + ]; diff --git a/config/exceptions.php b/config/exceptions.php index 6c73dd23ea63..bbdd386e0e4a 100644 --- a/config/exceptions.php +++ b/config/exceptions.php @@ -29,7 +29,7 @@ 'GrahamCampbell\Exceptions\Transformers\AuthTransformer', 'GrahamCampbell\Exceptions\Transformers\CsrfTransformer', 'GrahamCampbell\Exceptions\Transformers\ModelTransformer', - 'CachetHQ\Cachet\Foundation\Exceptions\Transformers\BusTransformer', + 'CachetHQ\Cachet\Exceptions\Transformers\BusTransformer', ], /* @@ -47,9 +47,11 @@ */ 'displayers' => [ - 'CachetHQ\Cachet\Foundation\Exceptions\Displayers\JsonValidationDisplayer', - 'CachetHQ\Cachet\Foundation\Exceptions\Displayers\RedirectDisplayer', - 'CachetHQ\Cachet\Foundation\Exceptions\Displayers\ThrottleDisplayer', + 'CachetHQ\Cachet\Exceptions\Displayers\MaintenanceDisplayer', + 'CachetHQ\Cachet\Exceptions\Displayers\SettingsDisplayer', + 'CachetHQ\Cachet\Exceptions\Displayers\RedirectDisplayer', + 'CachetHQ\Cachet\Exceptions\Displayers\ThrottleDisplayer', + 'CachetHQ\Cachet\Exceptions\Displayers\JsonValidationDisplayer', 'GrahamCampbell\Exceptions\Displayers\DebugDisplayer', 'GrahamCampbell\Exceptions\Displayers\HtmlDisplayer', 'GrahamCampbell\Exceptions\Displayers\JsonDisplayer', @@ -73,7 +75,7 @@ 'GrahamCampbell\Exceptions\Filters\VerboseFilter', 'GrahamCampbell\Exceptions\Filters\CanDisplayFilter', 'GrahamCampbell\Exceptions\Filters\ContentTypeFilter', - 'CachetHQ\Cachet\Foundation\Exceptions\Filters\ApiFilter', + 'CachetHQ\Cachet\Exceptions\Filters\ApiFilter', ], /* @@ -106,7 +108,7 @@ 'Illuminate\Auth\Access\AuthorizationException' => 'warning', 'Illuminate\Database\Eloquent\ModelNotFoundException' => 'warning', 'Illuminate\Session\TokenMismatchException' => 'notice', - 'Symfony\Component\HttpKernel\Exception\HttpExceptionInterface' => 'warning', + 'Symfony\Component\HttpKernel\Exception\HttpExceptionInterface' => 'notice', 'Symfony\Component\Debug\Exception\FatalErrorException' => 'critical', 'Exception' => 'error', ], diff --git a/config/filesystems.php b/config/filesystems.php index 35acb7105b34..d63eb16e4e78 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -17,14 +17,12 @@ |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used - | by the framework. A "local" driver, as well as a variety of cloud - | based drivers are available for your choosing. Just store away! - | - | Supported: "local", "ftp", "s3", "rackspace" + | by the framework. The "local" disk, as well as a variety of cloud + | based disks are available to your application. Just store away! | */ - 'default' => 'local', + 'default' => env('FILESYSTEM_DRIVER', 'local'), /* |-------------------------------------------------------------------------- @@ -37,7 +35,7 @@ | */ - 'cloud' => 's3', + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- @@ -48,6 +46,8 @@ | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | + | Supported Drivers: "local", "ftp", "s3", "rackspace" + | */ 'disks' => [ @@ -57,18 +57,24 @@ 'root' => storage_path('app'), ], + 'database' => [ + 'driver' => 'local', + 'root' => database_path('backups'), + ], + 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', - 'key' => 'your-key', - 'secret' => 'your-secret', - 'region' => 'your-region', - 'bucket' => 'your-bucket', + 'key' => env('AWS_KEY'), + 'secret' => env('AWS_SECRET'), + 'region' => env('AWS_REGION'), + 'bucket' => env('AWS_BUCKET'), ], ], diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 000000000000..30adba29435c --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,61 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/langs.php b/config/langs.php index 0a45741b90b0..d41fc5c6539a 100644 --- a/config/langs.php +++ b/config/langs.php @@ -10,7 +10,6 @@ */ return [ - // Enabled langs 'af' => [ 'name' => 'Afrikaans', 'subset' => 'latin', @@ -87,6 +86,10 @@ 'name' => '한글', 'subset' => 'latin', ], + 'ms' => [ + 'name' => 'Malay', + 'subset' => 'latin', + ], 'nl' => [ 'name' => 'Nederlands', 'subset' => 'latin,latin-ext', diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000000..a397bd2ffaa0 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,99 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 7, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + 'bugsnag' => [ + 'driver' => 'bugsnag', + ], + + 'debug' => [ + 'driver' => 'stack', + 'channels' => ['bugsnag', 'single'], + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php index 94ee71a5b032..122eddc5d091 100644 --- a/config/mail.php +++ b/config/mail.php @@ -20,8 +20,8 @@ | sending of e-mail. You may specify which one you're using throughout | your application here. By default, Laravel is setup for SMTP mail. | - | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", - | "ses", "sparkpost", "log" + | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses", + | "sparkpost", "log", "array" | */ @@ -64,7 +64,10 @@ | */ - 'from' => ['address' => env('MAIL_ADDRESS'), 'name' => env('MAIL_NAME')], + 'from' => [ + 'address' => env('MAIL_ADDRESS'), + 'name' => env('MAIL_NAME', 'Cachet'), + ], /* |-------------------------------------------------------------------------- @@ -92,30 +95,38 @@ 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + /* |-------------------------------------------------------------------------- - | SMTP Server Password + | Sendmail System Path |-------------------------------------------------------------------------- | - | Here you may set the password required by your SMTP server to send out - | messages from your application. This will be given to the server on - | connection so that the application will be able to send messages. + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. | */ - 'password' => env('MAIL_PASSWORD'), + 'sendmail' => '/usr/sbin/sendmail -bs', /* |-------------------------------------------------------------------------- - | Sendmail System Path + | Markdown Mail Settings |-------------------------------------------------------------------------- | - | When using the "sendmail" driver to send e-mails, we will need to know - | the path to where Sendmail lives on this server. A default path has - | been provided here, which will work well on most of your systems. + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! | */ - 'sendmail' => '/usr/sbin/sendmail -bs', + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], ]; diff --git a/config/markdown.php b/config/markdown.php index e03cc29c0d88..b6517bbc29da 100644 --- a/config/markdown.php +++ b/config/markdown.php @@ -39,7 +39,10 @@ | */ - 'extensions' => env('CACHET_EMOJI', false) ? ['AltThree\Emoji\EmojiExtension'] : [], + 'extensions' => array_filter([ + env('CACHET_EMOJI', false) ? 'CachetHQ\Emoji\EmojiExtension' : null, + env('CACHET_AUTO_TWITTER', true) ? 'CachetHQ\Twitter\TwitterExtension' : null, + ]), /* |-------------------------------------------------------------------------- @@ -116,16 +119,41 @@ /* |-------------------------------------------------------------------------- - | Safe Mode + | HTML Input |-------------------------------------------------------------------------- | - | This option specifies if raw HTML is rendered in the document. Setting - | this to true will not render HTML, and false will. + | This option specifies how to handle untrusted HTML input. | - | Default: false + | Default: 'strip' | */ - 'safe' => true, + 'html_input' => 'strip', + + /* + |-------------------------------------------------------------------------- + | Allow Unsafe Links + |-------------------------------------------------------------------------- + | + | This option specifies whether to allow risky image URLs and links. + | + | Default: true + | + */ + + 'allow_unsafe_links' => false, + + /* + |-------------------------------------------------------------------------- + | Maximum Nesting Level + |-------------------------------------------------------------------------- + | + | This option specifies the maximum permitted block nesting level. + | + | Default: INF + | + */ + + 'max_nesting_level' => INF, ]; diff --git a/config/queue.php b/config/queue.php index dd53208027a6..a279d3028639 100644 --- a/config/queue.php +++ b/config/queue.php @@ -16,15 +16,15 @@ | Default Queue Driver |-------------------------------------------------------------------------- | - | The Laravel queue API supports a variety of back-ends via an unified + | Laravel's queue API supports an assortment of back-ends via a single | API, giving you convenient access to each back-end using the same | syntax for each one. Here you may set the default queue driver. | - | Supported: "null", "sync", "database", "beanstalkd", "sqs", "redis" + | Supported: "sync", "database", "beanstalkd", "sqs", "redis", "null" | */ - 'default' => env('QUEUE_DRIVER', 'database'), + 'default' => env('QUEUE_DRIVER', 'sync'), /* |-------------------------------------------------------------------------- @@ -47,14 +47,14 @@ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', - 'retry_after' => 60, + 'retry_after' => 90, ], 'beanstalkd' => [ - 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 60, + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, ], 'sqs' => [ @@ -67,10 +67,10 @@ ], 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - 'queue' => 'default', - 'retry_after' => 86400, + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => 'default', + 'retry_after' => 90, ], ], diff --git a/config/services.php b/config/services.php index c4d0f901299e..097fef01a8fb 100644 --- a/config/services.php +++ b/config/services.php @@ -23,7 +23,7 @@ | */ - 'github' => [ + 'github' => [ 'token' => env('GITHUB_TOKEN'), ], @@ -36,10 +36,16 @@ 'secret' => env('MAIL_PASSWORD'), ], + 'nexmo' => [ + 'key' => env('NEXMO_KEY'), + 'secret' => env('NEXMO_SECRET'), + 'sms_from' => env('NEXMO_SMS_FROM'), + ], + 'ses' => [ 'key' => env('MAIL_USERNAME'), 'secret' => env('MAIL_PASSWORD'), - 'region' => 'us-east-1', + 'region' => env('SES_REGION', 'us-east-1'), ], 'sparkpost' => [ diff --git a/config/setting.php b/config/setting.php index e438690a20d7..d7917b33e90e 100644 --- a/config/setting.php +++ b/config/setting.php @@ -33,6 +33,18 @@ 'enable_subscribers' => true, + /* + |-------------------------------------------------------------------------- + | Suppress notifications while in maintenance + |-------------------------------------------------------------------------- + | + | Whether to suppress notification channels if an issue is created during + | planned or in-progress maintenance periods. + | + */ + + 'suppress_notifications_in_maintenance' => true, + /* |-------------------------------------------------------------------------- | Automatic Localization @@ -43,7 +55,7 @@ | */ - 'automatic_localization' => false, + 'automatic_localization' => false, /* |-------------------------------------------------------------------------- @@ -67,7 +79,7 @@ 'enable_external_dependencies' => true, - /* + /* |-------------------------------------------------------------------------- | Show the timezone |-------------------------------------------------------------------------- @@ -78,7 +90,7 @@ 'show_timezone' => false, - /* + /* |-------------------------------------------------------------------------- | Skip subscriber verifications |-------------------------------------------------------------------------- @@ -89,7 +101,7 @@ 'skip_subscriber_verification' => false, - /* + /* |-------------------------------------------------------------------------- | Only disrupted days |-------------------------------------------------------------------------- @@ -99,4 +111,16 @@ */ 'only_disrupted_days' => false, + + /* + |-------------------------------------------------------------------------- + | Always authenticate + |-------------------------------------------------------------------------- + | + | Whether to lock down Cachet and only allow viewing pages + | when authenticated. + | + */ + + 'always_authenticate' => false, ]; diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 000000000000..c2cecedf91ba --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,27 @@ + [], + +]; diff --git a/config/trustedproxy.php b/config/trustedproxy.php index 3f10875ddc49..e2fab5269b89 100644 --- a/config/trustedproxy.php +++ b/config/trustedproxy.php @@ -9,65 +9,45 @@ * file that was distributed with this source code. */ -use Illuminate\Http\Request; - return [ /* - |-------------------------------------------------------------------------- - | Trusted Proxies - |-------------------------------------------------------------------------- - | - | Set trusted proxy IP addresses. Both IPv4 and IPv6 addresses are - | supported, along with CIDR notation. The "*" character is syntactic sugar - | within TrustedProxy to trust any proxy; a requirement when you cannot - | know the address of your proxy (e.g. if using Rackspace balancers). - | - | By default, we are trusting CloudFlare only. - | - */ + * Set trusted proxy IP addresses. + * + * Both IPv4 and IPv6 addresses are + * supported, along with CIDR notation. + * + * The "*" character is syntactic sugar + * within TrustedProxy to trust any proxy + * that connects directly to your server, + * a requirement when you cannot know the address + * of your proxy (e.g. if using ELB or similar). + * + */ + 'proxies' => env('TRUSTED_PROXIES'), // [,], '*' - 'proxies' => [ - '103.21.244.0/22', - '103.22.200.0/22', - '103.31.4.0/22', - '104.16.0.0/12', - '108.162.192.0/18', - '131.0.72.0/22', - '141.101.64.0/18', - '162.158.0.0/15', - '172.64.0.0/13', - '173.245.48.0/20', - '188.114.96.0/20', - '190.93.240.0/20', - '197.234.240.0/22', - '198.41.128.0/17', - '199.27.128.0/21', - '2400:cb00::/32', - '2405:8100::/32', - '2405:b500::/32', - '2606:4700::/32', - '2803:f800::/32', - ], + /* + * To trust one or more specific proxies that connect + * directly to your server, use an array of IP addresses: + */ + // 'proxies' => ['192.168.1.1'], /* - |-------------------------------------------------------------------------- - | Respected Headers - |-------------------------------------------------------------------------- - | - | Change these if the proxy does not send the default header names. Note - | that headers such as X-Forwarded-For are transformed to - | HTTP_X_FORWARDED_FOR format. - | - | By default, we are using the Symfony defaults. - | - */ + * Or, to trust all proxies that connect + * directly to your server, use a "*" + */ + // 'proxies' => '*', - 'headers' => [ - Request::HEADER_CLIENT_IP => 'X_FORWARDED_FOR', - Request::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST', - Request::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO', - Request::HEADER_CLIENT_PORT => 'X_FORWARDED_PORT', - ], + /* + * Which headers to use to detect proxy related data (For, Host, Proto, Port) + * + * Options include: + * + * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust) + * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust) + * + * @link https://symfony.com/doc/current/deployment/proxies.html + */ + 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL, ]; diff --git a/config/view.php b/config/view.php index 7427ba137eda..f2463322cd2d 100644 --- a/config/view.php +++ b/config/view.php @@ -22,7 +22,9 @@ | */ - 'paths' => [realpath(base_path('resources/views'))], + 'paths' => [ + resource_path('views'), + ], /* |-------------------------------------------------------------------------- diff --git a/crowdin.yaml b/crowdin.yml similarity index 72% rename from crowdin.yaml rename to crowdin.yml index e891f39104bc..92fe4b70c784 100644 --- a/crowdin.yaml +++ b/crowdin.yml @@ -5,3 +5,6 @@ files: languages_mapping: locale: 'en-ES': 'es' + 'fa-IR': 'fa' + 'ko-KR': 'kr' + 'de-DE': 'de' diff --git a/database/backups/.gitignore b/database/backups/.gitignore deleted file mode 100644 index 72e8ffc0db8a..000000000000 --- a/database/backups/.gitignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 1df478453e53..850f9b76a676 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -16,6 +16,7 @@ use CachetHQ\Cachet\Models\IncidentUpdate; use CachetHQ\Cachet\Models\Metric; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\Schedule; use CachetHQ\Cachet\Models\Setting; use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Models\Subscription; @@ -27,7 +28,7 @@ 'name' => $faker->sentence(), 'description' => $faker->paragraph(), 'link' => $faker->url(), - 'status' => random_int(1, 4), + 'status' => mt_rand(1, 4), 'order' => 0, ]; }); @@ -36,7 +37,7 @@ return [ 'name' => $faker->words(2, true), 'order' => 0, - 'collapsed' => random_int(0, 3), + 'collapsed' => mt_rand(0, 4), 'visible' => $faker->boolean(), ]; }); @@ -44,8 +45,9 @@ $factory->define(Incident::class, function ($faker) { return [ 'name' => $faker->sentence(), + 'user_id' => factory(User::class)->create()->id, 'message' => $faker->paragraph(), - 'status' => random_int(1, 4), + 'status' => mt_rand(1, 4), 'visible' => 1, 'stickied' => false, ]; @@ -63,7 +65,7 @@ return [ 'incident_id' => factory(Incident::class)->create()->id, 'message' => $faker->paragraph(), - 'status' => random_int(1, 4), + 'status' => mt_rand(1, 4), 'user_id' => factory(User::class)->create()->id, ]; }); @@ -83,16 +85,34 @@ $factory->define(MetricPoint::class, function ($faker) { return [ - 'metric_id' => factory(Metric::class)->create()->id, - 'value' => random_int(1, 100), - 'counter' => 1, + 'metric_id' => factory(Metric::class)->create()->id, + 'value' => mt_rand(1, 100), + 'counter' => 1, + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]; +}); + +$factory->define(Schedule::class, function ($faker) { + return [ + 'name' => $faker->sentence(), + 'message' => $faker->paragraph(), + 'status' => Schedule::UPCOMING, + 'scheduled_at' => Carbon::now()->addDays(7), + ]; +}); + +$factory->define(Setting::class, function ($faker) { + return [ + 'name' => 'app_name', + 'value' => 'Cachet Test Demo', ]; }); $factory->define(Setting::class, function ($faker) { return [ - 'name' => 'app_name', - 'value' => 'Cachet Test Demo', + 'name' => 'app_refresh_rate', + 'value' => '0', ]; }); diff --git a/database/migrations/2015_06_10_122216_AlterTableComponentsDropUserIdColumn.php b/database/migrations/2015_06_10_122216_AlterTableComponentsDropUserIdColumn.php index 41d57a3d135a..da8183892990 100644 --- a/database/migrations/2015_06_10_122216_AlterTableComponentsDropUserIdColumn.php +++ b/database/migrations/2015_06_10_122216_AlterTableComponentsDropUserIdColumn.php @@ -30,6 +30,8 @@ public function up() */ public function down() { - // + Schema::table('components', function (Blueprint $table) { + $table->integer('user_id')->unsigned()->nullable()->default(null)->after('group_id'); + }); } } diff --git a/database/migrations/2015_06_10_122229_AlterTableIncidentsDropUserIdColumn.php b/database/migrations/2015_06_10_122229_AlterTableIncidentsDropUserIdColumn.php index ce694c7467c8..44e4ba6a12e7 100644 --- a/database/migrations/2015_06_10_122229_AlterTableIncidentsDropUserIdColumn.php +++ b/database/migrations/2015_06_10_122229_AlterTableIncidentsDropUserIdColumn.php @@ -30,6 +30,8 @@ public function up() */ public function down() { - // + Schema::table('incidents', function (Blueprint $table) { + $table->integer('user_id')->unsigned()->nullable()->default(null)->after('message'); + }); } } diff --git a/database/migrations/2015_12_26_162258_AlterTableMetricsAddDefaultViewColumn.php b/database/migrations/2015_12_26_162258_AlterTableMetricsAddDefaultViewColumn.php index e27be812422b..9014ea11a45d 100644 --- a/database/migrations/2015_12_26_162258_AlterTableMetricsAddDefaultViewColumn.php +++ b/database/migrations/2015_12_26_162258_AlterTableMetricsAddDefaultViewColumn.php @@ -35,7 +35,7 @@ public function up() public function down() { Schema::table('metrics', function (Blueprint $table) { - // + $table->dropColumn('default_view'); }); } } diff --git a/database/migrations/2016_10_24_183415_AlterTableIncidentsAddOccurredAtColumn.php b/database/migrations/2016_10_24_183415_AlterTableIncidentsAddOccurredAtColumn.php new file mode 100644 index 000000000000..9fad949701b9 --- /dev/null +++ b/database/migrations/2016_10_24_183415_AlterTableIncidentsAddOccurredAtColumn.php @@ -0,0 +1,49 @@ +timestamp('occurred_at')->nullable()->after('scheduled_at'); + }); + + // We need a better way of handling data migrations... + $system = app(System::class); + $prefix = $system->getTablePrefix(); + + DB::update("UPDATE {$prefix}incidents SET occurred_at = created_at"); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('incidents', function (Blueprint $table) { + $table->dropColumn('occurred_at'); + }); + } +} diff --git a/database/migrations/2016_10_30_174400_CreateSchedulesTable.php b/database/migrations/2016_10_30_174400_CreateSchedulesTable.php new file mode 100644 index 000000000000..772119854516 --- /dev/null +++ b/database/migrations/2016_10_30_174400_CreateSchedulesTable.php @@ -0,0 +1,45 @@ +increments('id'); + $table->string('name'); + $table->longText('message')->nullable()->default(null); + $table->tinyInteger('status')->unsigned()->default(0); + $table->timestamp('scheduled_at'); + $table->timestamp('completed_at')->nullable()->default(null); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('schedules'); + } +} diff --git a/database/migrations/2016_10_30_174410_CreateScheduleComponentsTable.php b/database/migrations/2016_10_30_174410_CreateScheduleComponentsTable.php new file mode 100644 index 000000000000..0ff151d897c1 --- /dev/null +++ b/database/migrations/2016_10_30_174410_CreateScheduleComponentsTable.php @@ -0,0 +1,43 @@ +increments('id'); + $table->integer('schedule_id')->unsigned(); + $table->integer('component_id')->unsigned(); + $table->tinyInteger('component_status')->unsigned(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('schedule_components'); + } +} diff --git a/database/migrations/2016_10_30_182324_AlterTableIncidentsRemoveScheduledColumns.php b/database/migrations/2016_10_30_182324_AlterTableIncidentsRemoveScheduledColumns.php new file mode 100644 index 000000000000..a2d4ef5a993b --- /dev/null +++ b/database/migrations/2016_10_30_182324_AlterTableIncidentsRemoveScheduledColumns.php @@ -0,0 +1,50 @@ +getTablePrefix(); + DB::update("INSERT INTO {$prefix}schedules (name, message, scheduled_at, created_at, updated_at) SELECT name, message, scheduled_at, created_at, updated_at FROM {$prefix}incidents WHERE scheduled_at IS NOT NULL"); + + DB::table('incidents')->whereNotNull('scheduled_at')->delete(); + + Schema::table('incidents', function (Blueprint $table) { + $table->dropColumn('scheduled_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('incidents', function (Blueprint $table) { + $table->timestamp('scheduled_at')->before('created_at')->nullable()->default(null); + }); + } +} diff --git a/database/migrations/2016_12_04_163502_AlterTableMetricsAddVisibleColumn.php b/database/migrations/2016_12_04_163502_AlterTableMetricsAddVisibleColumn.php new file mode 100644 index 000000000000..51e36de03946 --- /dev/null +++ b/database/migrations/2016_12_04_163502_AlterTableMetricsAddVisibleColumn.php @@ -0,0 +1,43 @@ +unsignedTinyInteger('visible')->after('order')->default(1); + + $table->index('visible'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('metrics', function (Blueprint $table) { + $table->dropColumn('visible'); + }); + } +} diff --git a/database/migrations/2016_12_05_185045_AlterTableComponentsAddMetaColumn.php b/database/migrations/2016_12_05_185045_AlterTableComponentsAddMetaColumn.php new file mode 100644 index 000000000000..fdfe6974e5f5 --- /dev/null +++ b/database/migrations/2016_12_05_185045_AlterTableComponentsAddMetaColumn.php @@ -0,0 +1,41 @@ +longText('meta')->nullable()->default(null)->after('enabled'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('components', function (Blueprint $table) { + $table->dropColumn('meta'); + }); + } +} diff --git a/database/migrations/2016_12_29_124643_AlterTableSubscribersAddPhoneNumberSlackColumns.php b/database/migrations/2016_12_29_124643_AlterTableSubscribersAddPhoneNumberSlackColumns.php new file mode 100644 index 000000000000..a47b79404f57 --- /dev/null +++ b/database/migrations/2016_12_29_124643_AlterTableSubscribersAddPhoneNumberSlackColumns.php @@ -0,0 +1,43 @@ +string('email')->nullable()->default(null)->change(); + $table->string('phone_number')->nullable()->default(null)->after('verify_code'); + $table->string('slack_webhook_url')->nullable()->default(null)->after('phone_number'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('subscribers', function (Blueprint $table) { + $table->dropColumn(['phone_number', 'slack_webhook_url']); + }); + } +} diff --git a/database/migrations/2016_12_29_155956_AlterTableComponentsMakeLinkNullable.php b/database/migrations/2016_12_29_155956_AlterTableComponentsMakeLinkNullable.php new file mode 100644 index 000000000000..47cd317e8091 --- /dev/null +++ b/database/migrations/2016_12_29_155956_AlterTableComponentsMakeLinkNullable.php @@ -0,0 +1,39 @@ +text('link')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2017_01_03_143916_create_notifications_table.php b/database/migrations/2017_01_03_143916_create_notifications_table.php new file mode 100644 index 000000000000..d38e48c28dbd --- /dev/null +++ b/database/migrations/2017_01_03_143916_create_notifications_table.php @@ -0,0 +1,44 @@ +uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('notifications'); + } +} diff --git a/database/migrations/2017_02_03_222218_CreateActionsTable.php b/database/migrations/2017_02_03_222218_CreateActionsTable.php new file mode 100644 index 000000000000..7c535b18475e --- /dev/null +++ b/database/migrations/2017_02_03_222218_CreateActionsTable.php @@ -0,0 +1,45 @@ +increments('id'); + $table->string('class_name'); + $table->bigInteger('user_id')->unsigned()->index(); + $table->string('username'); + $table->string('information')->nullable(); + $table->string('description'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('actions'); + } +} diff --git a/database/migrations/2017_06_13_181049_CreateMetaTable.php b/database/migrations/2017_06_13_181049_CreateMetaTable.php new file mode 100644 index 000000000000..30f73b14c760 --- /dev/null +++ b/database/migrations/2017_06_13_181049_CreateMetaTable.php @@ -0,0 +1,46 @@ +increments('id'); + $table->string('key')->index(); + $table->string('value'); + $table->integer('meta_id')->unsigned(); + $table->string('meta_type'); + $table->timestamps(); + + $table->index(['meta_id', 'meta_type']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('meta'); + } +} diff --git a/database/migrations/2017_07_18_214718_CreateIncidentComponents.php b/database/migrations/2017_07_18_214718_CreateIncidentComponents.php new file mode 100644 index 000000000000..f1926441c275 --- /dev/null +++ b/database/migrations/2017_07_18_214718_CreateIncidentComponents.php @@ -0,0 +1,43 @@ +increments('id'); + $table->integer('incident_id')->unsigned()->index(); + $table->integer('component_id')->unsigned()->index(); + $table->integer('status_id')->unsigned()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('incident_components'); + } +} diff --git a/database/migrations/2017_09_14_180434_AlterIncidentsAddUserId.php b/database/migrations/2017_09_14_180434_AlterIncidentsAddUserId.php new file mode 100644 index 000000000000..55e42b6ae193 --- /dev/null +++ b/database/migrations/2017_09_14_180434_AlterIncidentsAddUserId.php @@ -0,0 +1,41 @@ +integer('user_id')->unsigned()->nullable()->default(null)->index()->after('id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('incidents', function (Blueprint $table) { + $table->dropColumn('user_id'); + }); + } +} diff --git a/database/migrations/2018_04_02_163328_CreateTaggablesTable.php b/database/migrations/2018_04_02_163328_CreateTaggablesTable.php new file mode 100644 index 000000000000..7a05ce3e68f8 --- /dev/null +++ b/database/migrations/2018_04_02_163328_CreateTaggablesTable.php @@ -0,0 +1,42 @@ +increments('id'); + $table->integer('tag_id')->unsigned()->index(); + $table->morphs('taggable'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('taggables'); + } +} diff --git a/database/migrations/2018_04_02_163658_MigrateComponentTagTable.php b/database/migrations/2018_04_02_163658_MigrateComponentTagTable.php new file mode 100644 index 000000000000..92690fb3c6b9 --- /dev/null +++ b/database/migrations/2018_04_02_163658_MigrateComponentTagTable.php @@ -0,0 +1,57 @@ +get()->map(function ($tag) { + return [ + 'tag_id' => $tag->tag_id, + 'taggable_type' => 'components', + 'taggable_id' => $tag->component_id, + ]; + }); + + DB::table('taggables')->insert($tags->toArray()); + + Schema::dropIfExists('component_tag'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::create('component_tag', function (Blueprint $table) { + $table->engine = 'InnoDB'; + + $table->increments('id'); + $table->integer('component_id'); + $table->integer('tag_id'); + + $table->index('component_id'); + $table->index('tag_id'); + }); + } +} diff --git a/database/migrations/2018_06_14_201440_AlterSchedulesSoftDeletes.php b/database/migrations/2018_06_14_201440_AlterSchedulesSoftDeletes.php new file mode 100644 index 000000000000..fb802abaaafd --- /dev/null +++ b/database/migrations/2018_06_14_201440_AlterSchedulesSoftDeletes.php @@ -0,0 +1,41 @@ +softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('schedules', function (Blueprint $table) { + $table->dropSoftDeletes(); + }); + } +} diff --git a/database/migrations/2018_06_17_182507_AlterIncidentsAddNotifications.php b/database/migrations/2018_06_17_182507_AlterIncidentsAddNotifications.php new file mode 100644 index 000000000000..283881378866 --- /dev/null +++ b/database/migrations/2018_06_17_182507_AlterIncidentsAddNotifications.php @@ -0,0 +1,41 @@ +boolean('notifications')->default(false)->after('stickied'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('incidents', function (Blueprint $table) { + $table->dropColumn('notifications'); + }); + } +} diff --git a/database/migrations/2019_12_12_131400_AlterJobsDropReserved.php b/database/migrations/2019_12_12_131400_AlterJobsDropReserved.php new file mode 100644 index 000000000000..903d2df17b1f --- /dev/null +++ b/database/migrations/2019_12_12_131400_AlterJobsDropReserved.php @@ -0,0 +1,41 @@ +dropColumn('reserved'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('jobs', function (Blueprint $table) { + $table->tinyInteger('reserved')->unsigned()->default(0)->after('attempts'); + }); + } +} diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000000..1260e3ff142d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# Documentation + +_We're in the process of migrating and updating our current [documentation](https://docs.cachethq.io)._ diff --git a/docs/administration-guide/README.md b/docs/administration-guide/README.md new file mode 100644 index 000000000000..aefd5be5209c --- /dev/null +++ b/docs/administration-guide/README.md @@ -0,0 +1 @@ +# Administration Guide diff --git a/docs/api/api-authentication.md b/docs/api/api-authentication.md new file mode 100644 index 000000000000..2499816fead2 --- /dev/null +++ b/docs/api/api-authentication.md @@ -0,0 +1,53 @@ +# API Authentication + +Authenticating your protected API requests. + +Cachet is built on the belief that your service status is open and transparent, +therefore all `GET` requests are public and require no authentication to access +the information. The following are exempt from this rule: + +- Disabled components will only return in the Component API if you provide a + valid API token. +- The Subscribers API will only work if you provide a valid API token, we + don't want to expose email addresses. + +All other requests require authentication, either with `Basic Auth` or the +preferred `API Token`. + +## Basic Auth + +When making any request to the API which is not a `GET`, you'll need to use +some kind of authentication. The simplest of the authorization methods offered +by Cachet is [BasicAuth][1]. + +> **This is not secure** +> For obvious reasons, sending your authentication details in plain text is not +> secure. We do advise that you add SSL to your Cachet installation for added +> security, but suggest using API tokens. + +To authenticate your requests you only need to provide your email and password. + +``` +$ curl -u username@example.com:password -H "Content-Type: application/json" \ + -d '{"name":"API","description":"An example description","status":1}' \ + http://status.cachethq.io/api/v1/components +``` + +## API Token + +The API Token is generated at installation time for the main user or when a +new team member is added to your status page and can be found on your profile +page (click your profile picture to get there). + +Once you have your token you'll need to add a new request header of +`X-Cachet-Token: TOKEN` + +``` +$ curl -H "Content-Type: application/json;" -H "X-Cachet-Token: YOUR_KEY_HERE" \ + -d '{"name":"API","description":"An example description","status":1}' \ + http://status.cachethq.io/api/v1/components +``` + + + +[1]: http://en.wikipedia.org/wiki/Basic_access_authentication diff --git a/docs/api/api-documentation.md b/docs/api/api-documentation.md new file mode 100644 index 000000000000..665cf883c1db --- /dev/null +++ b/docs/api/api-documentation.md @@ -0,0 +1,48 @@ +# API Documentation for Cachet + +## `GET /api/v1/ping` + +Ping the Cachet instance. + +## `GET /api/v1/version` + +Get the version of Cachet installed. + +## `GET /api/v1/status` + +Get the overall system status. + +## `GET /api/v1/components` + +Get all components. + +## `GET /api/v1/components/:id` + +Get a single component. + +### Params + +- `id` the ID of the component + +## `POST /api/v1/components` + +Create a new component. + +### Params + +- `name` the name of the component +- `description` may be left empty +- `status` +- `link` +- `order` +- `group_id` +- `enabled` +- `meta` + +## `DELETE /api/v1/components/:id` + +Delete a component. + +### Params + +- `id` diff --git a/docs/beacon.md b/docs/beacon.md new file mode 100644 index 000000000000..c4439e5f9c83 --- /dev/null +++ b/docs/beacon.md @@ -0,0 +1,19 @@ +# About Beacon and the information we collect + +To help us understand how Cachet is used, we collect anonymous usage data. + +If you'd prefer not to provide us with this anonymous usage data, please set `CACHET_BEACON` to `false` in your `.env` file. + +## Data collected by Beacon + +- `install_id` - a unique, anonymous installation ID +- `version` - the version of Cachet being used +- `docker` - whether Cachet is being ran from a Docker container +- `database` - the database driver being used +- `data.components` - the amount of configured Components +- `data.incidents` - the amount of reported Incidents +- `data.metrics` - the amount of configured Metrics +- `data.users` - the amount of users +- `data.actions` - the amount of actions performed +- `data.tags` - the amount of Tags created +- `data.schedules` - the amount of reported Schedules diff --git a/docs/component-statuses.md b/docs/component-statuses.md new file mode 100644 index 000000000000..f91ad30670ae --- /dev/null +++ b/docs/component-statuses.md @@ -0,0 +1,13 @@ +# Component Statuses + +Unlike Incidents, Cachet starts listing Component statuses from 1. +When creating or updating a component, you'll need to specify a status for it. + +A status can be one of the following: + +Status|Name|Description +------|----|----------- +1|Operational|The component is working +2|Performance issues|The component is experiencing some slowness. +3|Partial Outage|The component may not be working for everybody. This could be a geographical issue for example. +4|Major outage|The component is not working for anybody. diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 000000000000..2ac2e314742a --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,74 @@ +# Frequently Asked Questions + +## Logging In + +### I can't login to Cachet, can you reset my password? + +We don't have access to your installation, but you are able to reset your password manually: + +Follow the commands below, replacing `:userId` with the ID of your user. The initially created user will be `1`. + +```bash +$ cd /var/www/ # the root of your Cachet installation +$ php artisan tinker +Psy Shell v0.8.8 (PHP 7.1.6 — cli) by Justin Hileman +>>> $user = CachetHQ\Cachet\Models\User::find(:userId); +=> CachetHQ\Cachet\Models\User {#865 + id: 1, + username: "test", + email: "test@example.com", + api_key: "9yMHsdioQosnyVK4iCVR", + active: 1, + level: 1, + created_at: "2015-07-24 13:42:10", + updated_at: "2015-07-28 15:12:55", +} +>>> $user->update(['password' => 'New Password']); +>>> exit +``` + +## Databases + +### Does Cachet support database X? + +Cachet has built-in support for: + +- MySQL/MariaDB +- SQLite +- PostgreSQL +- SQL Server + +### Can Cachet support database X? + +Cachet is built on the [Laravel](https://laravel.com) framework. By default, +Laravel supports the databases listed above but can be extended to support +new drivers, so whilst technically possible, it's not within scope of the +core team to provide support. + +Each new driver requires additional support, testing and maintenance to +retain compatibility with the features we want to build into Cachet in the +future. + +## Support and troubleshooting + +### Do you offer paid support for Cachet? + +We have been experimenting with paid support for Cachet at a limited scale. +Cachet is not a full-time job, so our time is low and we cannot yet +promise that your support request will be dealt with immediately. + +## Cachet usage + +### Why isn't the _Subscribe_ button enabled? + +Cachet checks some informations before displaying the _Subscribe_ button, +because checking the "Enable subscribers" is not enough. +To see the _Subscribe_ button you need to: + +- Check the box "Enable subscribers" in the settings. +- Set the `MAIL_*` option in your `.env` file. + +The second item is important, because if your mail is not well configured you +won't be able to send mails to your subscribers. + +> Note: The MAIL\_NAME **is** mandatory too, it is the sender name. diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 000000000000..30786d012237 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1 @@ +# Getting started with Cachet diff --git a/docs/images/setup/enable-subscribers.png b/docs/images/setup/enable-subscribers.png new file mode 100644 index 000000000000..c088c39b633f Binary files /dev/null and b/docs/images/setup/enable-subscribers.png differ diff --git a/docs/images/sponsorships/exascale.jpg b/docs/images/sponsorships/exascale.jpg new file mode 100644 index 000000000000..52caa72d34c1 Binary files /dev/null and b/docs/images/sponsorships/exascale.jpg differ diff --git a/docs/incidents/index.md b/docs/incidents/index.md new file mode 100644 index 000000000000..ea5636c13a16 --- /dev/null +++ b/docs/incidents/index.md @@ -0,0 +1,41 @@ +# Incidents + +An incident is something that should not happen, but that happens anyway. + +## What is exactly an incident + +In your status page you are showing the state of some components. It may be a +server, a database, of whatever you want. +If your database server crashes, it is an incident. + +## Why should I create an incident + +Having a status page is a good thing, being honest with the state of your +components is better. +A status page is not only there to show a green light, it's also there to show +why something bad is happening, and when it will be fixed. + +So, when your component experiences a problem, it's a good practice to create an +incident. + +## How to use the incidents + +When experiencing an incident, it's good to keep being up-to-date with what +happens in the real world. That's why you can use _incident updates_. + +How you manage your incidents is up to you, but if you have no idea you can do +the following: + +1. An incident happens. While a team is working to fix it, a person is creating + an incident. Be clear about what happens. At the same time, set the concerned + component with the right status (_Major Outage_, _Performance issues_ or + other) +2. You identify the origin of the problem, add an _incident update_ to explain + what is the problem, if it's important or not. +3. You think the problem is fixed but are not sure, add an incident update to + explain that. Say it should be fixed, you are watching if everything keeps + being good. +4. If it's not fixed, add an _incident update_ as in the second point because + it's identified bt not fixed. If it's fixed, congratulation! Add an _incident + update_ to explain the details, and say it's definitely fixed. Do not forget + to set the component as _Operational_ again. diff --git a/docs/metrics/create-metric.md b/docs/metrics/create-metric.md new file mode 100644 index 000000000000..b0615a7bebae --- /dev/null +++ b/docs/metrics/create-metric.md @@ -0,0 +1,54 @@ +# Create a metric + +This documentation will guide you through the metric creation. +You need to know [what is a metric][1]. + +## Filling the form + +Creating a metric is as simple as filling a form. You just need to know what do +the fields mean. + +To access to the metrics creation, follow these steps: + +- Log into your Cachet instance. +- Once on the Dashboard click `Metrics` in the sidebar. +- Click the `Create a metric` button. + +And you are there! You should be able to see the metric form. +Let's explain the fields: + +- `Name`: The name of the metric as it will be shown on the status page. + Example: "API response time". +- `Suffix`: The suffix that will be added in the tooltip when you put your mouse + over the point on the metric. Usually it's the unit of the raw data. Example: + "ms". If you send "42" to the metric, then "42ms" would be show in the + tooltip. +- `Description`: A description of the metric. What is the usage of the metric? + What does it measure? Example: "The average response time of our API". +- `Calculation of metrics`: What computation should be done on your data before + displaying them in the metric? It may be either _Sum_ or _Average_. Example: + _Average_ to compute the average reponse time for a given time. +- `Default view`: The default view of the metric. Viewing the datas of 1 year + ago is not useful, but it's about your preference to see datas of the last + hour, 12 hours, week or month. Example: _Last 12 hours_ because you want to + see the last 12 hours of data by default. It's only the default view, this can + be changed in a select box. +- `Decimal places` The number of decimal of the point that is displayed. If you + are computing the average of something it's almost sure that you'll get an + average with a coma, line 42,424242. Example: 2 to get 42,42 instead of a long + number. +- `How many minutes of threshold between metric points?`: The number of minutes + between the points in the metric. According to your needs it may be 1, 5 or + even 30. It's really up to you. Example: 60 to get one point every hour. +- `Display chart on the status page?`: If checked, this chart will be displayed + on the status page. But it's possible to create the metric and not showing it. +- `Visibility`: Who should be able to see the chart? You have three choices: + - `Visible to authenticated users`: It means that people won't be able to + see it except if they are authenticated. Useful if it's an internal metric. + - `Visible to everybody`: It means that every user, even not authenticated, + will be able to see the chart. + - `Always hidden`: It means that nobody will be able to see the chart. + + + +[1]: index.md diff --git a/docs/metrics/index.md b/docs/metrics/index.md new file mode 100644 index 000000000000..6efd67642e1a --- /dev/null +++ b/docs/metrics/index.md @@ -0,0 +1,32 @@ +# Metrics + +This guide aims to explain basics about metrics. + +## What are metrics + +When you do monitoring on your services, servers, APIs or others, you can get +raw data. These datas may be a response time to a request, the number of queries +handled in a minute, etc. + +The metrics are these raw datas. Using the [Cachet's API][1] you can send the datas +about what you are monitoring to Cachet. + + +## What can do metrics for you + +Having good metrics to show may be great for customers or partners. + +You have a big webservice that is under pressure? So it's important to have a +short response time. A metric could show to your users that the webservice is +responding fast! +Imagine, you have a metric named "Response time". Every 10 seconds you call your +webservice, and send the response time to the Cachet's API, in the metric. On +your status page you'll be able to see the average response time for a minute +for example. + +Doing so, your users would see that during the last 10 minutes your response +time was worst than previously, and it begins to being better. + + + +[1]: api-documentation.md diff --git a/docs/setup/beacons.md b/docs/setup/beacons.md new file mode 100644 index 000000000000..11c9a7299644 --- /dev/null +++ b/docs/setup/beacons.md @@ -0,0 +1,30 @@ +# Beacons + +> **Version Support** +> +> Beacons will be introduced in v2.4.0 + +Cachet will periodically communicate with our remote server. This is done so +that we're able to gather information about the current version of Cachet +and will later be used for system announcements. + +## Disabling the beacon + +To disable the beacon, you can turn off the following setting in your .env file. + +``` +CACHET_BEACON=false +``` + +## What is reported? + +We report the following information to our server: + +- A unique installation ID +- The current version of Cachet +- A support contact email (the first enabled admin's email) +- Anonymous statistics (the number of users, incidents, components and metrics) + +> **Support Contact Email** +> The contact email is used for the sole purpose of security +> announcements and will never be used for anything else. diff --git a/docs/setup/configuring-mail.md b/docs/setup/configuring-mail.md new file mode 100644 index 000000000000..63d7349834c9 --- /dev/null +++ b/docs/setup/configuring-mail.md @@ -0,0 +1,66 @@ +# Configuring Mail + +Your `.env` file will need to include the following setting keys. + +``` +MAIL_DRIVER=smtp +MAIL_HOST=mailtrap.io +MAIL_PORT=587 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ADDRESS=null +MAIL_NAME=null +MAIL_ENCRYPTION=tls +``` + +After making changes to your mail configuration you'll need to run the +following command within your Cachet installation directory. + +```bash +$ php artisan config:cache + +# If you experience any issues after running this command, run this too: +$ rm -rf bootstrap/cache/* +``` + +## Cachet + Mailgun + +Create an account with [Mailgun][1]. + +MAIL\_USERNAME should be Mailgun domain. +MAIL\_PASSWORD should be Mailgun API Key. + +Edit your `.env` file with the following variables. + +``` +MAIL_DRIVER=mailgun +MAIL_HOST=smtp.mailgun.org +MAIL_PORT=587 +MAIL_USERNAME=alt-three.com +MAIL_PASSWORD=xxxx +MAIL_ADDRESS=support@alt-three.com +MAIL_NAME="Alt Three Services Limited" +MAIL_ENCRYPTION=tls +``` + +The tls encryption setting is required to have e-mails be properly delivered. + +## Cachet + Spark Post + +Create an account with [Spark Post][2]. + +Edit your `.env` file with the following variables. + +``` +MAIL_DRIVER=smtp +MAIL_HOST=smtp.sparkpostmail.com +MAIL_PORT=587 +MAIL_USERNAME=SMTP_Injection +MAIL_PASSWORD=API_TOKEN +MAIL_ADDRESS=support@alt-three.com +MAIL_NAME="Alt Three Services Limited" +MAIL_ENCRYPTION=tls +``` + +[1]: https://mailgun.com/ +[2]: https://www.sparkpost.com/ diff --git a/docs/setup/configuring-queue.md b/docs/setup/configuring-queue.md new file mode 100644 index 000000000000..2fe7d2f98954 --- /dev/null +++ b/docs/setup/configuring-queue.md @@ -0,0 +1,72 @@ +# Configuring the queue + +Cachet uses a queue to send Configuring Mail and Beacons without slowing down +the rest of the application. This can be setup in a variety of ways. + +## Supervisor + +The recommended setup for the queue is to use Supervisor. + +Supervisor is a process manager which makes managing a number of +long-running programs a trivial task by providing a consistent interface +through which they can be monitored and controlled. + +## Installations up to Cachet v2.3 + +`cachet.conf` + +``` +[program:cachet-queue] +command=php artisan queue:work --daemon --delay=2 --sleep=1 --tries=3 +directory=/var/www/cachet/ +redirect\_stderr=true +autostart=true +autorestart=true +user=cachet +``` + +## Installations from Cachet v2.4-dev onwards + +`cachet.conf` + +``` +[program:cachet-queue] +command=php artisan queue:work --delay=1 --sleep=1 --timeout=1800 --tries=3 +directory=/var/www/cachet/ +redirect\_stderr=true +autostart=true +autorestart=true +user=cachet +``` + +> **Update to your configuration!** +> Be sure to update the values in the example configuration above to match +> your installation setup. + +## Database Queue with Cron + +The default installation of Cachet sets the queue type to database which means +that all jobs are stored within your database and is then processed by a cron +job which calls an artisan command from within the project directory. + +You'll need to create a new cron job, in Ubuntu it's a case of running +crontab -e and adding this line: + +`* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1` + +Close the file and the cron job will now begin running, processing any +confirmation and incident emails. + +## Synchronous Queue (not recommended for larger installs) + +If you cannot add a queue job, another alternative is to process all of +the jobs immediately after they are created. + +> **Not suitable for larger installations!** +> This setup is not ideal for larger installs with hundreds of subscribers +> as each email can take a few seconds to send and would slow down your +> interaction with the system. + +To set this up change the .env file with the following setting: + +`QUEUE_DRIVER=sync` diff --git a/docs/setup/configuring-subscribers.md b/docs/setup/configuring-subscribers.md new file mode 100644 index 000000000000..3c1030a9bdf3 --- /dev/null +++ b/docs/setup/configuring-subscribers.md @@ -0,0 +1,24 @@ +# Configuring Subscribers + +Learn how to setup subscribers. + +One of the most powerful features of Cachet is the ability to automatically +send notification emails to anybody who has subscribed to your status +page whenever an incident is created. + +> **Hold up!** +> Before going any further, ensure that you've [configured +> the mail][1] and the [queue][2]. + +Once you've [Configuring Mail][1], you need to login to your Dashboard and enable +the Allow people to signup to email notifications? setting found in the +Application Setup panel. + +Once you've enabled this setting you'll see a Subscribe button in the footer +of your status page: + +![Enable subscribers][3] + +[1]: configuring-mail.md +[2]: configuring-queue.md +[3]: ../images/enable-subscribers.png diff --git a/docs/setup/cors.md b/docs/setup/cors.md new file mode 100644 index 000000000000..6e29dc8096fc --- /dev/null +++ b/docs/setup/cors.md @@ -0,0 +1,18 @@ +# CORS + +Cross-original resource sharing + +> **External Access** +> By default Cachet can be accessed by any third-party server. + +You may configure your Cachet installation for CORS very easily. To blacklist everybody except one or more domains: + +- Login to your Dashboard +- Go to the Settings panel +- Click on Security +- You'll see a Allowed domains textarea, fill in any domains that you + want to access the API as a comma separated list: + +``` +https://demo.cachethq.io,https://status.cachethq.io +``` diff --git a/docs/setup/installation.md b/docs/setup/installation.md new file mode 100644 index 000000000000..154c2ca3578c --- /dev/null +++ b/docs/setup/installation.md @@ -0,0 +1,182 @@ +# Install Cachet + +This guide will detail how to install Cachet on your server. + +## Download the source code with Git + +> **Check out the latest version!** +> The tags below are examples of what will be shown. +> You should always run git checkout on the latest tag. + +``` +$ cd /var/www # Or wherever you chose to install web applications to +$ git clone https://github.com/CachetHQ/Cachet.git +$ cd Cachet +$ git tag -l + +v2.3.1 +v2.3.10 +v2.3.11 +v2.3.12 +v2.3.13 +v2.3.14 + +git checkout v2.3.14 +``` + +## Editing the configuration file + +By default Cachet comes with a `.env.example` file. You'll need to copy this +file to `.env` regardless of what environment you're working on. + +> On Windows you can use `copy .env.example .env` if you can't do it using the +> explorer. + +It's now just a case of editing this new .env file and setting the values of your setup. + +> **Environment Configuration Notice** +> Any values with spaces in them should be contained within double quotes. + +The `.env` file set environment variables that will be used by the application. + +> **SQLite hosts** +> If you're using SQLite then your .env file should not contain a +> `DB_HOST` key. You'll also need to touch ./database/database.sqlite +> and give it the required permissions. + +## Installing Composer + +Cachet uses dependencies, so it's required to have Composer installed. +Composer can be installed following the [official guide][1] + +## Installing dependencies + +```bash +composer install --no-dev -o +``` + +If you are installing Cachet as a contributor, you can forget the `--no-dev` +option. + +> **Tip for Windows users** +> If you're stuck at the Composer stage, you can run +> `composer install --no-dev -o --no-scripts` +> which usually fixes any issues on Windows servers. + +## Using the install command + +Cachet comes with an installation command that will: + +- Run migrations +- Run seeders (of which there are none) + +```bash +php artisan cachet:install +``` + +> Never change the `APP_KEY` after installation on production environment. +> This will result in all of your encrypted/hashed data being lost. + +> **Getting a 500 - Internal Server Error?** +> If you get a 500 error when visiting your status page, you may need to +> run `chmod -R 755 .env bootstrap/cache storage`. +> Also if you set value `file` for `CACHE_DRIVER` and `SESSION_DRIVER` parameters in `.env` file run `chmod -R 755 bootstrap/cachet`. +> Finally run `rm -rf bootstrap/cache/*` for delete old cache. + +## Running Cachet on Apache + +> **Required Apache Modules** +> You need to enable `mod_rewrite` for Apache. On Debian-based systems you can do this by +> +> `sudo a2enmod rewrite` + +Once Cachet is setup, the Apache installation is as simple as creating a +new Virtual Host entry in the httpd-vhosts.conf file. + +``` + + ServerName cachet.dev + # Or whatever you want to use + ServerAlias cachet.dev + # Make this the same as ServerName + DocumentRoot "/var/www/Cachet/public" + + Require all granted + # Used by Apache 2.4 + Options Indexes FollowSymLinks + AllowOverride All + Order allow,deny + Allow from all + + +``` + +Restart Apache by running the following: + +`sudo service apache2 restart` + + +If you also need HTTPS on apache you will need to get the ssl mod installed +and the default ssl conf file enabled. See DigitalOcean's [documentation][2]. + +## Running Cachet on nginx + +- You'll need to install php5-fpm - [DigitalOcean][3] has a nice LEMP installation tutorial +- Generate your SSL key+certificate +- Create a new vhost such as `/etc/nginx/sites-enabled/cachet.conf:` + +``` +# Upstream to abstract backend connection(s) for php +upstream php { + server unix:/tmp/php-cgi.socket; + server 127.0.0.1:9000; +} + +server { + server_name cachet.mycompany.com; # Or whatever you want to use + listen 80 default; + rewrite ^(.*) https://cachet.mycompany.com$1 permanent; +} + +# HTTPS server + +server { + listen 443; + server_name cachet.mycompany.com; + + root /var/vhost/cachet.mycompany.com/public; + index index.php; + + ssl on; + ssl_certificate /etc/ssl/crt/cachet.mycompany.com.crt; # Or wherever your crt is + ssl_certificate_key /etc/ssl/key/cachet.mycompany.com.key; # Or wherever your key is + ssl_session_timeout 5m; + + # Best practice as at March 2014 + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA"; + ssl_buffer_size 1400; # 1400 bytes, within MTU - because we generally have small responses. Could increase to 4k, but default 16k is too big + + location / { + add_header Strict-Transport-Security max-age=15768000; + try_files $uri /index.php$is_args$args; + } + + location ~ \.php$ { + include fastcgi_params; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_index index.php; + fastcgi_keep_conn on; + add_header Strict-Transport-Security max-age=15768000; + } +} +``` + +Start php5-fpm and nginx and you're done! + + +[1]: https://getcomposer.org/download/ +[2]: https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04 +[3]: https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04 diff --git a/docs/setup/prerequisites.md b/docs/setup/prerequisites.md new file mode 100644 index 000000000000..d8d195bdc4ce --- /dev/null +++ b/docs/setup/prerequisites.md @@ -0,0 +1,35 @@ +# Prerequisites + +To start using Cachet, you'll need some prerequisites. + +## Application Prerequisites + +You'll need at least the following installed on your server: + +- PHP 7.1.3, you'll also need `ext-gd`, `ext-simplexml`, `ext-xml`, `ext-mbstring` and `ext-tokenizer` installed. +- [Composer][1] +- APCu or Redis for caching. +- A database driver for your DB such as; MySQL, PostgreSQL or SQLite. +- Git + +> **SQLite** +> Whilst we support SQLite, we advise not using it for status pages +> with a high amount of traffic. + +> **MySQL Timezone Info** +> Ensure your MySQL database has been updated with the correct timezone +> information. This will ensure that metrics are shown +> correctly: [https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html][2] + +## Developer prerequisites + +If you are looking to contribute to Cachet, thank you! Your help is really +appreciated! You may need some extra dependencies; depending on what you're looking for. + +Our CSS is compiled from SCSS, so to compile this you will need the following: + +- Node.js +- NPM or Yarn + +[1]: https://getcomposer.org/ +[2]: https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html diff --git a/docs/third-party-integrations.md b/docs/third-party-integrations.md new file mode 100644 index 000000000000..1e1f4371bdcc --- /dev/null +++ b/docs/third-party-integrations.md @@ -0,0 +1,28 @@ +# Third-party Integrations + +Below is a list of known applications or services using the Cachet API. + +Name|Link|Description +----|----|----------- +Cachet Monitor|[https://github.com/castawaylabs/cachet-monitor][1]|For URL monitoring. Automatic incident updates +Sensu Cachet|[https://github.com/bimlendu/sensu-cachethq][2]|Sensu handler for updating Cachet +Hubot Cachet|[https://github.com/willdurand/hubot-cachet][3]|A hubot script to manage incidents/statuses with Cachet +Nagios Notification|[https://github.com/mpellegrin/nagios-eventhandler-cachet][4]|A Nagios event handler to push Nagios notifications to Cachet API +Salt Cachet|[https://github.com/alkivi-sas/salt-cachet][5]|Salt module to use with Cachet +Pingometer|[https://pingometer.com][6]|Website uptime monitoring +Cachet URL Monitor|[https://github.com/mtakaki/cachet-url-monitor][7]/|Monitors an URL using HTTP status code, latency, and/or payload regex +Zabbix-Cachet|[https://github.com/qk4l/zabbix-cachet][8]|Synhronise your Zabbix IT Services and Cachet +CheckItOn.Us|[https://checkiton.us][9]|Server monitoring tool +Cachet-Monitor|[https://github.com/gaz492/cachet-monitor][10]|Monitors URL status via checking status codes, supports all Cloudflare http codes and more. See README for more + + +[1]: https://github.com/castawaylabs/cachet-monitor +[2]: https://github.com/bimlendu/sensu-cachethq +[3]: https://github.com/willdurand/hubot-cachet +[4]: https://github.com/mpellegrin/nagios-eventhandler-cachet +[5]: https://github.com/alkivi-sas/salt-cachet +[6]: https://pingometer.com/ +[7]: https://github.com/mtakaki/cachet-url-monitor/ +[8]: https://github.com/qk4l/zabbix-cachet +[9]: https://checkiton.us/ +[10]: https://github.com/gaz492/cachet-monitor diff --git a/docs/upgrade/UPGRADE-2.4.md b/docs/upgrade/UPGRADE-2.4.md new file mode 100644 index 000000000000..555ac81da51f --- /dev/null +++ b/docs/upgrade/UPGRADE-2.4.md @@ -0,0 +1,10 @@ +# Upgrading cachet 2.3 to 2.4 + +# PHP 7 +Cachet 2.4 is build using the Laravel 5.6 which requires at least PHP 7.1.3 or higher. + +# Backups +In previous versions Cachet would ship with `backup-manager/laravel` to create database backups at certain points when +running the software. This is no longer provided by default in 2.4. You are free to implement your custom backup +solution when running cachet on your environments. If you do prefer a backup solution close to the pre 2.4 Cachet version: +Spatie has created [a backup manager](https://github.com/spatie/laravel-backup) that comes close to the original implementation. diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 9f221a4362f8..000000000000 --- a/gulpfile.js +++ /dev/null @@ -1,40 +0,0 @@ -var elixir = require('laravel-elixir'); - -elixir((mix) => { - mix - .copy( - 'node_modules/jquery-minicolors/jquery.minicolors.css', - 'resources/assets/sass/plugins/_jquery.minicolors.scss' - ) - .copy( - 'node_modules/github-markdown-css/github-markdown.css', - 'resources/assets/sass/plugins/_github-markdown.scss' - ) - .copy('node_modules/ionicons/fonts', 'public/fonts') - .sass('dashboard.scss', 'public/dist/css/dashboard.css') - .sass('app.scss', 'public/dist/css/app.css') - .scripts([ - 'node_modules/jquery/dist/jquery.js', - 'node_modules/bootstrap-sass/assets/javascripts/bootstrap.js', - 'node_modules/moment/min/moment-with-locales.js', - 'node_modules/eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker.js', - 'node_modules/lodash/lodash.js', - 'node_modules/autosize/dist/autosize.js', - 'node_modules/messenger/build/js/messenger.js', - 'node_modules/sortablejs/Sortable.js', - 'node_modules/livestamp/livestamp.js', - 'node_modules/jquery-minicolors/jquery.minicolors.js', - 'node_modules/jquery-serializeobject/jquery.serializeObject.js', - 'node_modules/chart.js/dist/Chart.js', - 'node_modules/jquery-sparkline/jquery.sparkline.js', - 'node_modules/sweetalert2/dist/sweetalert2.js', - 'resources/assets/js/password-strength.js', - 'resources/assets/js/app.js', - 'resources/assets/js/**/*.js' - ], 'public/dist/js/all.js', './') - .version([ - 'public/dist/css/dashboard.css', - 'public/dist/css/app.css', - 'public/dist/js/all.js' - ]); -}); diff --git a/package.json b/package.json index 60f93288ae06..4677d27360bb 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,41 @@ { "name": "cachet", + "scripts": { + "dev": "npm run development", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch-poll": "npm run watch -- --watch-poll", + "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", + "prod": "npm run production", + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + }, "devDependencies": { - "gulp": "~3.9.1", - "laravel-elixir": "~6.0.0-9", - "animate-sass": "git+https://github.com/tgdev/animate-sass.git", - "autosize": "^3.0.15", - "bootstrap-sass": "^3.3.6", - "chart.js": "^2.2.0", - "eonasdan-bootstrap-datetimepicker": "~4.17", + "animate-sass": "^0.8.2", + "axios": "^0.19", + "bootstrap-sass": "^3.4.3", + "chart.js": "^2.9.4", + "cross-env": "^5.1", + "es5-shim": "^4.5.14", + "flatpickr": "^4.5.7", "github-markdown-css": "^2.3.0", "ionicons": "~2.0", + "jquery": "^3.4.0", "jquery-minicolors": "^2.1.10", "jquery-serializeobject": "^1.0.0", - "jquery-sparkline": "^2.3.2", - "jquery": "~2.2", + "jquery-sparkline": "^2.4.0", + "laravel-mix": "^5.0.9", + "laravel-mix-purgecss": "^4.2.0", "livestamp": "git+https://github.com/mattbradley/livestampjs.git#develop", - "lodash": "^4.12.0", + "lodash": "^4.17.13", "messenger": "git+https://github.com/HubSpot/messenger.git", - "moment": "^2.13.0", - "sortablejs": "^1.4.2", - "sweetalert2": "^4.0.4" + "moment": "^2.24.0", + "promise": "^7.3.1", + "sass": "^1.69.5", + "sass-loader": "^8.0.2", + "sortablejs": "^1.8.4", + "sweetalert2": "^6.8.0", + "vue": "^2.7.15", + "vue-template-compiler": "^2.7.15" }, "private": true } diff --git a/public/build/dist/css/all-81fdbf996d.css b/public/build/dist/css/all-81fdbf996d.css deleted file mode 100644 index c36bea3c55ec..000000000000 --- a/public/build/dist/css/all-81fdbf996d.css +++ /dev/null @@ -1,28 +0,0 @@ -@charset "UTF-8";.minicolors{position:relative}.minicolors-sprite{background-image:url(data:image/png;base64,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)}.minicolors-no-data-uris .minicolors-sprite{background-image:url(jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;border:1px solid #ccc;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors input[type=hidden]+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors input[type=hidden][disabled]+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;height:152px;background:#fff;border:1px solid #ccc;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;box-sizing:content-box;display:none}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-opacity-slider,.minicolors-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider,.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:1px solid #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:none}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:2px solid #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:1px solid #000;margin-top:-2px;box-sizing:content-box}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}.minicolors-theme-default .minicolors-swatch{top:5px;left:5px;width:18px;height:18px}.minicolors-theme-default.minicolors-position-right .minicolors-swatch{left:auto;right:5px}.minicolors-theme-default.minicolors{width:auto;display:inline-block}.minicolors-theme-default .minicolors-input{height:20px;width:auto;display:inline-block;padding-left:26px}.minicolors-theme-default.minicolors-position-right .minicolors-input{padding-right:26px;padding-left:inherit}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:3px;left:3px;width:28px;height:28px;border-radius:3px}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch{left:auto;right:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:44px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}body.stop-scrolling{height:100%;overflow:hidden}.sweet-overlay{background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";background-color:rgba(0,0,0,.4);position:fixed;left:0;right:0;top:0;bottom:0;display:none;z-index:10000}.sweet-alert{background-color:#fff;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;width:478px;padding:17px;border-radius:5px;text-align:center;position:fixed;left:50%;top:50%;margin-left:-256px;margin-top:-200px;overflow:hidden;display:none;z-index:99999}@media all and (max-width:540px){.sweet-alert{width:auto;margin-left:0;margin-right:0;left:15px;right:15px}}.sweet-alert h2{color:#575757;font-size:30px;font-weight:600;text-transform:none;margin:25px 0;line-height:40px;display:block}.sweet-alert h2,.sweet-alert p{text-align:center;position:relative;padding:0}.sweet-alert p{color:#797979;font-size:16px;font-weight:300;text-align:inherit;float:none;margin:0;line-height:normal}.sweet-alert fieldset{border:none;position:relative}.sweet-alert .sa-error-container{background-color:#f1f1f1;margin-left:-17px;margin-right:-17px;overflow:hidden;padding:0 10px;max-height:0;webkit-transition:padding .15s,max-height .15s;transition:padding .15s,max-height .15s}.sweet-alert .sa-error-container.show{padding:10px 0;max-height:100px;webkit-transition:padding .2s,max-height .2s;transition:padding .25s,max-height .25s}.sweet-alert .sa-error-container .icon{display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:3px}.sweet-alert .sa-error-container p{display:inline-block}.sweet-alert .sa-input-error{position:absolute;top:29px;right:26px;width:20px;height:20px;opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:all .1s;transition:all .1s}.sweet-alert .sa-input-error:after,.sweet-alert .sa-input-error:before{content:"";width:20px;height:6px;background-color:#f06e57;border-radius:3px;position:absolute;top:50%;margin-top:-4px;left:50%;margin-left:-9px}.sweet-alert .sa-input-error:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-input-error:after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-input-error.show{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.sweet-alert input{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;height:43px;margin-top:10px;margin-bottom:17px;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);padding:0 12px;display:none;-webkit-transition:all .3s;transition:all .3s}.sweet-alert input:focus{outline:none;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.sweet-alert input:focus::-moz-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input:focus:-ms-input-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input:focus::-webkit-input-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input::-moz-placeholder{color:#bdbdbd}.sweet-alert input:-ms-input-placeholder{color:#bdbdbd}.sweet-alert input::-webkit-input-placeholder{color:#bdbdbd}.sweet-alert.show-input input{display:block}.sweet-alert .sa-confirm-button-container{display:inline-block;position:relative}.sweet-alert .la-ball-fall{position:absolute;left:50%;top:50%;margin-left:-27px;margin-top:4px;opacity:0;visibility:hidden}.sweet-alert button{background-color:#8cd4f5;color:#fff;border:none;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:26px 5px 0;cursor:pointer}.sweet-alert button:focus{outline:none;box-shadow:0 0 2px rgba(128,179,235,.5),inset 0 0 0 1px rgba(0,0,0,.05)}.sweet-alert button:hover{background-color:#7ecff4}.sweet-alert button:active{background-color:#5dc2f1}.sweet-alert button.cancel{background-color:#c1c1c1}.sweet-alert button.cancel:hover{background-color:#b9b9b9}.sweet-alert button.cancel:active{background-color:#a8a8a8}.sweet-alert button.cancel:focus{box-shadow:0 0 2px rgba(197,205,211,.8),inset 0 0 0 1px rgba(0,0,0,.0470588)!important}.sweet-alert button[disabled]{opacity:.6;cursor:default}.sweet-alert button.confirm[disabled]{color:transparent}.sweet-alert button.confirm[disabled]~.la-ball-fall{opacity:1;visibility:visible;transition-delay:0s}.sweet-alert button::-moz-focus-inner{border:0}.sweet-alert[data-has-cancel-button=false] button{box-shadow:none!important}.sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false]{padding-bottom:40px}.sweet-alert .sa-icon{width:80px;height:80px;border:4px solid gray;border-radius:40px;border-radius:50%;margin:20px auto;padding:0;position:relative;box-sizing:content-box}.sweet-alert .sa-icon.sa-error{border-color:#f27474}.sweet-alert .sa-icon.sa-error .sa-x-mark{position:relative;display:block}.sweet-alert .sa-icon.sa-error .sa-line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.sweet-alert .sa-icon.sa-error .sa-line.sa-left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.sweet-alert .sa-icon.sa-error .sa-line.sa-right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.sweet-alert .sa-icon.sa-warning{border-color:#f8bb86}.sweet-alert .sa-icon.sa-warning .sa-body{position:absolute;width:5px;height:47px;left:50%;top:10px;border-radius:2px;margin-left:-2px;background-color:#f8bb86}.sweet-alert .sa-icon.sa-warning .sa-dot{position:absolute;width:7px;height:7px;border-radius:50%;margin-left:-3px;left:50%;bottom:10px;background-color:#f8bb86}.sweet-alert .sa-icon.sa-info{border-color:#c9dae1}.sweet-alert .sa-icon.sa-info:before{content:"";position:absolute;width:5px;height:29px;left:50%;bottom:17px;border-radius:2px;margin-left:-2px;background-color:#c9dae1}.sweet-alert .sa-icon.sa-info:after{content:"";position:absolute;width:7px;height:7px;border-radius:50%;margin-left:-3px;top:19px;background-color:#c9dae1}.sweet-alert .sa-icon.sa-success{border-color:#a5dc86}.sweet-alert .sa-icon.sa-success:after,.sweet-alert .sa-icon.sa-success:before{content:'';border-radius:40px;border-radius:50%;position:absolute;width:60px;height:120px;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-icon.sa-success:before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.sweet-alert .sa-icon.sa-success:after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.sweet-alert .sa-icon.sa-success .sa-placeholder{width:80px;height:80px;border:4px solid hsla(98,55%,69%,.2);border-radius:40px;border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.sweet-alert .sa-icon.sa-success .sa-fix{width:5px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-icon.sa-success .sa-line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.sweet-alert .sa-icon.sa-success .sa-line.sa-tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-icon.sa-success .sa-line.sa-long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-icon.sa-custom{background-size:contain;border-radius:0;border:none;background-position:50%;background-repeat:no-repeat}@-webkit-keyframes showSweetAlert{0%{transform:scale(.7);-webkit-transform:scale(.7)}45%{transform:scale(1.05);-webkit-transform:scale(1.05)}80%{transform:scale(.95);-webkit-transform:scale(.95)}to{transform:scale(1);-webkit-transform:scale(1)}}@keyframes showSweetAlert{0%{transform:scale(.7);-webkit-transform:scale(.7)}45%{transform:scale(1.05);-webkit-transform:scale(1.05)}80%{transform:scale(.95);-webkit-transform:scale(.95)}to{transform:scale(1);-webkit-transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{transform:scale(1);-webkit-transform:scale(1)}to{transform:scale(.5);-webkit-transform:scale(.5)}}@keyframes hideSweetAlert{0%{transform:scale(1);-webkit-transform:scale(1)}to{transform:scale(.5);-webkit-transform:scale(.5)}}@-webkit-keyframes slideFromTop{0%{top:0}to{top:50%}}@keyframes slideFromTop{0%{top:0}to{top:50%}}@-webkit-keyframes slideToTop{0%{top:50%}to{top:0}}@keyframes slideToTop{0%{top:50%}to{top:0}}@-webkit-keyframes slideFromBottom{0%{top:70%}to{top:50%}}@keyframes slideFromBottom{0%{top:70%}to{top:50%}}@-webkit-keyframes slideToBottom{0%{top:50%}to{top:70%}}@keyframes slideToBottom{0%{top:50%}to{top:70%}}.showSweetAlert[data-animation=pop]{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.showSweetAlert[data-animation=none]{-webkit-animation:none;animation:none}.showSweetAlert[data-animation=slide-from-top]{-webkit-animation:slideFromTop .3s;animation:slideFromTop .3s}.showSweetAlert[data-animation=slide-from-bottom]{-webkit-animation:slideFromBottom .3s;animation:slideFromBottom .3s}.hideSweetAlert[data-animation=pop]{-webkit-animation:hideSweetAlert .2s;animation:hideSweetAlert .2s}.hideSweetAlert[data-animation=none]{-webkit-animation:none;animation:none}.hideSweetAlert[data-animation=slide-from-top]{-webkit-animation:slideToTop .4s;animation:slideToTop .4s}.hideSweetAlert[data-animation=slide-from-bottom]{-webkit-animation:slideToBottom .3s;animation:slideToBottom .3s}@-webkit-keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@-webkit-keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}5%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}12%{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}to{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}5%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}12%{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}to{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}}.animateSuccessTip{-webkit-animation:animateSuccessTip .75s;animation:animateSuccessTip .75s}.animateSuccessLong{-webkit-animation:animateSuccessLong .75s;animation:animateSuccessLong .75s}.sa-icon.sa-success.animate:after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animateErrorIcon{0%{transform:rotateX(100deg);-webkit-transform:rotateX(100deg);opacity:0}to{transform:rotateX(0deg);-webkit-transform:rotateX(0deg);opacity:1}}@keyframes animateErrorIcon{0%{transform:rotateX(100deg);-webkit-transform:rotateX(100deg);opacity:0}to{transform:rotateX(0deg);-webkit-transform:rotateX(0deg);opacity:1}}.animateErrorIcon{-webkit-animation:animateErrorIcon .5s;animation:animateErrorIcon .5s}@-webkit-keyframes animateXMark{0%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}50%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}80%{transform:scale(1.15);-webkit-transform:scale(1.15);margin-top:-6px}to{transform:scale(1);-webkit-transform:scale(1);margin-top:0;opacity:1}}@keyframes animateXMark{0%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}50%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}80%{transform:scale(1.15);-webkit-transform:scale(1.15);margin-top:-6px}to{transform:scale(1);-webkit-transform:scale(1);margin-top:0;opacity:1}}.animateXMark{-webkit-animation:animateXMark .5s;animation:animateXMark .5s}@-webkit-keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}@keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}.pulseWarning{-webkit-animation:pulseWarning .75s infinite alternate;animation:pulseWarning .75s infinite alternate}@-webkit-keyframes pulseWarningIns{0%{background-color:#f8d486}to{background-color:#f8bb86}}@keyframes pulseWarningIns{0%{background-color:#f8d486}to{background-color:#f8bb86}}.pulseWarningIns{-webkit-animation:pulseWarningIns .75s infinite alternate;animation:pulseWarningIns .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes rotate-loading{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sweet-alert .sa-icon.sa-error .sa-line.sa-left{-ms-transform:rotate(45deg)\9}.sweet-alert .sa-icon.sa-error .sa-line.sa-right{-ms-transform:rotate(-45deg)\9}.sweet-alert .sa-icon.sa-success{border-color:transparent\9}.sweet-alert .sa-icon.sa-success .sa-line.sa-tip{-ms-transform:rotate(45deg)\9}.sweet-alert .sa-icon.sa-success .sa-line.sa-long{-ms-transform:rotate(-45deg)\9} - -/*! - * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/) - * Copyright 2015 Daniel Cardoso <@DanielCardoso> - * Licensed under MIT - */.la-ball-fall,.la-ball-fall>div{position:relative;box-sizing:border-box}.la-ball-fall{display:block;font-size:0;color:#fff}.la-ball-fall.la-dark{color:#333}.la-ball-fall>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.la-ball-fall{width:54px;height:18px}.la-ball-fall>div{width:10px;height:10px;margin:4px;border-radius:100%;opacity:0;-webkit-animation:ball-fall 1s ease-in-out infinite;animation:ball-fall 1s ease-in-out infinite}.la-ball-fall>div:nth-child(1){-webkit-animation-delay:-.2s;animation-delay:-.2s}.la-ball-fall>div:nth-child(2){-webkit-animation-delay:-.1s;animation-delay:-.1s}.la-ball-fall>div:nth-child(3){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-fall.la-sm{width:26px;height:8px}.la-ball-fall.la-sm>div{width:4px;height:4px;margin:2px}.la-ball-fall.la-2x{width:108px;height:36px}.la-ball-fall.la-2x>div{width:20px;height:20px;margin:8px}.la-ball-fall.la-3x{width:162px;height:54px}.la-ball-fall.la-3x>div{width:30px;height:30px;margin:12px}@-webkit-keyframes ball-fall{0%{opacity:0;-webkit-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-webkit-transform:translateY(145%);transform:translateY(145%)}}@keyframes ball-fall{0%{opacity:0;-webkit-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-webkit-transform:translateY(145%);transform:translateY(145%)}}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format('woff')}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=button]:-moz-focusring,.markdown-body [type=reset]:-moz-focusring,.markdown-body [type=submit]:-moz-focusring,.markdown-body button:-moz-focusring{outline:1px dotted ButtonText}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif}.markdown-body a{color:#4078c0;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{text-decoration:underline}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #ddd}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0;line-height:1.5}.markdown-body h1{font-size:30px}.markdown-body h2{font-size:21px}.markdown-body h3{font-size:16px}.markdown-body h4{font-size:14px}.markdown-body h5{font-size:12px}.markdown-body h6{font-size:11px}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font:12px Consolas,Liberation Mono,Menlo,Courier,monospace}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:3px!important}.markdown-body .pl-2{padding-left:6px!important}.markdown-body .pl-3{padding-left:12px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:36px!important}.markdown-body .pl-6{padding-left:48px!important}.markdown-body .form-select::-ms-expand{opacity:0}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{display:inline-block;padding-right:2px;margin-left:-18px}.markdown-body .anchor:focus{outline:none}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h4 .anchor{line-height:1.2}.markdown-body h5{font-size:1em}.markdown-body h5 .anchor{line-height:1.1}.markdown-body h6{font-size:1em;color:#777}.markdown-body h6 .anchor{line-height:1.1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code{display:inline;max-width:none;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#183691}.markdown-body .pl-v{color:#ed6a43}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{background-color:#b52a1d;color:#f8f8f8}.markdown-body .pl-sr .pl-cce{color:#63a35c;font-weight:700}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#1d3e81;font-weight:700}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{color:#333;font-style:italic}.markdown-body .pl-mb{color:#333;font-weight:700}.markdown-body .pl-md{background-color:#ffecec;color:#bd2c00}.markdown-body .pl-mi1{background-color:#eaffea;color:#55a532}.markdown-body .pl-mdr{color:#795da3;font-weight:700}.markdown-body .pl-mo{color:#1d3e81}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee} -/*! - Ionicons, v2.0.1 - Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ - https://twitter.com/benjsperry https://twitter.com/ionicframework - MIT License: https://github.com/driftyco/ionicons - - Android-style icons originally built by Google’s - Material Design Icons: https://github.com/google/material-design-icons - used under CC BY http://creativecommons.org/licenses/by/4.0/ - Modified icons to fit ionicon’s grid from original. -*/@font-face{font-family:Ionicons;src:url(../../../fonts/ionicons.eot?v=2.0.1);src:url(../../../fonts/ionicons.eot?v=2.0.1#iefix) format("embedded-opentype"),url(../../../fonts/ionicons.ttf?v=2.0.1) format("truetype"),url(../../../fonts/ionicons.woff?v=2.0.1) format("woff"),url(../../../fonts/ionicons.svg?v=2.0.1#Ionicons) format("svg");font-weight:400;font-style:normal}.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-circle:before,.ion-android-add:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-cloud:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done-all:before,.ion-android-done:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite-outline:before,.ion-android-favorite:before,.ion-android-film:before,.ion-android-folder-open:before,.ion-android-folder:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone-off:before,.ion-android-microphone:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-notifications:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person-add:before,.ion-android-person:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove-circle:before,.ion-android-remove:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share-alt:before,.ion-android-share:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace-outline:before,.ion-backspace:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email-unread:before,.ion-email:before,.ion-erlenmeyer-flask-bubbles:before,.ion-erlenmeyer-flask:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy-outline:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios-alarm-outline:before,.ion-ios-alarm:before,.ion-ios-albums-outline:before,.ion-ios-albums:before,.ion-ios-americanfootball-outline:before,.ion-ios-americanfootball:before,.ion-ios-analytics-outline:before,.ion-ios-analytics:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at-outline:before,.ion-ios-at:before,.ion-ios-barcode-outline:before,.ion-ios-barcode:before,.ion-ios-baseball-outline:before,.ion-ios-baseball:before,.ion-ios-basketball-outline:before,.ion-ios-basketball:before,.ion-ios-bell-outline:before,.ion-ios-bell:before,.ion-ios-body-outline:before,.ion-ios-body:before,.ion-ios-bolt-outline:before,.ion-ios-bolt:before,.ion-ios-book-outline:before,.ion-ios-book:before,.ion-ios-bookmarks-outline:before,.ion-ios-bookmarks:before,.ion-ios-box-outline:before,.ion-ios-box:before,.ion-ios-briefcase-outline:before,.ion-ios-briefcase:before,.ion-ios-browsers-outline:before,.ion-ios-browsers:before,.ion-ios-calculator-outline:before,.ion-ios-calculator:before,.ion-ios-calendar-outline:before,.ion-ios-calendar:before,.ion-ios-camera-outline:before,.ion-ios-camera:before,.ion-ios-cart-outline:before,.ion-ios-cart:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatbubble-outline:before,.ion-ios-chatbubble:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-checkmark:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock-outline:before,.ion-ios-clock:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-close:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-outline:before,.ion-ios-cloudy:before,.ion-ios-cog-outline:before,.ion-ios-cog:before,.ion-ios-color-filter-outline:before,.ion-ios-color-filter:before,.ion-ios-color-wand-outline:before,.ion-ios-color-wand:before,.ion-ios-compose-outline:before,.ion-ios-compose:before,.ion-ios-contact-outline:before,.ion-ios-contact:before,.ion-ios-copy-outline:before,.ion-ios-copy:before,.ion-ios-crop-strong:before,.ion-ios-crop:before,.ion-ios-download-outline:before,.ion-ios-download:before,.ion-ios-drag:before,.ion-ios-email-outline:before,.ion-ios-email:before,.ion-ios-eye-outline:before,.ion-ios-eye:before,.ion-ios-fastforward-outline:before,.ion-ios-fastforward:before,.ion-ios-filing-outline:before,.ion-ios-filing:before,.ion-ios-film-outline:before,.ion-ios-film:before,.ion-ios-flag-outline:before,.ion-ios-flag:before,.ion-ios-flame-outline:before,.ion-ios-flame:before,.ion-ios-flask-outline:before,.ion-ios-flask:before,.ion-ios-flower-outline:before,.ion-ios-flower:before,.ion-ios-folder-outline:before,.ion-ios-folder:before,.ion-ios-football-outline:before,.ion-ios-football:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-b-outline:before,.ion-ios-game-controller-b:before,.ion-ios-gear-outline:before,.ion-ios-gear:before,.ion-ios-glasses-outline:before,.ion-ios-glasses:before,.ion-ios-grid-view-outline:before,.ion-ios-grid-view:before,.ion-ios-heart-outline:before,.ion-ios-heart:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-help:before,.ion-ios-home-outline:before,.ion-ios-home:before,.ion-ios-infinite-outline:before,.ion-ios-infinite:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-information:before,.ion-ios-ionic-outline:before,.ion-ios-keypad-outline:before,.ion-ios-keypad:before,.ion-ios-lightbulb-outline:before,.ion-ios-lightbulb:before,.ion-ios-list-outline:before,.ion-ios-list:before,.ion-ios-location-outline:before,.ion-ios-location:before,.ion-ios-locked-outline:before,.ion-ios-locked:before,.ion-ios-loop-strong:before,.ion-ios-loop:before,.ion-ios-medical-outline:before,.ion-ios-medical:before,.ion-ios-medkit-outline:before,.ion-ios-medkit:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-mic:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-minus:before,.ion-ios-monitor-outline:before,.ion-ios-monitor:before,.ion-ios-moon-outline:before,.ion-ios-moon:before,.ion-ios-more-outline:before,.ion-ios-more:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate-outline:before,.ion-ios-navigate:before,.ion-ios-nutrition-outline:before,.ion-ios-nutrition:before,.ion-ios-paper-outline:before,.ion-ios-paper:before,.ion-ios-paperplane-outline:before,.ion-ios-paperplane:before,.ion-ios-partlysunny-outline:before,.ion-ios-partlysunny:before,.ion-ios-pause-outline:before,.ion-ios-pause:before,.ion-ios-paw-outline:before,.ion-ios-paw:before,.ion-ios-people-outline:before,.ion-ios-people:before,.ion-ios-person-outline:before,.ion-ios-person:before,.ion-ios-personadd-outline:before,.ion-ios-personadd:before,.ion-ios-photos-outline:before,.ion-ios-photos:before,.ion-ios-pie-outline:before,.ion-ios-pie:before,.ion-ios-pint-outline:before,.ion-ios-pint:before,.ion-ios-play-outline:before,.ion-ios-play:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-plus:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetags-outline:before,.ion-ios-pricetags:before,.ion-ios-printer-outline:before,.ion-ios-printer:before,.ion-ios-pulse-strong:before,.ion-ios-pulse:before,.ion-ios-rainy-outline:before,.ion-ios-rainy:before,.ion-ios-recording-outline:before,.ion-ios-recording:before,.ion-ios-redo-outline:before,.ion-ios-redo:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-refresh:before,.ion-ios-reload:before,.ion-ios-reverse-camera-outline:before,.ion-ios-reverse-camera:before,.ion-ios-rewind-outline:before,.ion-ios-rewind:before,.ion-ios-rose-outline:before,.ion-ios-rose:before,.ion-ios-search-strong:before,.ion-ios-search:before,.ion-ios-settings-strong:before,.ion-ios-settings:before,.ion-ios-shuffle-strong:before,.ion-ios-shuffle:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipbackward:before,.ion-ios-skipforward-outline:before,.ion-ios-skipforward:before,.ion-ios-snowy:before,.ion-ios-speedometer-outline:before,.ion-ios-speedometer:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-star:before,.ion-ios-stopwatch-outline:before,.ion-ios-stopwatch:before,.ion-ios-sunny-outline:before,.ion-ios-sunny:before,.ion-ios-telephone-outline:before,.ion-ios-telephone:before,.ion-ios-tennisball-outline:before,.ion-ios-tennisball:before,.ion-ios-thunderstorm-outline:before,.ion-ios-thunderstorm:before,.ion-ios-time-outline:before,.ion-ios-time:before,.ion-ios-timer-outline:before,.ion-ios-timer:before,.ion-ios-toggle-outline:before,.ion-ios-toggle:before,.ion-ios-trash-outline:before,.ion-ios-trash:before,.ion-ios-undo-outline:before,.ion-ios-undo:before,.ion-ios-unlocked-outline:before,.ion-ios-unlocked:before,.ion-ios-upload-outline:before,.ion-ios-upload:before,.ion-ios-videocam-outline:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass-outline:before,.ion-ios-wineglass:before,.ion-ios-world-outline:before,.ion-ios-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad-outline:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-angular-outline:before,.ion-social-angular:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-chrome-outline:before,.ion-social-chrome:before,.ion-social-codepen-outline:before,.ion-social-codepen:before,.ion-social-css3-outline:before,.ion-social-css3:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-euro-outline:before,.ion-social-euro:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-html5-outline:before,.ion-social-html5:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-javascript-outline:before,.ion-social-javascript:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-python:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-sass:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-snapchat-outline:before,.ion-social-snapchat:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitch-outline:before,.ion-social-twitch:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-whatsapp-outline:before,.ion-social-whatsapp:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-yen-outline:before,.ion-social-yen:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-soup-can-outline:before,.ion-soup-can:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt-outline:before,.ion-tshirt:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:""}.ion-alert-circled:before{content:""}.ion-android-add:before{content:""}.ion-android-add-circle:before{content:""}.ion-android-alarm-clock:before{content:""}.ion-android-alert:before{content:""}.ion-android-apps:before{content:""}.ion-android-archive:before{content:""}.ion-android-arrow-back:before{content:""}.ion-android-arrow-down:before{content:""}.ion-android-arrow-dropdown:before{content:""}.ion-android-arrow-dropdown-circle:before{content:""}.ion-android-arrow-dropleft:before{content:""}.ion-android-arrow-dropleft-circle:before{content:""}.ion-android-arrow-dropright:before{content:""}.ion-android-arrow-dropright-circle:before{content:""}.ion-android-arrow-dropup:before{content:""}.ion-android-arrow-dropup-circle:before{content:""}.ion-android-arrow-forward:before{content:""}.ion-android-arrow-up:before{content:""}.ion-android-attach:before{content:""}.ion-android-bar:before{content:""}.ion-android-bicycle:before{content:""}.ion-android-boat:before{content:""}.ion-android-bookmark:before{content:""}.ion-android-bulb:before{content:""}.ion-android-bus:before{content:""}.ion-android-calendar:before{content:""}.ion-android-call:before{content:""}.ion-android-camera:before{content:""}.ion-android-cancel:before{content:""}.ion-android-car:before{content:""}.ion-android-cart:before{content:""}.ion-android-chat:before{content:""}.ion-android-checkbox:before{content:""}.ion-android-checkbox-blank:before{content:""}.ion-android-checkbox-outline:before{content:""}.ion-android-checkbox-outline-blank:before{content:""}.ion-android-checkmark-circle:before{content:""}.ion-android-clipboard:before{content:""}.ion-android-close:before{content:""}.ion-android-cloud:before{content:""}.ion-android-cloud-circle:before{content:""}.ion-android-cloud-done:before{content:""}.ion-android-cloud-outline:before{content:""}.ion-android-color-palette:before{content:""}.ion-android-compass:before{content:""}.ion-android-contact:before{content:""}.ion-android-contacts:before{content:""}.ion-android-contract:before{content:""}.ion-android-create:before{content:""}.ion-android-delete:before{content:""}.ion-android-desktop:before{content:""}.ion-android-document:before{content:""}.ion-android-done:before{content:""}.ion-android-done-all:before{content:""}.ion-android-download:before{content:""}.ion-android-drafts:before{content:""}.ion-android-exit:before{content:""}.ion-android-expand:before{content:""}.ion-android-favorite:before{content:""}.ion-android-favorite-outline:before{content:""}.ion-android-film:before{content:""}.ion-android-folder:before{content:""}.ion-android-folder-open:before{content:""}.ion-android-funnel:before{content:""}.ion-android-globe:before{content:""}.ion-android-hand:before{content:""}.ion-android-hangout:before{content:""}.ion-android-happy:before{content:""}.ion-android-home:before{content:""}.ion-android-image:before{content:""}.ion-android-laptop:before{content:""}.ion-android-list:before{content:""}.ion-android-locate:before{content:""}.ion-android-lock:before{content:""}.ion-android-mail:before{content:""}.ion-android-map:before{content:""}.ion-android-menu:before{content:""}.ion-android-microphone:before{content:""}.ion-android-microphone-off:before{content:""}.ion-android-more-horizontal:before{content:""}.ion-android-more-vertical:before{content:""}.ion-android-navigate:before{content:""}.ion-android-notifications:before{content:""}.ion-android-notifications-none:before{content:""}.ion-android-notifications-off:before{content:""}.ion-android-open:before{content:""}.ion-android-options:before{content:""}.ion-android-people:before{content:""}.ion-android-person:before{content:""}.ion-android-person-add:before{content:""}.ion-android-phone-landscape:before{content:""}.ion-android-phone-portrait:before{content:""}.ion-android-pin:before{content:""}.ion-android-plane:before{content:""}.ion-android-playstore:before{content:""}.ion-android-print:before{content:""}.ion-android-radio-button-off:before{content:""}.ion-android-radio-button-on:before{content:""}.ion-android-refresh:before{content:""}.ion-android-remove:before{content:""}.ion-android-remove-circle:before{content:""}.ion-android-restaurant:before{content:""}.ion-android-sad:before{content:""}.ion-android-search:before{content:""}.ion-android-send:before{content:""}.ion-android-settings:before{content:""}.ion-android-share:before{content:""}.ion-android-share-alt:before{content:""}.ion-android-star:before{content:""}.ion-android-star-half:before{content:""}.ion-android-star-outline:before{content:""}.ion-android-stopwatch:before{content:""}.ion-android-subway:before{content:""}.ion-android-sunny:before{content:""}.ion-android-sync:before{content:""}.ion-android-textsms:before{content:""}.ion-android-time:before{content:""}.ion-android-train:before{content:""}.ion-android-unlock:before{content:""}.ion-android-upload:before{content:""}.ion-android-volume-down:before{content:""}.ion-android-volume-mute:before{content:""}.ion-android-volume-off:before{content:""}.ion-android-volume-up:before{content:""}.ion-android-walk:before{content:""}.ion-android-warning:before{content:""}.ion-android-watch:before{content:""}.ion-android-wifi:before{content:""}.ion-aperture:before{content:""}.ion-archive:before{content:""}.ion-arrow-down-a:before{content:""}.ion-arrow-down-b:before{content:""}.ion-arrow-down-c:before{content:""}.ion-arrow-expand:before{content:""}.ion-arrow-graph-down-left:before{content:""}.ion-arrow-graph-down-right:before{content:""}.ion-arrow-graph-up-left:before{content:""}.ion-arrow-graph-up-right:before{content:""}.ion-arrow-left-a:before{content:""}.ion-arrow-left-b:before{content:""}.ion-arrow-left-c:before{content:""}.ion-arrow-move:before{content:""}.ion-arrow-resize:before{content:""}.ion-arrow-return-left:before{content:""}.ion-arrow-return-right:before{content:""}.ion-arrow-right-a:before{content:""}.ion-arrow-right-b:before{content:""}.ion-arrow-right-c:before{content:""}.ion-arrow-shrink:before{content:""}.ion-arrow-swap:before{content:""}.ion-arrow-up-a:before{content:""}.ion-arrow-up-b:before{content:""}.ion-arrow-up-c:before{content:""}.ion-asterisk:before{content:""}.ion-at:before{content:""}.ion-backspace:before{content:""}.ion-backspace-outline:before{content:""}.ion-bag:before{content:""}.ion-battery-charging:before{content:""}.ion-battery-empty:before{content:""}.ion-battery-full:before{content:""}.ion-battery-half:before{content:""}.ion-battery-low:before{content:""}.ion-beaker:before{content:""}.ion-beer:before{content:""}.ion-bluetooth:before{content:""}.ion-bonfire:before{content:""}.ion-bookmark:before{content:""}.ion-bowtie:before{content:""}.ion-briefcase:before{content:""}.ion-bug:before{content:""}.ion-calculator:before{content:""}.ion-calendar:before{content:""}.ion-camera:before{content:""}.ion-card:before{content:""}.ion-cash:before{content:""}.ion-chatbox:before{content:""}.ion-chatbox-working:before{content:""}.ion-chatboxes:before{content:""}.ion-chatbubble:before{content:""}.ion-chatbubble-working:before{content:""}.ion-chatbubbles:before{content:""}.ion-checkmark:before{content:""}.ion-checkmark-circled:before{content:""}.ion-checkmark-round:before{content:""}.ion-chevron-down:before{content:""}.ion-chevron-left:before{content:""}.ion-chevron-right:before{content:""}.ion-chevron-up:before{content:""}.ion-clipboard:before{content:""}.ion-clock:before{content:""}.ion-close:before{content:""}.ion-close-circled:before{content:""}.ion-close-round:before{content:""}.ion-closed-captioning:before{content:""}.ion-cloud:before{content:""}.ion-code:before{content:""}.ion-code-download:before{content:""}.ion-code-working:before{content:""}.ion-coffee:before{content:""}.ion-compass:before{content:""}.ion-compose:before{content:""}.ion-connection-bars:before{content:""}.ion-contrast:before{content:""}.ion-crop:before{content:""}.ion-cube:before{content:""}.ion-disc:before{content:""}.ion-document:before{content:""}.ion-document-text:before{content:""}.ion-drag:before{content:""}.ion-earth:before{content:""}.ion-easel:before{content:""}.ion-edit:before{content:""}.ion-egg:before{content:""}.ion-eject:before{content:""}.ion-email:before{content:""}.ion-email-unread:before{content:""}.ion-erlenmeyer-flask:before{content:""}.ion-erlenmeyer-flask-bubbles:before{content:""}.ion-eye:before{content:""}.ion-eye-disabled:before{content:""}.ion-female:before{content:""}.ion-filing:before{content:""}.ion-film-marker:before{content:""}.ion-fireball:before{content:""}.ion-flag:before{content:""}.ion-flame:before{content:""}.ion-flash:before{content:""}.ion-flash-off:before{content:""}.ion-folder:before{content:""}.ion-fork:before{content:""}.ion-fork-repo:before{content:""}.ion-forward:before{content:""}.ion-funnel:before{content:""}.ion-gear-a:before{content:""}.ion-gear-b:before{content:""}.ion-grid:before{content:""}.ion-hammer:before{content:""}.ion-happy:before{content:""}.ion-happy-outline:before{content:""}.ion-headphone:before{content:""}.ion-heart:before{content:""}.ion-heart-broken:before{content:""}.ion-help:before{content:""}.ion-help-buoy:before{content:""}.ion-help-circled:before{content:""}.ion-home:before{content:""}.ion-icecream:before{content:""}.ion-image:before{content:""}.ion-images:before{content:""}.ion-information:before{content:""}.ion-information-circled:before{content:""}.ion-ionic:before{content:""}.ion-ios-alarm:before{content:""}.ion-ios-alarm-outline:before{content:""}.ion-ios-albums:before{content:""}.ion-ios-albums-outline:before{content:""}.ion-ios-americanfootball:before{content:""}.ion-ios-americanfootball-outline:before{content:""}.ion-ios-analytics:before{content:""}.ion-ios-analytics-outline:before{content:""}.ion-ios-arrow-back:before{content:""}.ion-ios-arrow-down:before{content:""}.ion-ios-arrow-forward:before{content:""}.ion-ios-arrow-left:before{content:""}.ion-ios-arrow-right:before{content:""}.ion-ios-arrow-thin-down:before{content:""}.ion-ios-arrow-thin-left:before{content:""}.ion-ios-arrow-thin-right:before{content:""}.ion-ios-arrow-thin-up:before{content:""}.ion-ios-arrow-up:before{content:""}.ion-ios-at:before{content:""}.ion-ios-at-outline:before{content:""}.ion-ios-barcode:before{content:""}.ion-ios-barcode-outline:before{content:""}.ion-ios-baseball:before{content:""}.ion-ios-baseball-outline:before{content:""}.ion-ios-basketball:before{content:""}.ion-ios-basketball-outline:before{content:""}.ion-ios-bell:before{content:""}.ion-ios-bell-outline:before{content:""}.ion-ios-body:before{content:""}.ion-ios-body-outline:before{content:""}.ion-ios-bolt:before{content:""}.ion-ios-bolt-outline:before{content:""}.ion-ios-book:before{content:""}.ion-ios-book-outline:before{content:""}.ion-ios-bookmarks:before{content:""}.ion-ios-bookmarks-outline:before{content:""}.ion-ios-box:before{content:""}.ion-ios-box-outline:before{content:""}.ion-ios-briefcase:before{content:""}.ion-ios-briefcase-outline:before{content:""}.ion-ios-browsers:before{content:""}.ion-ios-browsers-outline:before{content:""}.ion-ios-calculator:before{content:""}.ion-ios-calculator-outline:before{content:""}.ion-ios-calendar:before{content:""}.ion-ios-calendar-outline:before{content:""}.ion-ios-camera:before{content:""}.ion-ios-camera-outline:before{content:""}.ion-ios-cart:before{content:""}.ion-ios-cart-outline:before{content:""}.ion-ios-chatboxes:before{content:""}.ion-ios-chatboxes-outline:before{content:""}.ion-ios-chatbubble:before{content:""}.ion-ios-chatbubble-outline:before{content:""}.ion-ios-checkmark:before{content:""}.ion-ios-checkmark-empty:before{content:""}.ion-ios-checkmark-outline:before{content:""}.ion-ios-circle-filled:before{content:""}.ion-ios-circle-outline:before{content:""}.ion-ios-clock:before{content:""}.ion-ios-clock-outline:before{content:""}.ion-ios-close:before{content:""}.ion-ios-close-empty:before{content:""}.ion-ios-close-outline:before{content:""}.ion-ios-cloud:before{content:""}.ion-ios-cloud-download:before{content:""}.ion-ios-cloud-download-outline:before{content:""}.ion-ios-cloud-outline:before{content:""}.ion-ios-cloud-upload:before{content:""}.ion-ios-cloud-upload-outline:before{content:""}.ion-ios-cloudy:before{content:""}.ion-ios-cloudy-night:before{content:""}.ion-ios-cloudy-night-outline:before{content:""}.ion-ios-cloudy-outline:before{content:""}.ion-ios-cog:before{content:""}.ion-ios-cog-outline:before{content:""}.ion-ios-color-filter:before{content:""}.ion-ios-color-filter-outline:before{content:""}.ion-ios-color-wand:before{content:""}.ion-ios-color-wand-outline:before{content:""}.ion-ios-compose:before{content:""}.ion-ios-compose-outline:before{content:""}.ion-ios-contact:before{content:""}.ion-ios-contact-outline:before{content:""}.ion-ios-copy:before{content:""}.ion-ios-copy-outline:before{content:""}.ion-ios-crop:before{content:""}.ion-ios-crop-strong:before{content:""}.ion-ios-download:before{content:""}.ion-ios-download-outline:before{content:""}.ion-ios-drag:before{content:""}.ion-ios-email:before{content:""}.ion-ios-email-outline:before{content:""}.ion-ios-eye:before{content:""}.ion-ios-eye-outline:before{content:""}.ion-ios-fastforward:before{content:""}.ion-ios-fastforward-outline:before{content:""}.ion-ios-filing:before{content:""}.ion-ios-filing-outline:before{content:""}.ion-ios-film:before{content:""}.ion-ios-film-outline:before{content:""}.ion-ios-flag:before{content:""}.ion-ios-flag-outline:before{content:""}.ion-ios-flame:before{content:""}.ion-ios-flame-outline:before{content:""}.ion-ios-flask:before{content:""}.ion-ios-flask-outline:before{content:""}.ion-ios-flower:before{content:""}.ion-ios-flower-outline:before{content:""}.ion-ios-folder:before{content:""}.ion-ios-folder-outline:before{content:""}.ion-ios-football:before{content:""}.ion-ios-football-outline:before{content:""}.ion-ios-game-controller-a:before{content:""}.ion-ios-game-controller-a-outline:before{content:""}.ion-ios-game-controller-b:before{content:""}.ion-ios-game-controller-b-outline:before{content:""}.ion-ios-gear:before{content:""}.ion-ios-gear-outline:before{content:""}.ion-ios-glasses:before{content:""}.ion-ios-glasses-outline:before{content:""}.ion-ios-grid-view:before{content:""}.ion-ios-grid-view-outline:before{content:""}.ion-ios-heart:before{content:""}.ion-ios-heart-outline:before{content:""}.ion-ios-help:before{content:""}.ion-ios-help-empty:before{content:""}.ion-ios-help-outline:before{content:""}.ion-ios-home:before{content:""}.ion-ios-home-outline:before{content:""}.ion-ios-infinite:before{content:""}.ion-ios-infinite-outline:before{content:""}.ion-ios-information:before{content:""}.ion-ios-information-empty:before{content:""}.ion-ios-information-outline:before{content:""}.ion-ios-ionic-outline:before{content:""}.ion-ios-keypad:before{content:""}.ion-ios-keypad-outline:before{content:""}.ion-ios-lightbulb:before{content:""}.ion-ios-lightbulb-outline:before{content:""}.ion-ios-list:before{content:""}.ion-ios-list-outline:before{content:""}.ion-ios-location:before{content:""}.ion-ios-location-outline:before{content:""}.ion-ios-locked:before{content:""}.ion-ios-locked-outline:before{content:""}.ion-ios-loop:before{content:""}.ion-ios-loop-strong:before{content:""}.ion-ios-medical:before{content:""}.ion-ios-medical-outline:before{content:""}.ion-ios-medkit:before{content:""}.ion-ios-medkit-outline:before{content:""}.ion-ios-mic:before{content:""}.ion-ios-mic-off:before{content:""}.ion-ios-mic-outline:before{content:""}.ion-ios-minus:before{content:""}.ion-ios-minus-empty:before{content:""}.ion-ios-minus-outline:before{content:""}.ion-ios-monitor:before{content:""}.ion-ios-monitor-outline:before{content:""}.ion-ios-moon:before{content:""}.ion-ios-moon-outline:before{content:""}.ion-ios-more:before{content:""}.ion-ios-more-outline:before{content:""}.ion-ios-musical-note:before{content:""}.ion-ios-musical-notes:before{content:""}.ion-ios-navigate:before{content:""}.ion-ios-navigate-outline:before{content:""}.ion-ios-nutrition:before{content:""}.ion-ios-nutrition-outline:before{content:""}.ion-ios-paper:before{content:""}.ion-ios-paper-outline:before{content:""}.ion-ios-paperplane:before{content:""}.ion-ios-paperplane-outline:before{content:""}.ion-ios-partlysunny:before{content:""}.ion-ios-partlysunny-outline:before{content:""}.ion-ios-pause:before{content:""}.ion-ios-pause-outline:before{content:""}.ion-ios-paw:before{content:""}.ion-ios-paw-outline:before{content:""}.ion-ios-people:before{content:""}.ion-ios-people-outline:before{content:""}.ion-ios-person:before{content:""}.ion-ios-person-outline:before{content:""}.ion-ios-personadd:before{content:""}.ion-ios-personadd-outline:before{content:""}.ion-ios-photos:before{content:""}.ion-ios-photos-outline:before{content:""}.ion-ios-pie:before{content:""}.ion-ios-pie-outline:before{content:""}.ion-ios-pint:before{content:""}.ion-ios-pint-outline:before{content:""}.ion-ios-play:before{content:""}.ion-ios-play-outline:before{content:""}.ion-ios-plus:before{content:""}.ion-ios-plus-empty:before{content:""}.ion-ios-plus-outline:before{content:""}.ion-ios-pricetag:before{content:""}.ion-ios-pricetag-outline:before{content:""}.ion-ios-pricetags:before{content:""}.ion-ios-pricetags-outline:before{content:""}.ion-ios-printer:before{content:""}.ion-ios-printer-outline:before{content:""}.ion-ios-pulse:before{content:""}.ion-ios-pulse-strong:before{content:""}.ion-ios-rainy:before{content:""}.ion-ios-rainy-outline:before{content:""}.ion-ios-recording:before{content:""}.ion-ios-recording-outline:before{content:""}.ion-ios-redo:before{content:""}.ion-ios-redo-outline:before{content:""}.ion-ios-refresh:before{content:""}.ion-ios-refresh-empty:before{content:""}.ion-ios-refresh-outline:before{content:""}.ion-ios-reload:before{content:""}.ion-ios-reverse-camera:before{content:""}.ion-ios-reverse-camera-outline:before{content:""}.ion-ios-rewind:before{content:""}.ion-ios-rewind-outline:before{content:""}.ion-ios-rose:before{content:""}.ion-ios-rose-outline:before{content:""}.ion-ios-search:before{content:""}.ion-ios-search-strong:before{content:""}.ion-ios-settings:before{content:""}.ion-ios-settings-strong:before{content:""}.ion-ios-shuffle:before{content:""}.ion-ios-shuffle-strong:before{content:""}.ion-ios-skipbackward:before{content:""}.ion-ios-skipbackward-outline:before{content:""}.ion-ios-skipforward:before{content:""}.ion-ios-skipforward-outline:before{content:""}.ion-ios-snowy:before{content:""}.ion-ios-speedometer:before{content:""}.ion-ios-speedometer-outline:before{content:""}.ion-ios-star:before{content:""}.ion-ios-star-half:before{content:""}.ion-ios-star-outline:before{content:""}.ion-ios-stopwatch:before{content:""}.ion-ios-stopwatch-outline:before{content:""}.ion-ios-sunny:before{content:""}.ion-ios-sunny-outline:before{content:""}.ion-ios-telephone:before{content:""}.ion-ios-telephone-outline:before{content:""}.ion-ios-tennisball:before{content:""}.ion-ios-tennisball-outline:before{content:""}.ion-ios-thunderstorm:before{content:""}.ion-ios-thunderstorm-outline:before{content:""}.ion-ios-time:before{content:""}.ion-ios-time-outline:before{content:""}.ion-ios-timer:before{content:""}.ion-ios-timer-outline:before{content:""}.ion-ios-toggle:before{content:""}.ion-ios-toggle-outline:before{content:""}.ion-ios-trash:before{content:""}.ion-ios-trash-outline:before{content:""}.ion-ios-undo:before{content:""}.ion-ios-undo-outline:before{content:""}.ion-ios-unlocked:before{content:""}.ion-ios-unlocked-outline:before{content:""}.ion-ios-upload:before{content:""}.ion-ios-upload-outline:before{content:""}.ion-ios-videocam:before{content:""}.ion-ios-videocam-outline:before{content:""}.ion-ios-volume-high:before{content:""}.ion-ios-volume-low:before{content:""}.ion-ios-wineglass:before{content:""}.ion-ios-wineglass-outline:before{content:""}.ion-ios-world:before{content:""}.ion-ios-world-outline:before{content:""}.ion-ipad:before{content:""}.ion-iphone:before{content:""}.ion-ipod:before{content:""}.ion-jet:before{content:""}.ion-key:before{content:""}.ion-knife:before{content:""}.ion-laptop:before{content:""}.ion-leaf:before{content:""}.ion-levels:before{content:""}.ion-lightbulb:before{content:""}.ion-link:before{content:""}.ion-load-a:before{content:""}.ion-load-b:before{content:""}.ion-load-c:before{content:""}.ion-load-d:before{content:""}.ion-location:before{content:""}.ion-lock-combination:before{content:""}.ion-locked:before{content:""}.ion-log-in:before{content:""}.ion-log-out:before{content:""}.ion-loop:before{content:""}.ion-magnet:before{content:""}.ion-male:before{content:""}.ion-man:before{content:""}.ion-map:before{content:""}.ion-medkit:before{content:""}.ion-merge:before{content:""}.ion-mic-a:before{content:""}.ion-mic-b:before{content:""}.ion-mic-c:before{content:""}.ion-minus:before{content:""}.ion-minus-circled:before{content:""}.ion-minus-round:before{content:""}.ion-model-s:before{content:""}.ion-monitor:before{content:""}.ion-more:before{content:""}.ion-mouse:before{content:""}.ion-music-note:before{content:""}.ion-navicon:before{content:""}.ion-navicon-round:before{content:""}.ion-navigate:before{content:""}.ion-network:before{content:""}.ion-no-smoking:before{content:""}.ion-nuclear:before{content:""}.ion-outlet:before{content:""}.ion-paintbrush:before{content:""}.ion-paintbucket:before{content:""}.ion-paper-airplane:before{content:""}.ion-paperclip:before{content:""}.ion-pause:before{content:""}.ion-person:before{content:""}.ion-person-add:before{content:""}.ion-person-stalker:before{content:""}.ion-pie-graph:before{content:""}.ion-pin:before{content:""}.ion-pinpoint:before{content:""}.ion-pizza:before{content:""}.ion-plane:before{content:""}.ion-planet:before{content:""}.ion-play:before{content:""}.ion-playstation:before{content:""}.ion-plus:before{content:""}.ion-plus-circled:before{content:""}.ion-plus-round:before{content:""}.ion-podium:before{content:""}.ion-pound:before{content:""}.ion-power:before{content:""}.ion-pricetag:before{content:""}.ion-pricetags:before{content:""}.ion-printer:before{content:""}.ion-pull-request:before{content:""}.ion-qr-scanner:before{content:""}.ion-quote:before{content:""}.ion-radio-waves:before{content:""}.ion-record:before{content:""}.ion-refresh:before{content:""}.ion-reply:before{content:""}.ion-reply-all:before{content:""}.ion-ribbon-a:before{content:""}.ion-ribbon-b:before{content:""}.ion-sad:before{content:""}.ion-sad-outline:before{content:""}.ion-scissors:before{content:""}.ion-search:before{content:""}.ion-settings:before{content:""}.ion-share:before{content:""}.ion-shuffle:before{content:""}.ion-skip-backward:before{content:""}.ion-skip-forward:before{content:""}.ion-social-android:before{content:""}.ion-social-android-outline:before{content:""}.ion-social-angular:before{content:""}.ion-social-angular-outline:before{content:""}.ion-social-apple:before{content:""}.ion-social-apple-outline:before{content:""}.ion-social-bitcoin:before{content:""}.ion-social-bitcoin-outline:before{content:""}.ion-social-buffer:before{content:""}.ion-social-buffer-outline:before{content:""}.ion-social-chrome:before{content:""}.ion-social-chrome-outline:before{content:""}.ion-social-codepen:before{content:""}.ion-social-codepen-outline:before{content:""}.ion-social-css3:before{content:""}.ion-social-css3-outline:before{content:""}.ion-social-designernews:before{content:""}.ion-social-designernews-outline:before{content:""}.ion-social-dribbble:before{content:""}.ion-social-dribbble-outline:before{content:""}.ion-social-dropbox:before{content:""}.ion-social-dropbox-outline:before{content:""}.ion-social-euro:before{content:""}.ion-social-euro-outline:before{content:""}.ion-social-facebook:before{content:""}.ion-social-facebook-outline:before{content:""}.ion-social-foursquare:before{content:""}.ion-social-foursquare-outline:before{content:""}.ion-social-freebsd-devil:before{content:""}.ion-social-github:before{content:""}.ion-social-github-outline:before{content:""}.ion-social-google:before{content:""}.ion-social-google-outline:before{content:""}.ion-social-googleplus:before{content:""}.ion-social-googleplus-outline:before{content:""}.ion-social-hackernews:before{content:""}.ion-social-hackernews-outline:before{content:""}.ion-social-html5:before{content:""}.ion-social-html5-outline:before{content:""}.ion-social-instagram:before{content:""}.ion-social-instagram-outline:before{content:""}.ion-social-javascript:before{content:""}.ion-social-javascript-outline:before{content:""}.ion-social-linkedin:before{content:""}.ion-social-linkedin-outline:before{content:""}.ion-social-markdown:before{content:""}.ion-social-nodejs:before{content:""}.ion-social-octocat:before{content:""}.ion-social-pinterest:before{content:""}.ion-social-pinterest-outline:before{content:""}.ion-social-python:before{content:""}.ion-social-reddit:before{content:""}.ion-social-reddit-outline:before{content:""}.ion-social-rss:before{content:""}.ion-social-rss-outline:before{content:""}.ion-social-sass:before{content:""}.ion-social-skype:before{content:""}.ion-social-skype-outline:before{content:""}.ion-social-snapchat:before{content:""}.ion-social-snapchat-outline:before{content:""}.ion-social-tumblr:before{content:""}.ion-social-tumblr-outline:before{content:""}.ion-social-tux:before{content:""}.ion-social-twitch:before{content:""}.ion-social-twitch-outline:before{content:""}.ion-social-twitter:before{content:""}.ion-social-twitter-outline:before{content:""}.ion-social-usd:before{content:""}.ion-social-usd-outline:before{content:""}.ion-social-vimeo:before{content:""}.ion-social-vimeo-outline:before{content:""}.ion-social-whatsapp:before{content:""}.ion-social-whatsapp-outline:before{content:""}.ion-social-windows:before{content:""}.ion-social-windows-outline:before{content:""}.ion-social-wordpress:before{content:""}.ion-social-wordpress-outline:before{content:""}.ion-social-yahoo:before{content:""}.ion-social-yahoo-outline:before{content:""}.ion-social-yen:before{content:""}.ion-social-yen-outline:before{content:""}.ion-social-youtube:before{content:""}.ion-social-youtube-outline:before{content:""}.ion-soup-can:before{content:""}.ion-soup-can-outline:before{content:""}.ion-speakerphone:before{content:""}.ion-speedometer:before{content:""}.ion-spoon:before{content:""}.ion-star:before{content:""}.ion-stats-bars:before{content:""}.ion-steam:before{content:""}.ion-stop:before{content:""}.ion-thermometer:before{content:""}.ion-thumbsdown:before{content:""}.ion-thumbsup:before{content:""}.ion-toggle:before{content:""}.ion-toggle-filled:before{content:""}.ion-transgender:before{content:""}.ion-trash-a:before{content:""}.ion-trash-b:before{content:""}.ion-trophy:before{content:""}.ion-tshirt:before{content:""}.ion-tshirt-outline:before{content:""}.ion-umbrella:before{content:""}.ion-university:before{content:""}.ion-unlocked:before{content:""}.ion-upload:before{content:""}.ion-usb:before{content:""}.ion-videocamera:before{content:""}.ion-volume-high:before{content:""}.ion-volume-low:before{content:""}.ion-volume-medium:before{content:""}.ion-volume-mute:before{content:""}.ion-wand:before{content:""}.ion-waterdrop:before{content:""}.ion-wifi:before{content:""}.ion-wineglass:before{content:""}.ion-woman:before{content:""}.ion-wrench:before{content:""}.ion-xbox:before{content:""} - -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} - -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{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 #ddd!important}}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#67808c;text-decoration:none}a:focus,a:hover{color:#465760;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:4px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:3px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.bootstrap-datetimepicker-widget .btn[data-action=clear]:after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]:after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]:after,.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]:after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]:after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]:after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]:after,.bootstrap-datetimepicker-widget .btn[data-action=today]:after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]:after,.bootstrap-datetimepicker-widget .picker-switch:after,.bootstrap-datetimepicker-widget table th.next:after,.bootstrap-datetimepicker-widget table th.prev:after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.component-inline-update,.text-right{text-align:right}.text-center,body.dashboard .sidebar .sidebar-inner .quick-add-incident{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#67808c}a.text-primary:focus,a.text-primary:hover{color:#51656f}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#67808c}a.bg-primary:focus,a.bg-primary:hover{background-color:#51656f}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.428571429}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.428571429;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:3px}code,kbd{padding:2px 4px;font-size:90%}kbd{color:#fff;background-color:#333;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:after,.container:before{content:" ";display:table}.container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:after,.container-fluid:before{content:" ";display:table}.container-fluid:after{clear:both}.row,.setup-page .steps{margin-left:-15px;margin-right:-15px}.row:after,.row:before,.setup-page .steps:after,.setup-page .steps:before{content:" ";display:table}.row:after,.setup-page .steps:after{clear:both}.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-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-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-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.setup-page .steps .step{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.setup-page .steps .step{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3,.setup-page .steps .step{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.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{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.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{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.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{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777}caption,th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{margin:0;min-width:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.428571429;color:#555}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline input[type=checkbox],.checkbox input[type=checkbox],.radio-inline input[type=radio],.radio input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .checkbox label,fieldset[disabled] .radio-inline,fieldset[disabled] .radio label,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success.checkbox-inline label,.has-success.checkbox label,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.radio-inline label,.has-success.radio label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning.checkbox-inline label,.has-warning.checkbox label,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.radio-inline label,.has-warning.radio label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error.checkbox-inline label,.has-error.checkbox label,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.radio-inline label,.has-error.radio label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=clear]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementHours]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementMinutes]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementHours]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementMinutes]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showHours]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showMinutes]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=today]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=togglePeriod]:after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.picker-switch:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=clear]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementHours]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementMinutes]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementHours]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementMinutes]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showHours]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showMinutes]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=today]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=togglePeriod]:after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.picker-switch:after~.form-control-feedback,.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#67808c;border-color:#5c727d}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#51656f;border-color:#262f34}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#51656f;border-color:#42525a}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#42525a;border-color:#262f34}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#67808c;border-color:#5c727d}.btn-primary .badge{color:#67808c;background-color:#fff}.btn-success{color:#fff;background-color:#7ed321;border-color:#71bd1e}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#64a71a;border-color:#2f4f0c}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#64a71a;border-color:#518815}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#518815;border-color:#2f4f0c}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#7ed321;border-color:#71bd1e}.btn-success .badge{color:#7ed321;background-color:#fff}.btn-info{color:#fff;background-color:#3498db;border-color:#258cd1}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#217dbb;border-color:#124364}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#217dbb;border-color:#1c699d}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#1c699d;border-color:#124364}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3498db;border-color:#258cd1}.btn-info .badge{color:#3498db;background-color:#fff}.btn-warning{color:#fff;background-color:#f80;border-color:#e67a00}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#cc6d00;border-color:#663600}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#cc6d00;border-color:#a85a00}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#a85a00;border-color:#663600}.btn-warning.active,.btn-warning:active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f80;border-color:#e67a00}.btn-warning .badge{color:#f80;background-color:#fff}.btn-danger{color:#fff;background-color:#ff6f6f;border-color:#ff5656}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#ff3c3c;border-color:#d50000}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#ff3c3c;border-color:#ff1818}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ff1818;border-color:#d50000}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#ff6f6f;border-color:#ff5656}.btn-danger .badge{color:#ff6f6f;background-color:#fff}.btn-link{color:#67808c;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#465760;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#67808c}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.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:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:3px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group .form-control:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group .form-control:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav:after{clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#67808c}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:3px 3px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:3px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#67808c}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:3px 3px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:after,.navbar:before{content:" ";display:table}.navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:3px}}.navbar-header:after,.navbar-header:before{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container-fluid .navbar-brand,.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:3px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin:8px -15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:3px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:3px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#67808c;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#465760;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#67808c;border-color:#67808c;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#67808c}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#51656f}.label-success{background-color:#7ed321}.label-success[href]:focus,.label-success[href]:hover{background-color:#64a71a}.label-info{background-color:#3498db}.label-info[href]:focus,.label-info[href]:hover{background-color:#217dbb}.label-warning{background-color:#f80}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#cc6d00}.label-danger{background-color:#ff6f6f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#ff3c3c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#67808c;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container-fluid .jumbotron,.container .jumbotron{border-radius:4px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container-fluid .jumbotron,.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:3px;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#67808c}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:3px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:3px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#67808c;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{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:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7ed321}.progress-striped .progress-bar-success{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)}.progress-bar-info{background-color:#3498db}.progress-striped .progress-bar-info{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)}.progress-bar-warning{background-color:#f80}.progress-striped .progress-bar-warning{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)}.progress-bar-danger{background-color:#ff6f6f}.progress-striped .progress-bar-danger{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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#67808c;border-color:#67808c}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#dbe1e4}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel,body.status-page .list-group.components{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.list-group,.panel>.panel-collapse>.list-group,body.status-page .list-group.components>.list-group,body.status-page .list-group.components>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item,body.status-page .list-group.components>.list-group .list-group-item,body.status-page .list-group.components>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child,body.status-page .list-group.components>.list-group:first-child .list-group-item:first-child,body.status-page .list-group.components>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child,body.status-page .list-group.components>.list-group:last-child .list-group-item:last-child,body.status-page .list-group.components>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child,body.status-page .list-group.components>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table,body.status-page .list-group.components>.panel-collapse>.table,body.status-page .list-group.components>.table,body.status-page .list-group.components>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table-responsive>.table caption,.panel>.table caption,body.status-page .list-group.components>.panel-collapse>.table caption,body.status-page .list-group.components>.table-responsive>.table caption,body.status-page .list-group.components>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,body.status-page .list-group.components>.table:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:2px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,body.status-page .list-group.components>.table:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:2px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body,body.status-page .list-group.components>.panel-body+.table,body.status-page .list-group.components>.panel-body+.table-responsive,body.status-page .list-group.components>.table+.panel-body,body.status-page .list-group.components>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th,body.status-page .list-group.components>.table>tbody:first-child>tr:first-child td,body.status-page .list-group.components>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered,body.status-page .list-group.components>.table-bordered,body.status-page .list-group.components>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,body.status-page .list-group.components>.table-bordered>tbody>tr>td:first-child,body.status-page .list-group.components>.table-bordered>tbody>tr>th:first-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>td:first-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>th:first-child,body.status-page .list-group.components>.table-bordered>thead>tr>td:first-child,body.status-page .list-group.components>.table-bordered>thead>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,body.status-page .list-group.components>.table-bordered>tbody>tr>td:last-child,body.status-page .list-group.components>.table-bordered>tbody>tr>th:last-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>td:last-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>th:last-child,body.status-page .list-group.components>.table-bordered>thead>tr>td:last-child,body.status-page .list-group.components>.table-bordered>thead>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,body.status-page .list-group.components>.table-bordered>tbody>tr:first-child>td,body.status-page .list-group.components>.table-bordered>tbody>tr:first-child>th,body.status-page .list-group.components>.table-bordered>tbody>tr:last-child>td,body.status-page .list-group.components>.table-bordered>tbody>tr:last-child>th,body.status-page .list-group.components>.table-bordered>tfoot>tr:last-child>td,body.status-page .list-group.components>.table-bordered>tfoot>tr:last-child>th,body.status-page .list-group.components>.table-bordered>thead>tr:first-child>td,body.status-page .list-group.components>.table-bordered>thead>tr:first-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:first-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:first-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:last-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:last-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr:last-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr:last-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr:first-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive,body.status-page .list-group.components>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel,.panel-group body.status-page .list-group.components,body.status-page .panel-group .list-group.components{margin-bottom:0;border-radius:3px}.panel-group .panel+.panel,.panel-group body.status-page .list-group.components+.list-group.components,.panel-group body.status-page .list-group.components+.panel,.panel-group body.status-page .panel+.list-group.components,body.status-page .panel-group .list-group.components+.list-group.components,body.status-page .panel-group .list-group.components+.panel,body.status-page .panel-group .panel+.list-group.components{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#67808c}.panel-primary>.panel-heading{color:#fff;background-color:#67808c;border-color:#67808c}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#67808c}.panel-primary>.panel-heading .badge{color:#67808c;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#67808c}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:4px}.well-sm{padding:9px;border-radius:2px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translateY(-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:after,.modal-header:before{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:after,.modal-footer:before{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:3px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#333}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:3px 3px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel,.carousel-inner{position:relative}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:left .6s ease-in-out}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media (-webkit-transform-3d),all and (transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translateZ(0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:transparent}.carousel-control.left{background-image:linear-gradient(90deg,rgba(0,0,0,.5),rgba(0,0,0,.0001));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(90deg,rgba(0,0,0,.0001),rgba(0,0,0,.5));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,body.dashboard .sidebar .sidebar-inner .quick-add-incident i{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm,body.dashboard .sidebar .sidebar-inner .quick-add-incident i{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,body.dashboard .sidebar .bottom-menu-sidebar,body.dashboard .sidebar .sidebar-inner .quick-add-incident span,body.dashboard .sidebar .sidebar-inner>ul>li>a>span{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}html{position:relative;min-height:100%;-webkit-font-smoothing:antialiased;overflow-y:scroll}body{margin-bottom:60px;padding-bottom:60px}.uppercase{text-transform:uppercase}.margin-top{margin-top:20px}.margin-bottom{margin-bottom:20px}div[role=tabpanel] ul.nav-tabs{border-bottom:1px solid #d5d8d7}div[role=tabpanel] ul.nav-tabs li a{font-weight:400;display:inline-block;padding:10px 25px;border-radius:0;font-size:.9em;letter-spacing:.01em}div[role=tabpanel] .tab-content{border-left:1px solid #d5d8d7;border-bottom:1px solid #d5d8d7;border-right:1px solid #d5d8d7;background-color:#fff}div[role=tabpanel] .tab-content .tab-pane{padding:10px}label{font-size:14px}textarea{resize:none;overflow:auto}.markdown-control{position:relative}.markdown-control:before{position:absolute;display:block;right:0;bottom:0;width:40px;height:40px;font-size:2em;font-family:Ionicons;content:"\f4e6"}.form-control{display:block;width:100%;height:45px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:focus{border-color:#66afe9}@media (max-width:767px){.component-inline .radio-items{text-align:left}.component-inline .radio-items .radio-inline{margin-left:0;width:100%}}.minicolors-theme-bootstrap .minicolors-swatch{top:9px;left:9px}.well{border-radius:0}.alert{border-radius:4px;background:#f7ca18;border:2px solid #d5ab07}.alert.alert-success{background-color:#7ed321;border:2px solid #64a71a;color:#fff}.alert.alert-success a{color:#fff;font-weight:700}.alert.alert-info{background:#3498db;border:2px solid #217dbb;color:#fff}.alert.alert-info a{color:#fff;font-weight:700}.alert.alert-danger{background:#ff6f6f;border:2px solid #ff3c3c;color:#fff}.alert.alert-danger a{color:#fff;font-weight:700}.panel-danger{border-color:#ff3c3c}.panel-danger>.panel-heading{color:#fff;background-color:#ff6f6f;border-color:#ff3c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff3c3c}.panel-danger>.panel-heading .badge{color:#ff6f6f;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff3c3c}.panel-success{border-color:#64a71a}.panel-success>.panel-heading{color:#fff;background-color:#7ed321;border-color:#64a71a}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#64a71a}.panel-success>.panel-heading .badge{color:#7ed321;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#64a71a}.panel-info{border-color:#217dbb}.panel-info>.panel-heading{color:#fff;background-color:#3498db;border-color:#217dbb}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#217dbb}.panel-info>.panel-heading .badge{color:#3498db;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#217dbb}.panel-warning{border-color:#d5ab07}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#f7ca18;border-color:#d5ab07}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d5ab07}.panel-warning>.panel-heading .badge{color:#f7ca18;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d5ab07}.btn.btn-default{color:#333;background-image:linear-gradient(180deg,#fff,#f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFF2F2F2',GradientType=0);border-color:#e6e6e6;border-bottom-color:#ccc;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-default.active,.btn.btn-default:active,.btn.btn-default:focus,.btn.btn-default:hover{background-image:linear-gradient(180deg,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFE6E6E6',GradientType=0);border-color:#ccc;color:#333}.btn.btn-default.disabled,.btn.btn-default.disabled.active,.btn.btn-default.disabled:active,.btn.btn-default.disabled:focus,.btn.btn-default.disabled:hover,.btn.btn-default[disabled],.btn.btn-default[disabled].active,.btn.btn-default[disabled]:active,.btn.btn-default[disabled]:focus,.btn.btn-default[disabled]:hover,fieldset[disabled] .btn.btn-default,fieldset[disabled] .btn.btn-default.active,fieldset[disabled] .btn.btn-default:active,fieldset[disabled] .btn.btn-default:focus,fieldset[disabled] .btn.btn-default:hover{background-color:#fff;border-color:#f2f2f2}.btn.btn-primary{color:#fff;background-image:linear-gradient(180deg,#748c99,#5c727d);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF748C99',endColorstr='#FF5C727D',GradientType=0);border-color:#51656f;border-bottom-color:#3c4a51;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-primary.active,.btn.btn-primary:active,.btn.btn-primary:focus,.btn.btn-primary:hover{background-image:linear-gradient(180deg,#67808c,#51656f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF67808C',endColorstr='#FF51656F',GradientType=0);border-color:#3c4a51;color:#fff}.btn.btn-primary.disabled,.btn.btn-primary.disabled.active,.btn.btn-primary.disabled:active,.btn.btn-primary.disabled:focus,.btn.btn-primary.disabled:hover,.btn.btn-primary[disabled],.btn.btn-primary[disabled].active,.btn.btn-primary[disabled]:active,.btn.btn-primary[disabled]:focus,.btn.btn-primary[disabled]:hover,fieldset[disabled] .btn.btn-primary,fieldset[disabled] .btn.btn-primary.active,fieldset[disabled] .btn.btn-primary:active,fieldset[disabled] .btn.btn-primary:focus,fieldset[disabled] .btn.btn-primary:hover{background-color:#67808c;border-color:#5c727d}.btn.btn-success{color:#fff;background-image:linear-gradient(180deg,#8bde2f,#71bd1e);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF8BDE2F',endColorstr='#FF71BD1E',GradientType=0);border-color:#64a71a;border-bottom-color:#497b13;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-success.active,.btn.btn-success:active,.btn.btn-success:focus,.btn.btn-success:hover{background-image:linear-gradient(180deg,#7ed321,#64a71a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF7ED321',endColorstr='#FF64A71A',GradientType=0);border-color:#497b13;color:#fff}.btn.btn-success.disabled,.btn.btn-success.disabled.active,.btn.btn-success.disabled:active,.btn.btn-success.disabled:focus,.btn.btn-success.disabled:hover,.btn.btn-success[disabled],.btn.btn-success[disabled].active,.btn.btn-success[disabled]:active,.btn.btn-success[disabled]:focus,.btn.btn-success[disabled]:hover,fieldset[disabled] .btn.btn-success,fieldset[disabled] .btn.btn-success.active,fieldset[disabled] .btn.btn-success:active,fieldset[disabled] .btn.btn-success:focus,fieldset[disabled] .btn.btn-success:hover{background-color:#7ed321;border-color:#71bd1e}.btn.btn-info{color:#fff;background-image:linear-gradient(180deg,#4aa3df,#258cd1);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF4AA3DF',endColorstr='#FF258CD1',GradientType=0);border-color:#217dbb;border-bottom-color:#196090;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-info.active,.btn.btn-info:active,.btn.btn-info:focus,.btn.btn-info:hover{background-image:linear-gradient(180deg,#3498db,#217dbb);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF3498DB',endColorstr='#FF217DBB',GradientType=0);border-color:#196090;color:#fff}.btn.btn-info.disabled,.btn.btn-info.disabled.active,.btn.btn-info.disabled:active,.btn.btn-info.disabled:focus,.btn.btn-info.disabled:hover,.btn.btn-info[disabled],.btn.btn-info[disabled].active,.btn.btn-info[disabled]:active,.btn.btn-info[disabled]:focus,.btn.btn-info[disabled]:hover,fieldset[disabled] .btn.btn-info,fieldset[disabled] .btn.btn-info.active,fieldset[disabled] .btn.btn-info:active,fieldset[disabled] .btn.btn-info:focus,fieldset[disabled] .btn.btn-info:hover{background-color:#3498db;border-color:#258cd1}.btn.btn-warning{color:#fff;background-image:linear-gradient(180deg,#ff941a,#e67a00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFF941A',endColorstr='#FFE67A00',GradientType=0);border-color:#cc6d00;border-bottom-color:#995200;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-warning.active,.btn.btn-warning:active,.btn.btn-warning:focus,.btn.btn-warning:hover{background-image:linear-gradient(180deg,#f80,#cc6d00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFF8800',endColorstr='#FFCC6D00',GradientType=0);border-color:#995200;color:#fff}.btn.btn-warning.disabled,.btn.btn-warning.disabled.active,.btn.btn-warning.disabled:active,.btn.btn-warning.disabled:focus,.btn.btn-warning.disabled:hover,.btn.btn-warning[disabled],.btn.btn-warning[disabled].active,.btn.btn-warning[disabled]:active,.btn.btn-warning[disabled]:focus,.btn.btn-warning[disabled]:hover,fieldset[disabled] .btn.btn-warning,fieldset[disabled] .btn.btn-warning.active,fieldset[disabled] .btn.btn-warning:active,fieldset[disabled] .btn.btn-warning:focus,fieldset[disabled] .btn.btn-warning:hover{background-color:#f80;border-color:#e67a00}.btn.btn-danger{color:#fff;background-image:linear-gradient(180deg,#ff8989,#ff5656);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFF8989',endColorstr='#FFFF5656',GradientType=0);border-color:#ff3c3c;border-bottom-color:#ff0909;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-danger.active,.btn.btn-danger:active,.btn.btn-danger:focus,.btn.btn-danger:hover{background-image:linear-gradient(180deg,#ff6f6f,#ff3c3c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFF6F6F',endColorstr='#FFFF3C3C',GradientType=0);border-color:#ff0909;color:#fff}.btn.btn-danger.disabled,.btn.btn-danger.disabled.active,.btn.btn-danger.disabled:active,.btn.btn-danger.disabled:focus,.btn.btn-danger.disabled:hover,.btn.btn-danger[disabled],.btn.btn-danger[disabled].active,.btn.btn-danger[disabled]:active,.btn.btn-danger[disabled]:focus,.btn.btn-danger[disabled]:hover,fieldset[disabled] .btn.btn-danger,fieldset[disabled] .btn.btn-danger.active,fieldset[disabled] .btn.btn-danger:active,fieldset[disabled] .btn.btn-danger:focus,fieldset[disabled] .btn.btn-danger:hover{background-color:#ff6f6f;border-color:#ff5656}.btn.btn-inverse{color:#fff;background-image:linear-gradient(180deg,#545656,#3a3c3c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF545656',endColorstr='#FF3A3C3C',GradientType=0);border-color:#2e2f2f;border-bottom-color:#151515;text-shadow:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.btn.btn-inverse.active,.btn.btn-inverse:active,.btn.btn-inverse:focus,.btn.btn-inverse:hover{background-image:linear-gradient(180deg,#474949,#2e2f2f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF474949',endColorstr='#FF2E2F2F',GradientType=0);border-color:#151515;color:#fff}.btn.btn-inverse.disabled,.btn.btn-inverse.disabled.active,.btn.btn-inverse.disabled:active,.btn.btn-inverse.disabled:focus,.btn.btn-inverse.disabled:hover,.btn.btn-inverse[disabled],.btn.btn-inverse[disabled].active,.btn.btn-inverse[disabled]:active,.btn.btn-inverse[disabled]:focus,.btn.btn-inverse[disabled]:hover,fieldset[disabled] .btn.btn-inverse,fieldset[disabled] .btn.btn-inverse.active,fieldset[disabled] .btn.btn-inverse:active,fieldset[disabled] .btn.btn-inverse:focus,fieldset[disabled] .btn.btn-inverse:hover{background-color:#474949;border-color:#3a3c3c}.btn-outline{background-color:transparent;background-image:none!important;color:inherit;transition:all .5s}.btn-default.btn-outline{color:#999}.btn-primary.btn-outline{color:#428bca}.btn-success.btn-outline{color:#5cb85c}.btn-info.btn-outline{color:#5bc0de}.btn-warning.btn-outline{color:#f0ad4e}.btn-danger.btn-outline{color:#d9534f}.btn-danger.btn-outline:hover,.btn-info.btn-outline:hover,.btn-primary.btn-outline:hover,.btn-success.btn-outline:hover,.btn-warning.btn-outline:hover{color:#fff}.pager li>a,.pager li>span{border-radius:3px}body.dashboard{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:15px;display:table;width:100%;height:100%;table-layout:fixed;line-height:1.42857143;-webkit-font-smoothing:antialiased}body.dashboard .wrapper{padding-left:0;transition:all .5s ease}body.dashboard .wrapper.toggled{padding-left:230px}body.dashboard .wrapper.toggled .sidebar{width:230px}body.dashboard .wrapper.toggled .page-content{position:absolute;margin-right:-230px}@media (min-width:768px) and (max-width:991px){body.dashboard .wrapper{padding-left:80px}}@media (min-width:991px){body.dashboard .wrapper{padding-left:230px}body.dashboard .wrapper.toggled{padding-left:0}body.dashboard .wrapper.toggled .page-content{position:relative;margin-right:0}}body.dashboard .alerts .alert h5{margin-top:5px}body.dashboard .wrapper{width:100%;display:table;height:100%;table-layout:fixed}body.dashboard .navbar{z-index:999;border-radius:0;border:none;border-bottom:1px solid #00695c;background:#009c89;margin:0}body.dashboard .navbar a,body.dashboard .navbar a:active,body.dashboard .navbar a:visited{color:#fff}body.dashboard .navbar a:active:hover,body.dashboard .navbar a:hover,body.dashboard .navbar a:visited:hover{color:#e9e9e9}body.dashboard .navbar .navbar-toggle{margin-top:15px;background:transparent;border-color:transparent}body.dashboard .navbar .navbar-toggle.collapsed span{background-color:#fff}body.dashboard .navbar .navbar-collapse{background:#009c89}body.dashboard .navbar a.navbar-brand{padding:34px 21px;line-height:0;font-size:1.1em;letter-spacing:.04em;font-weight:600;text-transform:uppercase}@media (min-width:991px){body.dashboard .navbar a.navbar-brand span{padding-right:10px}body.dashboard .navbar a.navbar-brand span:before{font-family:FontAwesome;content:"\f060"}}body.dashboard .navbar .nav li a{height:68px;line-height:35px}body.dashboard .sidebar{position:fixed;left:230px;width:0;height:100%;margin-left:-230px;overflow-y:auto;background:#78909c;box-shadow:inset 0 -2px 3px rgba(0,0,0,.25);z-index:1000;transition:all .5s ease}body.dashboard .sidebar .sidebar-inner{position:absolute;top:0;width:230px;margin:0;padding:0;list-style:none}body.dashboard .sidebar .sidebar-inner .profile{text-align:center;padding:20px 10px;margin-bottom:0}body.dashboard .sidebar .sidebar-inner .profile .dropdown-toggle{text-decoration:none}body.dashboard .sidebar .sidebar-inner .profile .dropdown-menu{top:108%}body.dashboard .sidebar .sidebar-inner .profile .avatar{width:60px}body.dashboard .sidebar .sidebar-inner .profile .avatar img{border-radius:50%;width:50px}body.dashboard .sidebar .sidebar-inner .profile .username{word-break:break-all;margin-bottom:0}body.dashboard .sidebar .sidebar-inner .profile a{color:#fff;text-decoration:none}body.dashboard .sidebar .sidebar-inner .quick-add-incident{padding:10px}body.dashboard .sidebar .sidebar-inner ul{clear:both;margin:0;padding:0;list-style:none}body.dashboard .sidebar .sidebar-inner ul li{font-size:.9em}body.dashboard .sidebar .sidebar-inner ul li.active{background:#7e95a0}body.dashboard .sidebar .sidebar-inner ul li.active a{padding-top:14px;padding-bottom:14px;border-top:1px solid #6c818c;border-bottom:1px solid #6c818c;color:#fff}body.dashboard .sidebar .sidebar-inner ul li.active a:focus,body.dashboard .sidebar .sidebar-inner ul li.active a:hover{text-decoration:none}body.dashboard .sidebar .sidebar-inner ul li a{display:block;padding:15px;color:#fff}body.dashboard .sidebar .sidebar-inner ul li a i{font-size:18px;min-width:17px;text-align:center;position:relative;top:1px;margin-right:5px}body.dashboard .sidebar .sidebar-inner ul li a:focus,body.dashboard .sidebar .sidebar-inner ul li a:hover{text-decoration:none}body.dashboard .sidebar .sidebar-inner ul li a span.label{float:right;margin:6px 0}body.dashboard .sidebar .sidebar-inner ul li a span.label.label-info{background-color:#7ed321}body.dashboard .sidebar .sidebar-inner ul li.sub-nav-item a{padding-left:40px}body.dashboard .sidebar .bottom-menu-sidebar{position:fixed;bottom:0;width:230px;z-index:999}body.dashboard .sidebar .bottom-menu-sidebar ul>li{float:left;display:block;width:33.333%;border-right:1px solid #ddd;border-top:1px solid #ddd}body.dashboard .sidebar .bottom-menu-sidebar ul>li a{color:#333;display:block;position:relative;text-align:center;padding:6px 0;background:#fff}@media (min-width:767px){body.dashboard .sidebar{width:230px}body.dashboard .wrapper.toggled .sidebar{width:0}}@media (min-width:768px) and (max-width:991px){body.dashboard .sidebar{width:80px;left:150px;margin-left:-150px}body.dashboard .sidebar .sidebar-inner{width:80px}body.dashboard .sidebar .sidebar-inner .profile .avatar img{width:40px}body.dashboard .sidebar .sidebar-inner .quick-add-incident .btn{padding:3px 6px}body.dashboard .sidebar .sidebar-inner .quick-add-incident i{font-size:20px}body.dashboard .sidebar .sidebar-inner>ul>li>a{text-align:center}body.dashboard .sidebar .sidebar-inner>ul>li>a>i{font-size:25px}}body.dashboard .sidebar-toggler{float:left;padding:10px;position:relative;top:-15px;left:-5px;margin-right:10px;cursor:pointer}body.dashboard .sidebar-toggler i{font-size:25px}body.dashboard .sub-sidebar{left:0;top:0;bottom:0;position:fixed;margin-left:228px;width:22%;background:#f9fdff;border-right:1px solid #e8ecf1}body.dashboard .sub-sidebar h3{margin:0;text-align:center;font-size:19px;padding:30px 0}body.dashboard .sub-sidebar ul.menu{list-style-type:none;padding:0;margin:0}body.dashboard .sub-sidebar ul.menu li a{color:#666;display:block;padding:13px 30px;font-size:15px;transition:all .2s linear;text-decoration:none}body.dashboard .sub-sidebar ul.menu li a.active,body.dashboard .sub-sidebar ul.menu li a:hover{color:#6db81c}body.dashboard .sub-sidebar ul.menu li i{margin-right:5px}body.dashboard .sub-sidebar .sidebar-toggler{position:absolute;top:3px;left:20px;font-size:36px;cursor:pointer}body.dashboard .sub-sidebar+.content-wrapper{top:0;position:relative;margin-left:26%;padding-right:40px!important}@media (max-width:767px){body.dashboard .sub-sidebar{position:relative;margin-left:0;width:100%}body.dashboard .sub-sidebar+.content-wrapper{margin-left:0;padding-left:40px!important;width:100%}}@media (min-width:768px) and (max-width:991px){body.dashboard .sub-sidebar{margin-left:80px;width:25%}body.dashboard .sub-sidebar+.content-wrapper{padding-left:45px!important}}body.dashboard .page-content{width:100%}body.dashboard .page-content .content-wrapper{padding-top:20px;padding-left:40px;padding-right:40px}body.dashboard .page-content .content-wrapper.header-fixed{margin-top:60px}body.dashboard .page-content .header{position:relative;top:0;left:0;color:#333;background-color:#fff;padding:22px 40px;width:100%;height:70px;font-size:1.2em;border-bottom:1px solid #eee;z-index:99}body.dashboard .page-content .header.sub-header{padding:8px 2px;height:50px}body.dashboard .page-content .header.fixed{position:fixed;padding-left:270px}body.dashboard .page-content .header .btn,body.dashboard .page-content .header button,body.dashboard .page-content .header input{position:relative;top:-4px}body.dashboard .page-content .header input{width:20%}.setup-page body.dashboard .page-content .header+.steps,body.dashboard .page-content .header+.row,body.dashboard .page-content .setup-page .header+.steps{margin-top:23px}body.dashboard .page-content .header h3{color:#444;margin-top:0;text-transform:uppercase}body.dashboard .page-content .header .ion,body.dashboard .page-content .header .ion-alert-circled:before,body.dashboard .page-content .header .ion-alert:before,body.dashboard .page-content .header .ion-android-add-circle:before,body.dashboard .page-content .header .ion-android-add:before,body.dashboard .page-content .header .ion-android-alarm-clock:before,body.dashboard .page-content .header .ion-android-alert:before,body.dashboard .page-content .header .ion-android-apps:before,body.dashboard .page-content .header .ion-android-archive:before,body.dashboard .page-content .header .ion-android-arrow-back:before,body.dashboard .page-content .header .ion-android-arrow-down:before,body.dashboard .page-content .header .ion-android-arrow-dropdown-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropdown:before,body.dashboard .page-content .header .ion-android-arrow-dropleft-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropleft:before,body.dashboard .page-content .header .ion-android-arrow-dropright-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropright:before,body.dashboard .page-content .header .ion-android-arrow-dropup-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropup:before,body.dashboard .page-content .header .ion-android-arrow-forward:before,body.dashboard .page-content .header .ion-android-arrow-up:before,body.dashboard .page-content .header .ion-android-attach:before,body.dashboard .page-content .header .ion-android-bar:before,body.dashboard .page-content .header .ion-android-bicycle:before,body.dashboard .page-content .header .ion-android-boat:before,body.dashboard .page-content .header .ion-android-bookmark:before,body.dashboard .page-content .header .ion-android-bulb:before,body.dashboard .page-content .header .ion-android-bus:before,body.dashboard .page-content .header .ion-android-calendar:before,body.dashboard .page-content .header .ion-android-call:before,body.dashboard .page-content .header .ion-android-camera:before,body.dashboard .page-content .header .ion-android-cancel:before,body.dashboard .page-content .header .ion-android-car:before,body.dashboard .page-content .header .ion-android-cart:before,body.dashboard .page-content .header .ion-android-chat:before,body.dashboard .page-content .header .ion-android-checkbox-blank:before,body.dashboard .page-content .header .ion-android-checkbox-outline-blank:before,body.dashboard .page-content .header .ion-android-checkbox-outline:before,body.dashboard .page-content .header .ion-android-checkbox:before,body.dashboard .page-content .header .ion-android-checkmark-circle:before,body.dashboard .page-content .header .ion-android-clipboard:before,body.dashboard .page-content .header .ion-android-close:before,body.dashboard .page-content .header .ion-android-cloud-circle:before,body.dashboard .page-content .header .ion-android-cloud-done:before,body.dashboard .page-content .header .ion-android-cloud-outline:before,body.dashboard .page-content .header .ion-android-cloud:before,body.dashboard .page-content .header .ion-android-color-palette:before,body.dashboard .page-content .header .ion-android-compass:before,body.dashboard .page-content .header .ion-android-contact:before,body.dashboard .page-content .header .ion-android-contacts:before,body.dashboard .page-content .header .ion-android-contract:before,body.dashboard .page-content .header .ion-android-create:before,body.dashboard .page-content .header .ion-android-delete:before,body.dashboard .page-content .header .ion-android-desktop:before,body.dashboard .page-content .header .ion-android-document:before,body.dashboard .page-content .header .ion-android-done-all:before,body.dashboard .page-content .header .ion-android-done:before,body.dashboard .page-content .header .ion-android-download:before,body.dashboard .page-content .header .ion-android-drafts:before,body.dashboard .page-content .header .ion-android-exit:before,body.dashboard .page-content .header .ion-android-expand:before,body.dashboard .page-content .header .ion-android-favorite-outline:before,body.dashboard .page-content .header .ion-android-favorite:before,body.dashboard .page-content .header .ion-android-film:before,body.dashboard .page-content .header .ion-android-folder-open:before,body.dashboard .page-content .header .ion-android-folder:before,body.dashboard .page-content .header .ion-android-funnel:before,body.dashboard .page-content .header .ion-android-globe:before,body.dashboard .page-content .header .ion-android-hand:before,body.dashboard .page-content .header .ion-android-hangout:before,body.dashboard .page-content .header .ion-android-happy:before,body.dashboard .page-content .header .ion-android-home:before,body.dashboard .page-content .header .ion-android-image:before,body.dashboard .page-content .header .ion-android-laptop:before,body.dashboard .page-content .header .ion-android-list:before,body.dashboard .page-content .header .ion-android-locate:before,body.dashboard .page-content .header .ion-android-lock:before,body.dashboard .page-content .header .ion-android-mail:before,body.dashboard .page-content .header .ion-android-map:before,body.dashboard .page-content .header .ion-android-menu:before,body.dashboard .page-content .header .ion-android-microphone-off:before,body.dashboard .page-content .header .ion-android-microphone:before,body.dashboard .page-content .header .ion-android-more-horizontal:before,body.dashboard .page-content .header .ion-android-more-vertical:before,body.dashboard .page-content .header .ion-android-navigate:before,body.dashboard .page-content .header .ion-android-notifications-none:before,body.dashboard .page-content .header .ion-android-notifications-off:before,body.dashboard .page-content .header .ion-android-notifications:before,body.dashboard .page-content .header .ion-android-open:before,body.dashboard .page-content .header .ion-android-options:before,body.dashboard .page-content .header .ion-android-people:before,body.dashboard .page-content .header .ion-android-person-add:before,body.dashboard .page-content .header .ion-android-person:before,body.dashboard .page-content .header .ion-android-phone-landscape:before,body.dashboard .page-content .header .ion-android-phone-portrait:before,body.dashboard .page-content .header .ion-android-pin:before,body.dashboard .page-content .header .ion-android-plane:before,body.dashboard .page-content .header .ion-android-playstore:before,body.dashboard .page-content .header .ion-android-print:before,body.dashboard .page-content .header .ion-android-radio-button-off:before,body.dashboard .page-content .header .ion-android-radio-button-on:before,body.dashboard .page-content .header .ion-android-refresh:before,body.dashboard .page-content .header .ion-android-remove-circle:before,body.dashboard .page-content .header .ion-android-remove:before,body.dashboard .page-content .header .ion-android-restaurant:before,body.dashboard .page-content .header .ion-android-sad:before,body.dashboard .page-content .header .ion-android-search:before,body.dashboard .page-content .header .ion-android-send:before,body.dashboard .page-content .header .ion-android-settings:before,body.dashboard .page-content .header .ion-android-share-alt:before,body.dashboard .page-content .header .ion-android-share:before,body.dashboard .page-content .header .ion-android-star-half:before,body.dashboard .page-content .header .ion-android-star-outline:before,body.dashboard .page-content .header .ion-android-star:before,body.dashboard .page-content .header .ion-android-stopwatch:before,body.dashboard .page-content .header .ion-android-subway:before,body.dashboard .page-content .header .ion-android-sunny:before,body.dashboard .page-content .header .ion-android-sync:before,body.dashboard .page-content .header .ion-android-textsms:before,body.dashboard .page-content .header .ion-android-time:before,body.dashboard .page-content .header .ion-android-train:before,body.dashboard .page-content .header .ion-android-unlock:before,body.dashboard .page-content .header .ion-android-upload:before,body.dashboard .page-content .header .ion-android-volume-down:before,body.dashboard .page-content .header .ion-android-volume-mute:before,body.dashboard .page-content .header .ion-android-volume-off:before,body.dashboard .page-content .header .ion-android-volume-up:before,body.dashboard .page-content .header .ion-android-walk:before,body.dashboard .page-content .header .ion-android-warning:before,body.dashboard .page-content .header .ion-android-watch:before,body.dashboard .page-content .header .ion-android-wifi:before,body.dashboard .page-content .header .ion-aperture:before,body.dashboard .page-content .header .ion-archive:before,body.dashboard .page-content .header .ion-arrow-down-a:before,body.dashboard .page-content .header .ion-arrow-down-b:before,body.dashboard .page-content .header .ion-arrow-down-c:before,body.dashboard .page-content .header .ion-arrow-expand:before,body.dashboard .page-content .header .ion-arrow-graph-down-left:before,body.dashboard .page-content .header .ion-arrow-graph-down-right:before,body.dashboard .page-content .header .ion-arrow-graph-up-left:before,body.dashboard .page-content .header .ion-arrow-graph-up-right:before,body.dashboard .page-content .header .ion-arrow-left-a:before,body.dashboard .page-content .header .ion-arrow-left-b:before,body.dashboard .page-content .header .ion-arrow-left-c:before,body.dashboard .page-content .header .ion-arrow-move:before,body.dashboard .page-content .header .ion-arrow-resize:before,body.dashboard .page-content .header .ion-arrow-return-left:before,body.dashboard .page-content .header .ion-arrow-return-right:before,body.dashboard .page-content .header .ion-arrow-right-a:before,body.dashboard .page-content .header .ion-arrow-right-b:before,body.dashboard .page-content .header .ion-arrow-right-c:before,body.dashboard .page-content .header .ion-arrow-shrink:before,body.dashboard .page-content .header .ion-arrow-swap:before,body.dashboard .page-content .header .ion-arrow-up-a:before,body.dashboard .page-content .header .ion-arrow-up-b:before,body.dashboard .page-content .header .ion-arrow-up-c:before,body.dashboard .page-content .header .ion-asterisk:before,body.dashboard .page-content .header .ion-at:before,body.dashboard .page-content .header .ion-backspace-outline:before,body.dashboard .page-content .header .ion-backspace:before,body.dashboard .page-content .header .ion-bag:before,body.dashboard .page-content .header .ion-battery-charging:before,body.dashboard .page-content .header .ion-battery-empty:before,body.dashboard .page-content .header .ion-battery-full:before,body.dashboard .page-content .header .ion-battery-half:before,body.dashboard .page-content .header .ion-battery-low:before,body.dashboard .page-content .header .ion-beaker:before,body.dashboard .page-content .header .ion-beer:before,body.dashboard .page-content .header .ion-bluetooth:before,body.dashboard .page-content .header .ion-bonfire:before,body.dashboard .page-content .header .ion-bookmark:before,body.dashboard .page-content .header .ion-bowtie:before,body.dashboard .page-content .header .ion-briefcase:before,body.dashboard .page-content .header .ion-bug:before,body.dashboard .page-content .header .ion-calculator:before,body.dashboard .page-content .header .ion-calendar:before,body.dashboard .page-content .header .ion-camera:before,body.dashboard .page-content .header .ion-card:before,body.dashboard .page-content .header .ion-cash:before,body.dashboard .page-content .header .ion-chatbox-working:before,body.dashboard .page-content .header .ion-chatbox:before,body.dashboard .page-content .header .ion-chatboxes:before,body.dashboard .page-content .header .ion-chatbubble-working:before,body.dashboard .page-content .header .ion-chatbubble:before,body.dashboard .page-content .header .ion-chatbubbles:before,body.dashboard .page-content .header .ion-checkmark-circled:before,body.dashboard .page-content .header .ion-checkmark-round:before,body.dashboard .page-content .header .ion-checkmark:before,body.dashboard .page-content .header .ion-chevron-down:before,body.dashboard .page-content .header .ion-chevron-left:before,body.dashboard .page-content .header .ion-chevron-right:before,body.dashboard .page-content .header .ion-chevron-up:before,body.dashboard .page-content .header .ion-clipboard:before,body.dashboard .page-content .header .ion-clock:before,body.dashboard .page-content .header .ion-close-circled:before,body.dashboard .page-content .header .ion-close-round:before,body.dashboard .page-content .header .ion-close:before,body.dashboard .page-content .header .ion-closed-captioning:before,body.dashboard .page-content .header .ion-cloud:before,body.dashboard .page-content .header .ion-code-download:before,body.dashboard .page-content .header .ion-code-working:before,body.dashboard .page-content .header .ion-code:before,body.dashboard .page-content .header .ion-coffee:before,body.dashboard .page-content .header .ion-compass:before,body.dashboard .page-content .header .ion-compose:before,body.dashboard .page-content .header .ion-connection-bars:before,body.dashboard .page-content .header .ion-contrast:before,body.dashboard .page-content .header .ion-crop:before,body.dashboard .page-content .header .ion-cube:before,body.dashboard .page-content .header .ion-disc:before,body.dashboard .page-content .header .ion-document-text:before,body.dashboard .page-content .header .ion-document:before,body.dashboard .page-content .header .ion-drag:before,body.dashboard .page-content .header .ion-earth:before,body.dashboard .page-content .header .ion-easel:before,body.dashboard .page-content .header .ion-edit:before,body.dashboard .page-content .header .ion-egg:before,body.dashboard .page-content .header .ion-eject:before,body.dashboard .page-content .header .ion-email-unread:before,body.dashboard .page-content .header .ion-email:before,body.dashboard .page-content .header .ion-erlenmeyer-flask-bubbles:before,body.dashboard .page-content .header .ion-erlenmeyer-flask:before,body.dashboard .page-content .header .ion-eye-disabled:before,body.dashboard .page-content .header .ion-eye:before,body.dashboard .page-content .header .ion-female:before,body.dashboard .page-content .header .ion-filing:before,body.dashboard .page-content .header .ion-film-marker:before,body.dashboard .page-content .header .ion-fireball:before,body.dashboard .page-content .header .ion-flag:before,body.dashboard .page-content .header .ion-flame:before,body.dashboard .page-content .header .ion-flash-off:before,body.dashboard .page-content .header .ion-flash:before,body.dashboard .page-content .header .ion-folder:before,body.dashboard .page-content .header .ion-fork-repo:before,body.dashboard .page-content .header .ion-fork:before,body.dashboard .page-content .header .ion-forward:before,body.dashboard .page-content .header .ion-funnel:before,body.dashboard .page-content .header .ion-gear-a:before,body.dashboard .page-content .header .ion-gear-b:before,body.dashboard .page-content .header .ion-grid:before,body.dashboard .page-content .header .ion-hammer:before,body.dashboard .page-content .header .ion-happy-outline:before,body.dashboard .page-content .header .ion-happy:before,body.dashboard .page-content .header .ion-headphone:before,body.dashboard .page-content .header .ion-heart-broken:before,body.dashboard .page-content .header .ion-heart:before,body.dashboard .page-content .header .ion-help-buoy:before,body.dashboard .page-content .header .ion-help-circled:before,body.dashboard .page-content .header .ion-help:before,body.dashboard .page-content .header .ion-home:before,body.dashboard .page-content .header .ion-icecream:before,body.dashboard .page-content .header .ion-image:before,body.dashboard .page-content .header .ion-images:before,body.dashboard .page-content .header .ion-information-circled:before,body.dashboard .page-content .header .ion-information:before,body.dashboard .page-content .header .ion-ionic:before,body.dashboard .page-content .header .ion-ios-alarm-outline:before,body.dashboard .page-content .header .ion-ios-alarm:before,body.dashboard .page-content .header .ion-ios-albums-outline:before,body.dashboard .page-content .header .ion-ios-albums:before,body.dashboard .page-content .header .ion-ios-americanfootball-outline:before,body.dashboard .page-content .header .ion-ios-americanfootball:before,body.dashboard .page-content .header .ion-ios-analytics-outline:before,body.dashboard .page-content .header .ion-ios-analytics:before,body.dashboard .page-content .header .ion-ios-arrow-back:before,body.dashboard .page-content .header .ion-ios-arrow-down:before,body.dashboard .page-content .header .ion-ios-arrow-forward:before,body.dashboard .page-content .header .ion-ios-arrow-left:before,body.dashboard .page-content .header .ion-ios-arrow-right:before,body.dashboard .page-content .header .ion-ios-arrow-thin-down:before,body.dashboard .page-content .header .ion-ios-arrow-thin-left:before,body.dashboard .page-content .header .ion-ios-arrow-thin-right:before,body.dashboard .page-content .header .ion-ios-arrow-thin-up:before,body.dashboard .page-content .header .ion-ios-arrow-up:before,body.dashboard .page-content .header .ion-ios-at-outline:before,body.dashboard .page-content .header .ion-ios-at:before,body.dashboard .page-content .header .ion-ios-barcode-outline:before,body.dashboard .page-content .header .ion-ios-barcode:before,body.dashboard .page-content .header .ion-ios-baseball-outline:before,body.dashboard .page-content .header .ion-ios-baseball:before,body.dashboard .page-content .header .ion-ios-basketball-outline:before,body.dashboard .page-content .header .ion-ios-basketball:before,body.dashboard .page-content .header .ion-ios-bell-outline:before,body.dashboard .page-content .header .ion-ios-bell:before,body.dashboard .page-content .header .ion-ios-body-outline:before,body.dashboard .page-content .header .ion-ios-body:before,body.dashboard .page-content .header .ion-ios-bolt-outline:before,body.dashboard .page-content .header .ion-ios-bolt:before,body.dashboard .page-content .header .ion-ios-book-outline:before,body.dashboard .page-content .header .ion-ios-book:before,body.dashboard .page-content .header .ion-ios-bookmarks-outline:before,body.dashboard .page-content .header .ion-ios-bookmarks:before,body.dashboard .page-content .header .ion-ios-box-outline:before,body.dashboard .page-content .header .ion-ios-box:before,body.dashboard .page-content .header .ion-ios-briefcase-outline:before,body.dashboard .page-content .header .ion-ios-briefcase:before,body.dashboard .page-content .header .ion-ios-browsers-outline:before,body.dashboard .page-content .header .ion-ios-browsers:before,body.dashboard .page-content .header .ion-ios-calculator-outline:before,body.dashboard .page-content .header .ion-ios-calculator:before,body.dashboard .page-content .header .ion-ios-calendar-outline:before,body.dashboard .page-content .header .ion-ios-calendar:before,body.dashboard .page-content .header .ion-ios-camera-outline:before,body.dashboard .page-content .header .ion-ios-camera:before,body.dashboard .page-content .header .ion-ios-cart-outline:before,body.dashboard .page-content .header .ion-ios-cart:before,body.dashboard .page-content .header .ion-ios-chatboxes-outline:before,body.dashboard .page-content .header .ion-ios-chatboxes:before,body.dashboard .page-content .header .ion-ios-chatbubble-outline:before,body.dashboard .page-content .header .ion-ios-chatbubble:before,body.dashboard .page-content .header .ion-ios-checkmark-empty:before,body.dashboard .page-content .header .ion-ios-checkmark-outline:before,body.dashboard .page-content .header .ion-ios-checkmark:before,body.dashboard .page-content .header .ion-ios-circle-filled:before,body.dashboard .page-content .header .ion-ios-circle-outline:before,body.dashboard .page-content .header .ion-ios-clock-outline:before,body.dashboard .page-content .header .ion-ios-clock:before,body.dashboard .page-content .header .ion-ios-close-empty:before,body.dashboard .page-content .header .ion-ios-close-outline:before,body.dashboard .page-content .header .ion-ios-close:before,body.dashboard .page-content .header .ion-ios-cloud-download-outline:before,body.dashboard .page-content .header .ion-ios-cloud-download:before,body.dashboard .page-content .header .ion-ios-cloud-outline:before,body.dashboard .page-content .header .ion-ios-cloud-upload-outline:before,body.dashboard .page-content .header .ion-ios-cloud-upload:before,body.dashboard .page-content .header .ion-ios-cloud:before,body.dashboard .page-content .header .ion-ios-cloudy-night-outline:before,body.dashboard .page-content .header .ion-ios-cloudy-night:before,body.dashboard .page-content .header .ion-ios-cloudy-outline:before,body.dashboard .page-content .header .ion-ios-cloudy:before,body.dashboard .page-content .header .ion-ios-cog-outline:before,body.dashboard .page-content .header .ion-ios-cog:before,body.dashboard .page-content .header .ion-ios-color-filter-outline:before,body.dashboard .page-content .header .ion-ios-color-filter:before,body.dashboard .page-content .header .ion-ios-color-wand-outline:before,body.dashboard .page-content .header .ion-ios-color-wand:before,body.dashboard .page-content .header .ion-ios-compose-outline:before,body.dashboard .page-content .header .ion-ios-compose:before,body.dashboard .page-content .header .ion-ios-contact-outline:before,body.dashboard .page-content .header .ion-ios-contact:before,body.dashboard .page-content .header .ion-ios-copy-outline:before,body.dashboard .page-content .header .ion-ios-copy:before,body.dashboard .page-content .header .ion-ios-crop-strong:before,body.dashboard .page-content .header .ion-ios-crop:before,body.dashboard .page-content .header .ion-ios-download-outline:before,body.dashboard .page-content .header .ion-ios-download:before,body.dashboard .page-content .header .ion-ios-drag:before,body.dashboard .page-content .header .ion-ios-email-outline:before,body.dashboard .page-content .header .ion-ios-email:before,body.dashboard .page-content .header .ion-ios-eye-outline:before,body.dashboard .page-content .header .ion-ios-eye:before,body.dashboard .page-content .header .ion-ios-fastforward-outline:before,body.dashboard .page-content .header .ion-ios-fastforward:before,body.dashboard .page-content .header .ion-ios-filing-outline:before,body.dashboard .page-content .header .ion-ios-filing:before,body.dashboard .page-content .header .ion-ios-film-outline:before,body.dashboard .page-content .header .ion-ios-film:before,body.dashboard .page-content .header .ion-ios-flag-outline:before,body.dashboard .page-content .header .ion-ios-flag:before,body.dashboard .page-content .header .ion-ios-flame-outline:before,body.dashboard .page-content .header .ion-ios-flame:before,body.dashboard .page-content .header .ion-ios-flask-outline:before,body.dashboard .page-content .header .ion-ios-flask:before,body.dashboard .page-content .header .ion-ios-flower-outline:before,body.dashboard .page-content .header .ion-ios-flower:before,body.dashboard .page-content .header .ion-ios-folder-outline:before,body.dashboard .page-content .header .ion-ios-folder:before,body.dashboard .page-content .header .ion-ios-football-outline:before,body.dashboard .page-content .header .ion-ios-football:before,body.dashboard .page-content .header .ion-ios-game-controller-a-outline:before,body.dashboard .page-content .header .ion-ios-game-controller-a:before,body.dashboard .page-content .header .ion-ios-game-controller-b-outline:before,body.dashboard .page-content .header .ion-ios-game-controller-b:before,body.dashboard .page-content .header .ion-ios-gear-outline:before,body.dashboard .page-content .header .ion-ios-gear:before,body.dashboard .page-content .header .ion-ios-glasses-outline:before,body.dashboard .page-content .header .ion-ios-glasses:before,body.dashboard .page-content .header .ion-ios-grid-view-outline:before,body.dashboard .page-content .header .ion-ios-grid-view:before,body.dashboard .page-content .header .ion-ios-heart-outline:before,body.dashboard .page-content .header .ion-ios-heart:before,body.dashboard .page-content .header .ion-ios-help-empty:before,body.dashboard .page-content .header .ion-ios-help-outline:before,body.dashboard .page-content .header .ion-ios-help:before,body.dashboard .page-content .header .ion-ios-home-outline:before,body.dashboard .page-content .header .ion-ios-home:before,body.dashboard .page-content .header .ion-ios-infinite-outline:before,body.dashboard .page-content .header .ion-ios-infinite:before,body.dashboard .page-content .header .ion-ios-information-empty:before,body.dashboard .page-content .header .ion-ios-information-outline:before,body.dashboard .page-content .header .ion-ios-information:before,body.dashboard .page-content .header .ion-ios-ionic-outline:before,body.dashboard .page-content .header .ion-ios-keypad-outline:before,body.dashboard .page-content .header .ion-ios-keypad:before,body.dashboard .page-content .header .ion-ios-lightbulb-outline:before,body.dashboard .page-content .header .ion-ios-lightbulb:before,body.dashboard .page-content .header .ion-ios-list-outline:before,body.dashboard .page-content .header .ion-ios-list:before,body.dashboard .page-content .header .ion-ios-location-outline:before,body.dashboard .page-content .header .ion-ios-location:before,body.dashboard .page-content .header .ion-ios-locked-outline:before,body.dashboard .page-content .header .ion-ios-locked:before,body.dashboard .page-content .header .ion-ios-loop-strong:before,body.dashboard .page-content .header .ion-ios-loop:before,body.dashboard .page-content .header .ion-ios-medical-outline:before,body.dashboard .page-content .header .ion-ios-medical:before,body.dashboard .page-content .header .ion-ios-medkit-outline:before,body.dashboard .page-content .header .ion-ios-medkit:before,body.dashboard .page-content .header .ion-ios-mic-off:before,body.dashboard .page-content .header .ion-ios-mic-outline:before,body.dashboard .page-content .header .ion-ios-mic:before,body.dashboard .page-content .header .ion-ios-minus-empty:before,body.dashboard .page-content .header .ion-ios-minus-outline:before,body.dashboard .page-content .header .ion-ios-minus:before,body.dashboard .page-content .header .ion-ios-monitor-outline:before,body.dashboard .page-content .header .ion-ios-monitor:before,body.dashboard .page-content .header .ion-ios-moon-outline:before,body.dashboard .page-content .header .ion-ios-moon:before,body.dashboard .page-content .header .ion-ios-more-outline:before,body.dashboard .page-content .header .ion-ios-more:before,body.dashboard .page-content .header .ion-ios-musical-note:before,body.dashboard .page-content .header .ion-ios-musical-notes:before,body.dashboard .page-content .header .ion-ios-navigate-outline:before,body.dashboard .page-content .header .ion-ios-navigate:before,body.dashboard .page-content .header .ion-ios-nutrition-outline:before,body.dashboard .page-content .header .ion-ios-nutrition:before,body.dashboard .page-content .header .ion-ios-paper-outline:before,body.dashboard .page-content .header .ion-ios-paper:before,body.dashboard .page-content .header .ion-ios-paperplane-outline:before,body.dashboard .page-content .header .ion-ios-paperplane:before,body.dashboard .page-content .header .ion-ios-partlysunny-outline:before,body.dashboard .page-content .header .ion-ios-partlysunny:before,body.dashboard .page-content .header .ion-ios-pause-outline:before,body.dashboard .page-content .header .ion-ios-pause:before,body.dashboard .page-content .header .ion-ios-paw-outline:before,body.dashboard .page-content .header .ion-ios-paw:before,body.dashboard .page-content .header .ion-ios-people-outline:before,body.dashboard .page-content .header .ion-ios-people:before,body.dashboard .page-content .header .ion-ios-person-outline:before,body.dashboard .page-content .header .ion-ios-person:before,body.dashboard .page-content .header .ion-ios-personadd-outline:before,body.dashboard .page-content .header .ion-ios-personadd:before,body.dashboard .page-content .header .ion-ios-photos-outline:before,body.dashboard .page-content .header .ion-ios-photos:before,body.dashboard .page-content .header .ion-ios-pie-outline:before,body.dashboard .page-content .header .ion-ios-pie:before,body.dashboard .page-content .header .ion-ios-pint-outline:before,body.dashboard .page-content .header .ion-ios-pint:before,body.dashboard .page-content .header .ion-ios-play-outline:before,body.dashboard .page-content .header .ion-ios-play:before,body.dashboard .page-content .header .ion-ios-plus-empty:before,body.dashboard .page-content .header .ion-ios-plus-outline:before,body.dashboard .page-content .header .ion-ios-plus:before,body.dashboard .page-content .header .ion-ios-pricetag-outline:before,body.dashboard .page-content .header .ion-ios-pricetag:before,body.dashboard .page-content .header .ion-ios-pricetags-outline:before,body.dashboard .page-content .header .ion-ios-pricetags:before,body.dashboard .page-content .header .ion-ios-printer-outline:before,body.dashboard .page-content .header .ion-ios-printer:before,body.dashboard .page-content .header .ion-ios-pulse-strong:before,body.dashboard .page-content .header .ion-ios-pulse:before,body.dashboard .page-content .header .ion-ios-rainy-outline:before,body.dashboard .page-content .header .ion-ios-rainy:before,body.dashboard .page-content .header .ion-ios-recording-outline:before,body.dashboard .page-content .header .ion-ios-recording:before,body.dashboard .page-content .header .ion-ios-redo-outline:before,body.dashboard .page-content .header .ion-ios-redo:before,body.dashboard .page-content .header .ion-ios-refresh-empty:before,body.dashboard .page-content .header .ion-ios-refresh-outline:before,body.dashboard .page-content .header .ion-ios-refresh:before,body.dashboard .page-content .header .ion-ios-reload:before,body.dashboard .page-content .header .ion-ios-reverse-camera-outline:before,body.dashboard .page-content .header .ion-ios-reverse-camera:before,body.dashboard .page-content .header .ion-ios-rewind-outline:before,body.dashboard .page-content .header .ion-ios-rewind:before,body.dashboard .page-content .header .ion-ios-rose-outline:before,body.dashboard .page-content .header .ion-ios-rose:before,body.dashboard .page-content .header .ion-ios-search-strong:before,body.dashboard .page-content .header .ion-ios-search:before,body.dashboard .page-content .header .ion-ios-settings-strong:before,body.dashboard .page-content .header .ion-ios-settings:before,body.dashboard .page-content .header .ion-ios-shuffle-strong:before,body.dashboard .page-content .header .ion-ios-shuffle:before,body.dashboard .page-content .header .ion-ios-skipbackward-outline:before,body.dashboard .page-content .header .ion-ios-skipbackward:before,body.dashboard .page-content .header .ion-ios-skipforward-outline:before,body.dashboard .page-content .header .ion-ios-skipforward:before,body.dashboard .page-content .header .ion-ios-snowy:before,body.dashboard .page-content .header .ion-ios-speedometer-outline:before,body.dashboard .page-content .header .ion-ios-speedometer:before,body.dashboard .page-content .header .ion-ios-star-half:before,body.dashboard .page-content .header .ion-ios-star-outline:before,body.dashboard .page-content .header .ion-ios-star:before,body.dashboard .page-content .header .ion-ios-stopwatch-outline:before,body.dashboard .page-content .header .ion-ios-stopwatch:before,body.dashboard .page-content .header .ion-ios-sunny-outline:before,body.dashboard .page-content .header .ion-ios-sunny:before,body.dashboard .page-content .header .ion-ios-telephone-outline:before,body.dashboard .page-content .header .ion-ios-telephone:before,body.dashboard .page-content .header .ion-ios-tennisball-outline:before,body.dashboard .page-content .header .ion-ios-tennisball:before,body.dashboard .page-content .header .ion-ios-thunderstorm-outline:before,body.dashboard .page-content .header .ion-ios-thunderstorm:before,body.dashboard .page-content .header .ion-ios-time-outline:before,body.dashboard .page-content .header .ion-ios-time:before,body.dashboard .page-content .header .ion-ios-timer-outline:before,body.dashboard .page-content .header .ion-ios-timer:before,body.dashboard .page-content .header .ion-ios-toggle-outline:before,body.dashboard .page-content .header .ion-ios-toggle:before,body.dashboard .page-content .header .ion-ios-trash-outline:before,body.dashboard .page-content .header .ion-ios-trash:before,body.dashboard .page-content .header .ion-ios-undo-outline:before,body.dashboard .page-content .header .ion-ios-undo:before,body.dashboard .page-content .header .ion-ios-unlocked-outline:before,body.dashboard .page-content .header .ion-ios-unlocked:before,body.dashboard .page-content .header .ion-ios-upload-outline:before,body.dashboard .page-content .header .ion-ios-upload:before,body.dashboard .page-content .header .ion-ios-videocam-outline:before,body.dashboard .page-content .header .ion-ios-videocam:before,body.dashboard .page-content .header .ion-ios-volume-high:before,body.dashboard .page-content .header .ion-ios-volume-low:before,body.dashboard .page-content .header .ion-ios-wineglass-outline:before,body.dashboard .page-content .header .ion-ios-wineglass:before,body.dashboard .page-content .header .ion-ios-world-outline:before,body.dashboard .page-content .header .ion-ios-world:before,body.dashboard .page-content .header .ion-ipad:before,body.dashboard .page-content .header .ion-iphone:before,body.dashboard .page-content .header .ion-ipod:before,body.dashboard .page-content .header .ion-jet:before,body.dashboard .page-content .header .ion-key:before,body.dashboard .page-content .header .ion-knife:before,body.dashboard .page-content .header .ion-laptop:before,body.dashboard .page-content .header .ion-leaf:before,body.dashboard .page-content .header .ion-levels:before,body.dashboard .page-content .header .ion-lightbulb:before,body.dashboard .page-content .header .ion-link:before,body.dashboard .page-content .header .ion-load-a:before,body.dashboard .page-content .header .ion-load-b:before,body.dashboard .page-content .header .ion-load-c:before,body.dashboard .page-content .header .ion-load-d:before,body.dashboard .page-content .header .ion-location:before,body.dashboard .page-content .header .ion-lock-combination:before,body.dashboard .page-content .header .ion-locked:before,body.dashboard .page-content .header .ion-log-in:before,body.dashboard .page-content .header .ion-log-out:before,body.dashboard .page-content .header .ion-loop:before,body.dashboard .page-content .header .ion-magnet:before,body.dashboard .page-content .header .ion-male:before,body.dashboard .page-content .header .ion-man:before,body.dashboard .page-content .header .ion-map:before,body.dashboard .page-content .header .ion-medkit:before,body.dashboard .page-content .header .ion-merge:before,body.dashboard .page-content .header .ion-mic-a:before,body.dashboard .page-content .header .ion-mic-b:before,body.dashboard .page-content .header .ion-mic-c:before,body.dashboard .page-content .header .ion-minus-circled:before,body.dashboard .page-content .header .ion-minus-round:before,body.dashboard .page-content .header .ion-minus:before,body.dashboard .page-content .header .ion-model-s:before,body.dashboard .page-content .header .ion-monitor:before,body.dashboard .page-content .header .ion-more:before,body.dashboard .page-content .header .ion-mouse:before,body.dashboard .page-content .header .ion-music-note:before,body.dashboard .page-content .header .ion-navicon-round:before,body.dashboard .page-content .header .ion-navicon:before,body.dashboard .page-content .header .ion-navigate:before,body.dashboard .page-content .header .ion-network:before,body.dashboard .page-content .header .ion-no-smoking:before,body.dashboard .page-content .header .ion-nuclear:before,body.dashboard .page-content .header .ion-outlet:before,body.dashboard .page-content .header .ion-paintbrush:before,body.dashboard .page-content .header .ion-paintbucket:before,body.dashboard .page-content .header .ion-paper-airplane:before,body.dashboard .page-content .header .ion-paperclip:before,body.dashboard .page-content .header .ion-pause:before,body.dashboard .page-content .header .ion-person-add:before,body.dashboard .page-content .header .ion-person-stalker:before,body.dashboard .page-content .header .ion-person:before,body.dashboard .page-content .header .ion-pie-graph:before,body.dashboard .page-content .header .ion-pin:before,body.dashboard .page-content .header .ion-pinpoint:before,body.dashboard .page-content .header .ion-pizza:before,body.dashboard .page-content .header .ion-plane:before,body.dashboard .page-content .header .ion-planet:before,body.dashboard .page-content .header .ion-play:before,body.dashboard .page-content .header .ion-playstation:before,body.dashboard .page-content .header .ion-plus-circled:before,body.dashboard .page-content .header .ion-plus-round:before,body.dashboard .page-content .header .ion-plus:before,body.dashboard .page-content .header .ion-podium:before,body.dashboard .page-content .header .ion-pound:before,body.dashboard .page-content .header .ion-power:before,body.dashboard .page-content .header .ion-pricetag:before,body.dashboard .page-content .header .ion-pricetags:before,body.dashboard .page-content .header .ion-printer:before,body.dashboard .page-content .header .ion-pull-request:before,body.dashboard .page-content .header .ion-qr-scanner:before,body.dashboard .page-content .header .ion-quote:before,body.dashboard .page-content .header .ion-radio-waves:before,body.dashboard .page-content .header .ion-record:before,body.dashboard .page-content .header .ion-refresh:before,body.dashboard .page-content .header .ion-reply-all:before,body.dashboard .page-content .header .ion-reply:before,body.dashboard .page-content .header .ion-ribbon-a:before,body.dashboard .page-content .header .ion-ribbon-b:before,body.dashboard .page-content .header .ion-sad-outline:before,body.dashboard .page-content .header .ion-sad:before,body.dashboard .page-content .header .ion-scissors:before,body.dashboard .page-content .header .ion-search:before,body.dashboard .page-content .header .ion-settings:before,body.dashboard .page-content .header .ion-share:before,body.dashboard .page-content .header .ion-shuffle:before,body.dashboard .page-content .header .ion-skip-backward:before,body.dashboard .page-content .header .ion-skip-forward:before,body.dashboard .page-content .header .ion-social-android-outline:before,body.dashboard .page-content .header .ion-social-android:before,body.dashboard .page-content .header .ion-social-angular-outline:before,body.dashboard .page-content .header .ion-social-angular:before,body.dashboard .page-content .header .ion-social-apple-outline:before,body.dashboard .page-content .header .ion-social-apple:before,body.dashboard .page-content .header .ion-social-bitcoin-outline:before,body.dashboard .page-content .header .ion-social-bitcoin:before,body.dashboard .page-content .header .ion-social-buffer-outline:before,body.dashboard .page-content .header .ion-social-buffer:before,body.dashboard .page-content .header .ion-social-chrome-outline:before,body.dashboard .page-content .header .ion-social-chrome:before,body.dashboard .page-content .header .ion-social-codepen-outline:before,body.dashboard .page-content .header .ion-social-codepen:before,body.dashboard .page-content .header .ion-social-css3-outline:before,body.dashboard .page-content .header .ion-social-css3:before,body.dashboard .page-content .header .ion-social-designernews-outline:before,body.dashboard .page-content .header .ion-social-designernews:before,body.dashboard .page-content .header .ion-social-dribbble-outline:before,body.dashboard .page-content .header .ion-social-dribbble:before,body.dashboard .page-content .header .ion-social-dropbox-outline:before,body.dashboard .page-content .header .ion-social-dropbox:before,body.dashboard .page-content .header .ion-social-euro-outline:before,body.dashboard .page-content .header .ion-social-euro:before,body.dashboard .page-content .header .ion-social-facebook-outline:before,body.dashboard .page-content .header .ion-social-facebook:before,body.dashboard .page-content .header .ion-social-foursquare-outline:before,body.dashboard .page-content .header .ion-social-foursquare:before,body.dashboard .page-content .header .ion-social-freebsd-devil:before,body.dashboard .page-content .header .ion-social-github-outline:before,body.dashboard .page-content .header .ion-social-github:before,body.dashboard .page-content .header .ion-social-google-outline:before,body.dashboard .page-content .header .ion-social-google:before,body.dashboard .page-content .header .ion-social-googleplus-outline:before,body.dashboard .page-content .header .ion-social-googleplus:before,body.dashboard .page-content .header .ion-social-hackernews-outline:before,body.dashboard .page-content .header .ion-social-hackernews:before,body.dashboard .page-content .header .ion-social-html5-outline:before,body.dashboard .page-content .header .ion-social-html5:before,body.dashboard .page-content .header .ion-social-instagram-outline:before,body.dashboard .page-content .header .ion-social-instagram:before,body.dashboard .page-content .header .ion-social-javascript-outline:before,body.dashboard .page-content .header .ion-social-javascript:before,body.dashboard .page-content .header .ion-social-linkedin-outline:before,body.dashboard .page-content .header .ion-social-linkedin:before,body.dashboard .page-content .header .ion-social-markdown:before,body.dashboard .page-content .header .ion-social-nodejs:before,body.dashboard .page-content .header .ion-social-octocat:before,body.dashboard .page-content .header .ion-social-pinterest-outline:before,body.dashboard .page-content .header .ion-social-pinterest:before,body.dashboard .page-content .header .ion-social-python:before,body.dashboard .page-content .header .ion-social-reddit-outline:before,body.dashboard .page-content .header .ion-social-reddit:before,body.dashboard .page-content .header .ion-social-rss-outline:before,body.dashboard .page-content .header .ion-social-rss:before,body.dashboard .page-content .header .ion-social-sass:before,body.dashboard .page-content .header .ion-social-skype-outline:before,body.dashboard .page-content .header .ion-social-skype:before,body.dashboard .page-content .header .ion-social-snapchat-outline:before,body.dashboard .page-content .header .ion-social-snapchat:before,body.dashboard .page-content .header .ion-social-tumblr-outline:before,body.dashboard .page-content .header .ion-social-tumblr:before,body.dashboard .page-content .header .ion-social-tux:before,body.dashboard .page-content .header .ion-social-twitch-outline:before,body.dashboard .page-content .header .ion-social-twitch:before,body.dashboard .page-content .header .ion-social-twitter-outline:before,body.dashboard .page-content .header .ion-social-twitter:before,body.dashboard .page-content .header .ion-social-usd-outline:before,body.dashboard .page-content .header .ion-social-usd:before,body.dashboard .page-content .header .ion-social-vimeo-outline:before,body.dashboard .page-content .header .ion-social-vimeo:before,body.dashboard .page-content .header .ion-social-whatsapp-outline:before,body.dashboard .page-content .header .ion-social-whatsapp:before,body.dashboard .page-content .header .ion-social-windows-outline:before,body.dashboard .page-content .header .ion-social-windows:before,body.dashboard .page-content .header .ion-social-wordpress-outline:before,body.dashboard .page-content .header .ion-social-wordpress:before,body.dashboard .page-content .header .ion-social-yahoo-outline:before,body.dashboard .page-content .header .ion-social-yahoo:before,body.dashboard .page-content .header .ion-social-yen-outline:before,body.dashboard .page-content .header .ion-social-yen:before,body.dashboard .page-content .header .ion-social-youtube-outline:before,body.dashboard .page-content .header .ion-social-youtube:before,body.dashboard .page-content .header .ion-soup-can-outline:before,body.dashboard .page-content .header .ion-soup-can:before,body.dashboard .page-content .header .ion-speakerphone:before,body.dashboard .page-content .header .ion-speedometer:before,body.dashboard .page-content .header .ion-spoon:before,body.dashboard .page-content .header .ion-star:before,body.dashboard .page-content .header .ion-stats-bars:before,body.dashboard .page-content .header .ion-steam:before,body.dashboard .page-content .header .ion-stop:before,body.dashboard .page-content .header .ion-thermometer:before,body.dashboard .page-content .header .ion-thumbsdown:before,body.dashboard .page-content .header .ion-thumbsup:before,body.dashboard .page-content .header .ion-toggle-filled:before,body.dashboard .page-content .header .ion-toggle:before,body.dashboard .page-content .header .ion-transgender:before,body.dashboard .page-content .header .ion-trash-a:before,body.dashboard .page-content .header .ion-trash-b:before,body.dashboard .page-content .header .ion-trophy:before,body.dashboard .page-content .header .ion-tshirt-outline:before,body.dashboard .page-content .header .ion-tshirt:before,body.dashboard .page-content .header .ion-umbrella:before,body.dashboard .page-content .header .ion-university:before,body.dashboard .page-content .header .ion-unlocked:before,body.dashboard .page-content .header .ion-upload:before,body.dashboard .page-content .header .ion-usb:before,body.dashboard .page-content .header .ion-videocamera:before,body.dashboard .page-content .header .ion-volume-high:before,body.dashboard .page-content .header .ion-volume-low:before,body.dashboard .page-content .header .ion-volume-medium:before,body.dashboard .page-content .header .ion-volume-mute:before,body.dashboard .page-content .header .ion-wand:before,body.dashboard .page-content .header .ion-waterdrop:before,body.dashboard .page-content .header .ion-wifi:before,body.dashboard .page-content .header .ion-wineglass:before,body.dashboard .page-content .header .ion-woman:before,body.dashboard .page-content .header .ion-wrench:before,body.dashboard .page-content .header .ion-xbox:before,body.dashboard .page-content .header .ionicons{margin-right:2px}body.dashboard .page-content .sub-header{font-weight:300;text-transform:uppercase}body.dashboard .page-content .sub-header a{text-transform:none}body.dashboard .page-content .striped-list .striped-list-item{border-bottom:1px solid #f0f0f0;padding:8px 0}body.dashboard .page-content .drag-handle{cursor:move}body.dashboard .page-content .user-grid .user img{border-radius:5px;margin-bottom:15px;border:0}body.dashboard .page-content .user-grid .user .name{font-weight:600}body.dashboard .page-content .user-grid .user .email{color:#444;margin-top:4px}@media (max-width:767px){body.dashboard .page-content .content-wrapper,body.dashboard .page-content .header,body.dashboard .page-content .header.fixed{padding-left:20px;padding-right:20px}}@media (min-width:768px) and (max-width:991px){body.dashboard .page-content .header.fixed{padding-left:120px}}#welcome-modal .modal-dialog{margin-top:65px}#welcome-modal .modal-content .modal-header{border-bottom:0}#welcome-modal .modal-content .modal-body{padding-bottom:50px}#welcome-modal .modal-content .modal-body header{text-align:center;font-weight:600;font-size:22px;color:#444;margin-bottom:23px}#welcome-modal .modal-content .modal-body p{font-size:13px;color:#555;margin:0 auto;width:80%;text-align:center;line-height:20px}#welcome-modal .modal-content .modal-body .go-dashboard{text-align:center;display:block;margin-top:10px}#welcome-modal .modal-content .modal-body .get-started{margin-top:40px}#welcome-modal .modal-content .modal-body .get-started .col-md-4{text-align:center;padding-bottom:50px}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a{color:#666;display:block;margin-top:12px;font-size:13px}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a i{font-size:38px;color:#6db81c;display:block}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a:hover{text-decoration:none;color:#999}body.login .form-bg{border-radius:10px;margin:auto;margin-top:60px;padding:30px;width:320px;border:1px solid rgba(0,0,0,.1);box-shadow:0 20px 30px rgba(0,0,0,.2);background-color:#fff}body.login .logo{margin-bottom:30px}body.login .logo img{margin:0 auto}body.login .login-input{height:45px}body.login i{font-size:22px}body.login .btn.btn-white{background-color:#fff;transition:background-color .5s ease}body.login .btn.btn-white.btn-trans{background-color:transparent;border:1px solid #fff;border-radius:4px;color:#fff}body.login .btn.btn-white.btn-trans:hover{background-color:#fff;color:#7ed321}.setup-page{padding-top:60px}.setup-page .logo{display:block;margin:0 auto 30px}.setup-page .steps{margin:0 auto;border-radius:2px 2px 0 0;margin-bottom:20px}.setup-page .steps .step{padding:20px 0;text-align:center;position:relative;font-size:13px}.setup-page .steps .step:not(:last-child):after{content:'';position:absolute;bottom:31px;left:55%;display:block;height:1px;background:#94a1b8;width:100%}.setup-page .steps .step span{width:23px;height:23px;display:block;position:relative;margin:0 auto;margin-top:13px;border-radius:25px;background:#f0f3f4;border:1px solid #94a1b8;transition:all .2s linear}.setup-page .steps .step.active span{background:#7ed321}.setup-page .setup-success{text-align:center}.setup-page .setup-success i{font-size:47px}.setup-page .setup-success h3{margin-top:25px;font-size:21px;color:#556579}.setup-page .setup-success .btn{margin-top:40px}.component-inline-update{padding-top:8px}.component-inline-update label{display:initial;font-weight:400}.component-group-name{font-size:18px;padding-left:10px}.component-group-other{font-size:18px}.stats-widget{text-align:center;margin-bottom:30px;background-color:#fff;border:1px solid #eee}.stats-widget.full-stats-block .stats-bottom{border-top:0!important;color:#fff;position:relative;margin-top:-1px;z-index:1000}.stats-widget .stats-top{padding:20px}.stats-widget .stats-top>span{display:block;text-align:center}.stats-widget .stats-top>span.stats-value{font-size:24px;font-weight:400}.stats-widget .stats-top>span.stats-label{padding-top:5px;font-size:14px;font-weight:300;color:#777}.stats-widget .stats-body,.stats-widget .stats-chart{margin-top:-20px;padding-top:10px}.stats-widget .stats-body .list-group{border:none;padding-bottom:0;margin-bottom:0}.stats-widget .stats-body .list-group .list-group-item{border-right:none;border-left:none;border-color:#eee}.stats-widget .stats-body .list-group .list-group-item:last-child{border-bottom:none}.stats-widget .stats-bottom{border-top:1px solid #eee;color:#777;padding:12px 10px;text-align:center;background-color:#f9f9f9}.stats-widget .stats-bottom.bg-green{background-color:#7ed321;color:#fff}.stats-widget .stats-bottom.bg-blue{background-color:#3498db;color:#fff}.stats-widget .stats-bottom.bg-red{background-color:#ff6f6f;color:#fff}.stats-widget .stats-bottom.bg-teal{background-color:#0dccc0;color:#fff}ul.messenger,ul.messenger>li{margin:0;padding:0}ul.messenger>li{list-style:none}ul.messenger.messenger-empty{display:none}ul.messenger .messenger-message{overflow:hidden;*zoom:1}ul.messenger .messenger-message.messenger-hidden{display:none}ul.messenger .messenger-message .messenger-actions a,ul.messenger .messenger-message .messenger-phrase{padding-right:5px}ul.messenger .messenger-message .messenger-actions{float:right}ul.messenger .messenger-message .messenger-actions a{cursor:pointer;text-decoration:underline}ul.messenger .messenger-message ol,ul.messenger .messenger-message ul{margin:10px 18px 0}ul.messenger.messenger-fixed{position:fixed;z-index:10000}ul.messenger.messenger-fixed .messenger-message{min-width:0;box-sizing:border-box}ul.messenger.messenger-fixed .message .messenger-actions{float:left}ul.messenger.messenger-fixed.messenger-on-top{top:20px}ul.messenger.messenger-fixed.messenger-on-bottom{bottom:20px}ul.messenger.messenger-fixed.messenger-on-bottom,ul.messenger.messenger-fixed.messenger-on-top{left:50%;width:600px;margin-left:-300px}@media (max-width:960px){ul.messenger.messenger-fixed.messenger-on-bottom,ul.messenger.messenger-fixed.messenger-on-top{left:10%;width:80%;margin-left:0}}ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right,ul.messenger.messenger-fixed.messenger-on-top.messenger-on-right{right:20px;left:auto}ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left,ul.messenger.messenger-fixed.messenger-on-top.messenger-on-left{left:20px;margin-left:0}ul.messenger.messenger-fixed.messenger-on-left,ul.messenger.messenger-fixed.messenger-on-right{width:350px}ul.messenger.messenger-fixed.messenger-on-left .messenger-actions,ul.messenger.messenger-fixed.messenger-on-right .messenger-actions{float:left}ul.messenger .messenger-spinner{display:none}@keyframes ui-spinner-rotate-right{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@keyframes ui-spinner-rotate-left{0%{transform:rotate(0deg)}25%{transform:rotate(0deg)}50%{transform:rotate(180deg)}75%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.messenger-spinner{position:relative;border-radius:100%}ul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner{display:block}.messenger-spinner .messenger-spinner-side{width:50%;height:100%;overflow:hidden;position:absolute}.messenger-spinner .messenger-spinner-side .messenger-spinner-fill{border-radius:999px;position:absolute;width:100%;height:100%;animation-iteration-count:infinite;animation-timing-function:linear}.messenger-spinner .messenger-spinner-side-left{left:0}.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill{left:100%;border-top-left-radius:0;border-bottom-left-radius:0;animation-name:ui-spinner-rotate-left;transform-origin:0 50%}.messenger-spinner .messenger-spinner-side-right{left:50%}.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill{left:-100%;border-top-right-radius:0;border-bottom-right-radius:0;animation-name:ui-spinner-rotate-right;transform-origin:100% 50%}ul.messenger-theme-air{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;font-family:Raleway,sans-serif}ul.messenger-theme-air .messenger-message{transition:background-color .4s;border-radius:5px;box-shadow:inset 0 0 0 1px #fff,inset 0 2px #fff,0 0 0 1px rgba(0,0,0,.1),0 1px rgba(0,0,0,.2);border:0;background-color:#fff;position:relative;margin-bottom:1em;font-size:13px;color:#666;font-weight:500;padding:10px 30px 11px 46px}ul.messenger-theme-air .messenger-message:hover{background-color:#fff}ul.messenger-theme-air .messenger-message .messenger-close{position:absolute;top:0;right:0;color:#888;opacity:1;font-weight:700;display:block;font-size:20px;line-height:20px;padding:8px 10px 7px 7px;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}ul.messenger-theme-air .messenger-message .messenger-close:hover{color:#444}ul.messenger-theme-air .messenger-message .messenger-close:active{color:#222}ul.messenger-theme-air .messenger-message .messenger-actions{float:none;margin-top:10px}ul.messenger-theme-air .messenger-message .messenger-actions a{box-shadow:0 0 0 1px rgba(0,0,0,.1),inset 0 1px hsla(0,0%,100%,.05);border-radius:4px;text-decoration:none;display:inline-block;padding:10px;color:#888;margin-right:10px;padding:3px 10px 5px;text-transform:capitalize}ul.messenger-theme-air .messenger-message .messenger-actions a:hover{box-shadow:0 0 0 1px rgba(0,0,0,.1),inset 0 1px hsla(0,0%,100%,.15);color:#444}ul.messenger-theme-air .messenger-message .messenger-actions a:active{box-shadow:0 0 0 1px rgba(0,0,0,.18),inset 0 1px rgba(0,0,0,.05);background:rgba(0,0,0,.04);color:#444}ul.messenger-theme-air .messenger-message .messenger-actions .messenger-phrase{display:none}ul.messenger-theme-air .messenger-message .messenger-message-inner:before{box-shadow:inset 0 1px 3px rgba(0,0,0,.3);border-radius:50%;position:absolute;left:17px;display:block;content:" ";top:50%;margin-top:-8px;height:13px;width:13px;z-index:20}ul.messenger-theme-air .messenger-message.alert-success .messenger-message-inner:before{background-color:#5fca4a}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner{width:24px;height:24px;background:transparent}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill{background:#dd6a45;animation-duration:20s;opacity:1}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after{content:"";background:#fff;position:absolute;width:19px;height:19px;border-radius:50%;top:2px;left:2px;display:block}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner{width:24px;height:24px;background:transparent}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill{background:#dd6a45;animation-duration:600s;opacity:1}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after{content:"";background:#fff;position:absolute;width:19px;height:19px;border-radius:50%;top:2px;left:2px;display:block}ul.messenger-theme-air .messenger-message.alert-error .messenger-message-inner:before{background-color:#dd6a45}ul.messenger-theme-air .messenger-message.alert-info .messenger-message-inner:before{background-color:#61c4b8}ul.messenger-theme-air .messenger-spinner{display:block;position:absolute;left:12px;top:50%;margin-top:-13px;z-index:999;height:24px;width:24px;z-index:10} - -/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT -Copyright (c) 2015 Daniel Eden -*/.animated.infinite{animation-iteration-count:infinite}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}body{-webkit-backface-visibility:hidden}.animated{animation-duration:1s;animation-fill-mode:both}.animated.hinge{animation-duration:2s}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]:after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]:after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]:after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]:after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]:after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]:after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]:after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]:after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]:after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch:after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:3px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev:after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next:after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:7px solid transparent;border-bottom-color:#7ed321;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#7ed321;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:3px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#7ed321;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.strengthify-wrapper>*{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;transition:all .5s ease-in-out}.strengthify-wrapper{position:relative}.strengthify-bg,.strengthify-container,.strengthify-separator,.strengthify-wrapper{height:8px}.strengthify-bg,.strengthify-container{display:block;position:absolute;width:100%}.strengthify-bg{background-color:#eee}.strengthify-separator{display:inline-block;position:absolute;background-color:#fff;width:2px;z-index:10}.password-bad{background-color:#ff6f6f}.password-medium{background-color:#f7ca18}.password-good{background-color:#7ed321}.sortable-chosen{border:1px solid #e8e8e8!important;background-color:#f0f3f4}body.status-page{padding-top:40px;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;background-color:#f0f3f4;color:#333;font-size:1.4em;font-weight:400;-webkit-font-smoothing:antialiased}body.status-page.no-padding{padding-top:0!important}body.status-page hr{margin-top:10px;margin-bottom:10px}body.status-page h1,body.status-page h2,body.status-page h3,body.status-page h4,body.status-page h5{margin-bottom:20px}body.status-page img{box-sizing:border-box}body.status-page img.emoji{height:20px;width:20px;vertical-align:middle;max-width:none}body.status-page p,body.status-page strong{color:#333}body.status-page .tooltip .tooltip-inner{padding:8px 12px;font-size:14px;word-wrap:break-word}body.status-page .help-icon{cursor:help}body.status-page .text-component-1,body.status-page .text-success{color:#7ed321}body.status-page .text-component-2,body.status-page .text-info{color:#3498db}body.status-page .text-alert,body.status-page .text-component-3{color:#f7ca18}body.status-page .text-component-4,body.status-page .text-danger{color:#ff6f6f}body.status-page .container{max-width:960px}body.status-page .page-header{margin-top:10px}body.status-page .app-banner{margin-bottom:30px}body.status-page .about-app{margin-bottom:40px}body.status-page .about-app p{font-size:1.2em}body.status-page .alert{font-size:1.2em;font-weight:600}body.status-page .timeline .content-wrapper{margin-top:40px;margin-bottom:40px}body.status-page .timeline h3{margin-top:30px;margin-bottom:40px;font-size:22px}body.status-page .timeline h3 small{margin-left:15px}body.status-page .timeline .list-group.components .panel-body h1,body.status-page .timeline .panel .panel-body h1{margin-top:0;margin-bottom:4px;font-size:2em}body.status-page .timeline .list-group.components .panel-body h2,body.status-page .timeline .panel .panel-body h2{margin-top:0;margin-bottom:4px;font-size:1.8em}body.status-page .timeline .list-group.components .panel-body h3,body.status-page .timeline .panel .panel-body h3{margin-top:0;margin-bottom:4px;font-size:1.6em}body.status-page .timeline .list-group.components .panel-body h4,body.status-page .timeline .panel .panel-body h4{margin-top:0;margin-bottom:4px;font-size:1.4em}body.status-page .timeline .list-group.components .panel-body h5,body.status-page .timeline .panel .panel-body h5{margin-top:0;margin-bottom:4px;font-size:1.2em}body.status-page .timeline .list-group.components .panel-body p,body.status-page .timeline .panel .panel-body p{margin:0}body.status-page .timeline .moment{width:100%;padding-bottom:10px;position:relative}body.status-page .timeline .moment.first:before{top:-5px}body.status-page .timeline .moment:before{content:'';position:absolute;left:26px;top:-5px;width:2px;height:100%;background:#7266ba}body.status-page .timeline .moment .status-icon{background:#fff;width:35px;height:35px;border-radius:50%;border:1px solid #e8e8e8;position:absolute;left:25px;top:14px}body.status-page .timeline .moment .status-icon .icon{position:absolute;top:7px;left:11px}body.status-page .timeline .moment .status-icon .icon.ion-alert{left:15px}body.status-page .timeline .moment .status-icon.status-0{color:#b23f73}body.status-page .timeline .moment .status-icon.status-1{color:#f80}body.status-page .timeline .moment .status-icon.status-2{color:#f7ca18}body.status-page .timeline .moment .status-icon.status-3{color:#3498db}body.status-page .timeline .moment .status-icon.status-4{color:#7ed321}body.status-page .timeline .moment.last:before{background:#fff}body.status-page .timeline .moment .list-group.components,body.status-page .timeline .moment .panel{margin:0;border-radius:2px}body.status-page .timeline .moment .panel-message.list-group.components,body.status-page .timeline .moment .panel.panel-message{border:1px solid #e8e8e8}body.status-page .timeline .moment .panel-message.list-group.components .date,body.status-page .timeline .moment .panel.panel-message .date{color:#949494}body.status-page .timeline .moment .panel-message.list-group.components:before,body.status-page .timeline .moment .panel.panel-message:before{position:absolute;top:16px;left:1px;display:inline-block;border-top:15px solid transparent;border-left:0 solid #e8e8e8;border-right:15px solid #e8e8e8;border-bottom:15px solid transparent;content:" "}body.status-page .timeline .moment .panel-message.list-group.components:after,body.status-page .timeline .moment .panel.panel-message:after{position:absolute;top:17px;left:2px;display:inline-block;border-top:14px solid transparent;border-left:0 solid #fff;border-right:14px solid #fff;border-bottom:14px solid transparent;content:" "}body.status-page .timeline .moment .list-group.components .panel-heading strong,body.status-page .timeline .moment .panel .panel-heading strong{font-size:1.1em}body.status-page .timeline .moment .list-group.components .panel-body,body.status-page .timeline .moment .panel .panel-body{border-top:1px solid #eee}body.status-page .timeline .moment .list-group.components .panel-body p,body.status-page .timeline .moment .panel .panel-body p{font-size:1.1em}body.status-page .timeline .moment .list-group.components .panel-body p:not(:last-child),body.status-page .timeline .moment .panel .panel-body p:not(:last-child){margin-bottom:10px}@media (max-width:767px){body.status-page .timeline .moment .content{width:100%}}body.status-page .list-group{padding-left:0}body.status-page .list-group .list-group-item{border-radius:0;background-color:#fff;border:1px solid #e8e8e8;font-size:1.1em;padding:15px}body.status-page .list-group .list-group-item a{font-weight:400}body.status-page .list-group .list-group-item h4{margin:0;font-weight:400;max-width:90%}body.status-page .list-group .list-group-item p,body.status-page .list-group .list-group-item time{margin-bottom:0;line-height:1.3em}body.status-page .list-group .list-group-item.group-name{background-color:#e8e8e8;padding-top:.6em;padding-bottom:.6em;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.status-page .list-group .list-group-item.break{padding:1px;background-color:#f0f3f4}body.status-page .list-group.components{border-color:#e8e8e8}body.status-page .list-group.components:last-child{margin-bottom:30px}body.status-page .list-group.components+.components{margin-top:5px}body.status-page .list-group.components p{margin-bottom:10px}body.status-page .list-group.components .badge{color:transparent}body.status-page .list-group.components a{color:#333!important}body.status-page footer{position:absolute;width:100%;bottom:0;height:60px;padding:30px 0 60px;border-top:1px solid #e8e8e8;color:#666;font-size:13px;line-height:30px;text-align:center;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}body.status-page footer .btn{text-shadow:none}body.status-page footer .icons a.icon-link{display:inline-block;min-width:30px;height:30px;border-radius:3px;background-color:#666;text-align:center;color:#e8e8e8;transition:all .15s;padding:0 10px}body.status-page footer .icons a.icon-link.rss{background-color:#f80}body.status-page footer .icons a.icon-link:hover{text-decoration:none;background-color:#4d4d4d}body.status-page footer .list-inline>li{padding-right:0}@media (min-width:768px){body.status-page footer{text-align:left}body.status-page footer .list-inline{text-align:right}body.status-page footer .list-inline>li{padding-right:0}body.status-page footer .icons{margin-top:0;text-align:right}}body.status-page .section-components,body.status-page .section-metrics,body.status-page .section-scheduled,body.status-page .section-timeline{margin-top:40px}body.status-page .navbar-custom{padding-top:10px;padding-bottom:10px;width:100%;border-radius:0;margin-bottom:10px}body.status-page .navbar-custom a.navbar-brand{font-size:30px;font-weight:600}body.status-page .navbar-custom .navbar-nav li a{color:#333;font-size:1.7rem}body.status-page .navbar-custom .navbar-nav li a:hover{background-color:transparent}body.error-page{background-color:#f3f3f4}body.error-page .middle-box{height:400px;width:400px;position:absolute;top:50%;left:50%;margin-top:-250px;margin-left:-200px;z-index:100}body.error-page .middle-box h1{font-size:9em}body.error-page h3.font-bold{font-weight:600} \ No newline at end of file diff --git a/public/build/dist/css/all.css.map b/public/build/dist/css/all.css.map deleted file mode 100644 index 6015f9839115..000000000000 --- a/public/build/dist/css/all.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["jquery.minicolors.css","sweetalert.css","github-markdown.css","app.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACp6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"all.css","sourcesContent":[".minicolors {\n position: relative;\n}\n\n.minicolors-sprite {\n background-image: url(data:image/png;base64,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);\n}\n\n.minicolors-no-data-uris .minicolors-sprite {\n background-image: url(jquery.minicolors.png);\n}\n\n.minicolors-swatch {\n position: absolute;\n vertical-align: middle;\n background-position: -80px 0;\n border: solid 1px #ccc;\n cursor: text;\n padding: 0;\n margin: 0;\n display: inline-block;\n}\n\n.minicolors-swatch-color {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n.minicolors input[type=hidden] + .minicolors-swatch {\n width: 28px;\n position: static;\n cursor: pointer;\n}\n\n.minicolors input[type=hidden][disabled] + .minicolors-swatch {\n cursor: default;\n}\n\n/* Panel */\n.minicolors-panel {\n position: absolute;\n width: 173px;\n height: 152px;\n background: white;\n border: solid 1px #CCC;\n box-shadow: 0 0 20px rgba(0, 0, 0, .2);\n z-index: 99999;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n display: none;\n}\n\n.minicolors-panel.minicolors-visible {\n display: block;\n}\n\n/* Panel positioning */\n.minicolors-position-top .minicolors-panel {\n top: -154px;\n}\n\n.minicolors-position-right .minicolors-panel {\n right: 0;\n}\n\n.minicolors-position-bottom .minicolors-panel {\n top: auto;\n}\n\n.minicolors-position-left .minicolors-panel {\n left: 0;\n}\n\n.minicolors-with-opacity .minicolors-panel {\n width: 194px;\n}\n\n.minicolors .minicolors-grid {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 150px;\n height: 150px;\n background-position: -120px 0;\n cursor: crosshair;\n}\n\n.minicolors .minicolors-grid-inner {\n position: absolute;\n top: 0;\n left: 0;\n width: 150px;\n height: 150px;\n}\n\n.minicolors-slider-saturation .minicolors-grid {\n background-position: -420px 0;\n}\n\n.minicolors-slider-saturation .minicolors-grid-inner {\n background-position: -270px 0;\n background-image: inherit;\n}\n\n.minicolors-slider-brightness .minicolors-grid {\n background-position: -570px 0;\n}\n\n.minicolors-slider-brightness .minicolors-grid-inner {\n background-color: black;\n}\n\n.minicolors-slider-wheel .minicolors-grid {\n background-position: -720px 0;\n}\n\n.minicolors-slider,\n.minicolors-opacity-slider {\n position: absolute;\n top: 1px;\n left: 152px;\n width: 20px;\n height: 150px;\n background-color: white;\n background-position: 0 0;\n cursor: row-resize;\n}\n\n.minicolors-slider-saturation .minicolors-slider {\n background-position: -60px 0;\n}\n\n.minicolors-slider-brightness .minicolors-slider {\n background-position: -20px 0;\n}\n\n.minicolors-slider-wheel .minicolors-slider {\n background-position: -20px 0;\n}\n\n.minicolors-opacity-slider {\n left: 173px;\n background-position: -40px 0;\n display: none;\n}\n\n.minicolors-with-opacity .minicolors-opacity-slider {\n display: block;\n}\n\n/* Pickers */\n.minicolors-grid .minicolors-picker {\n position: absolute;\n top: 70px;\n left: 70px;\n width: 12px;\n height: 12px;\n border: solid 1px black;\n border-radius: 10px;\n margin-top: -6px;\n margin-left: -6px;\n background: none;\n}\n\n.minicolors-grid .minicolors-picker > div {\n position: absolute;\n top: 0;\n left: 0;\n width: 8px;\n height: 8px;\n border-radius: 8px;\n border: solid 2px white;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.minicolors-picker {\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 2px;\n background: white;\n border: solid 1px black;\n margin-top: -2px;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n/* Inline controls */\n.minicolors-inline {\n display: inline-block;\n}\n\n.minicolors-inline .minicolors-input {\n display: none !important;\n}\n\n.minicolors-inline .minicolors-panel {\n position: relative;\n top: auto;\n left: auto;\n box-shadow: none;\n z-index: auto;\n display: inline-block;\n}\n\n/* Default theme */\n.minicolors-theme-default .minicolors-swatch {\n top: 5px;\n left: 5px;\n width: 18px;\n height: 18px;\n}\n.minicolors-theme-default.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 5px;\n}\n.minicolors-theme-default.minicolors {\n width: auto;\n display: inline-block;\n}\n.minicolors-theme-default .minicolors-input {\n height: 20px;\n width: auto;\n display: inline-block;\n padding-left: 26px;\n}\n.minicolors-theme-default.minicolors-position-right .minicolors-input {\n padding-right: 26px;\n padding-left: inherit;\n}\n\n/* Bootstrap theme */\n.minicolors-theme-bootstrap .minicolors-swatch {\n z-index: 2;\n top: 3px;\n left: 3px;\n width: 28px;\n height: 28px;\n border-radius: 3px;\n}\n.minicolors-theme-bootstrap .minicolors-swatch-color {\n border-radius: inherit;\n}\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 3px;\n}\n.minicolors-theme-bootstrap .minicolors-input {\n float: none;\n padding-left: 44px;\n}\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {\n padding-right: 44px;\n padding-left: 12px;\n}\n.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {\n top: 4px;\n left: 4px;\n width: 37px;\n height: 37px;\n border-radius: 5px;\n}\n.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {\n width: 24px;\n height: 24px;\n}\n.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n","body.stop-scrolling {\n height: 100%;\n overflow: hidden; }\n\n.sweet-overlay {\n background-color: black;\n /* IE8 */\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\";\n /* IE8 */\n background-color: rgba(0, 0, 0, 0.4);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: none;\n z-index: 10000; }\n\n.sweet-alert {\n background-color: white;\n font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n width: 478px;\n padding: 17px;\n border-radius: 5px;\n text-align: center;\n position: fixed;\n left: 50%;\n top: 50%;\n margin-left: -256px;\n margin-top: -200px;\n overflow: hidden;\n display: none;\n z-index: 99999; }\n @media all and (max-width: 540px) {\n .sweet-alert {\n width: auto;\n margin-left: 0;\n margin-right: 0;\n left: 15px;\n right: 15px; } }\n .sweet-alert h2 {\n color: #575757;\n font-size: 30px;\n text-align: center;\n font-weight: 600;\n text-transform: none;\n position: relative;\n margin: 25px 0;\n padding: 0;\n line-height: 40px;\n display: block; }\n .sweet-alert p {\n color: #797979;\n font-size: 16px;\n text-align: center;\n font-weight: 300;\n position: relative;\n text-align: inherit;\n float: none;\n margin: 0;\n padding: 0;\n line-height: normal; }\n .sweet-alert fieldset {\n border: none;\n position: relative; }\n .sweet-alert .sa-error-container {\n background-color: #f1f1f1;\n margin-left: -17px;\n margin-right: -17px;\n overflow: hidden;\n padding: 0 10px;\n max-height: 0;\n webkit-transition: padding 0.15s, max-height 0.15s;\n transition: padding 0.15s, max-height 0.15s; }\n .sweet-alert .sa-error-container.show {\n padding: 10px 0;\n max-height: 100px;\n webkit-transition: padding 0.2s, max-height 0.2s;\n transition: padding 0.25s, max-height 0.25s; }\n .sweet-alert .sa-error-container .icon {\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: #ea7d7d;\n color: white;\n line-height: 24px;\n text-align: center;\n margin-right: 3px; }\n .sweet-alert .sa-error-container p {\n display: inline-block; }\n .sweet-alert .sa-input-error {\n position: absolute;\n top: 29px;\n right: 26px;\n width: 20px;\n height: 20px;\n opacity: 0;\n -webkit-transform: scale(0.5);\n transform: scale(0.5);\n -webkit-transform-origin: 50% 50%;\n transform-origin: 50% 50%;\n -webkit-transition: all 0.1s;\n transition: all 0.1s; }\n .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n content: \"\";\n width: 20px;\n height: 6px;\n background-color: #f06e57;\n border-radius: 3px;\n position: absolute;\n top: 50%;\n margin-top: -4px;\n left: 50%;\n margin-left: -9px; }\n .sweet-alert .sa-input-error::before {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg); }\n .sweet-alert .sa-input-error::after {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg); }\n .sweet-alert .sa-input-error.show {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1); }\n .sweet-alert input {\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n border: 1px solid #d7d7d7;\n height: 43px;\n margin-top: 10px;\n margin-bottom: 17px;\n font-size: 18px;\n box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n padding: 0 12px;\n display: none;\n -webkit-transition: all 0.3s;\n transition: all 0.3s; }\n .sweet-alert input:focus {\n outline: none;\n box-shadow: 0px 0px 3px #c4e6f5;\n border: 1px solid #b4dbed; }\n .sweet-alert input:focus::-moz-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.5; }\n .sweet-alert input:focus:-ms-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.5; }\n .sweet-alert input:focus::-webkit-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.5; }\n .sweet-alert input::-moz-placeholder {\n color: #bdbdbd; }\n .sweet-alert input:-ms-input-placeholder {\n color: #bdbdbd; }\n .sweet-alert input::-webkit-input-placeholder {\n color: #bdbdbd; }\n .sweet-alert.show-input input {\n display: block; }\n .sweet-alert .sa-confirm-button-container {\n display: inline-block;\n position: relative; }\n .sweet-alert .la-ball-fall {\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -27px;\n margin-top: 4px;\n opacity: 0;\n visibility: hidden; }\n .sweet-alert button {\n background-color: #8CD4F5;\n color: white;\n border: none;\n box-shadow: none;\n font-size: 17px;\n font-weight: 500;\n -webkit-border-radius: 4px;\n border-radius: 5px;\n padding: 10px 32px;\n margin: 26px 5px 0 5px;\n cursor: pointer; }\n .sweet-alert button:focus {\n outline: none;\n box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }\n .sweet-alert button:hover {\n background-color: #7ecff4; }\n .sweet-alert button:active {\n background-color: #5dc2f1; }\n .sweet-alert button.cancel {\n background-color: #C1C1C1; }\n .sweet-alert button.cancel:hover {\n background-color: #b9b9b9; }\n .sweet-alert button.cancel:active {\n background-color: #a8a8a8; }\n .sweet-alert button.cancel:focus {\n box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }\n .sweet-alert button[disabled] {\n opacity: .6;\n cursor: default; }\n .sweet-alert button.confirm[disabled] {\n color: transparent; }\n .sweet-alert button.confirm[disabled] ~ .la-ball-fall {\n opacity: 1;\n visibility: visible;\n transition-delay: 0s; }\n .sweet-alert button::-moz-focus-inner {\n border: 0; }\n .sweet-alert[data-has-cancel-button=false] button {\n box-shadow: none !important; }\n .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n padding-bottom: 40px; }\n .sweet-alert .sa-icon {\n width: 80px;\n height: 80px;\n border: 4px solid gray;\n -webkit-border-radius: 40px;\n border-radius: 40px;\n border-radius: 50%;\n margin: 20px auto;\n padding: 0;\n position: relative;\n box-sizing: content-box; }\n .sweet-alert .sa-icon.sa-error {\n border-color: #F27474; }\n .sweet-alert .sa-icon.sa-error .sa-x-mark {\n position: relative;\n display: block; }\n .sweet-alert .sa-icon.sa-error .sa-line {\n position: absolute;\n height: 5px;\n width: 47px;\n background-color: #F27474;\n display: block;\n top: 37px;\n border-radius: 2px; }\n .sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n left: 17px; }\n .sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n right: 16px; }\n .sweet-alert .sa-icon.sa-warning {\n border-color: #F8BB86; }\n .sweet-alert .sa-icon.sa-warning .sa-body {\n position: absolute;\n width: 5px;\n height: 47px;\n left: 50%;\n top: 10px;\n -webkit-border-radius: 2px;\n border-radius: 2px;\n margin-left: -2px;\n background-color: #F8BB86; }\n .sweet-alert .sa-icon.sa-warning .sa-dot {\n position: absolute;\n width: 7px;\n height: 7px;\n -webkit-border-radius: 50%;\n border-radius: 50%;\n margin-left: -3px;\n left: 50%;\n bottom: 10px;\n background-color: #F8BB86; }\n .sweet-alert .sa-icon.sa-info {\n border-color: #C9DAE1; }\n .sweet-alert .sa-icon.sa-info::before {\n content: \"\";\n position: absolute;\n width: 5px;\n height: 29px;\n left: 50%;\n bottom: 17px;\n border-radius: 2px;\n margin-left: -2px;\n background-color: #C9DAE1; }\n .sweet-alert .sa-icon.sa-info::after {\n content: \"\";\n position: absolute;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n margin-left: -3px;\n top: 19px;\n background-color: #C9DAE1; }\n .sweet-alert .sa-icon.sa-success {\n border-color: #A5DC86; }\n .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n content: '';\n -webkit-border-radius: 40px;\n border-radius: 40px;\n border-radius: 50%;\n position: absolute;\n width: 60px;\n height: 120px;\n background: white;\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg); }\n .sweet-alert .sa-icon.sa-success::before {\n -webkit-border-radius: 120px 0 0 120px;\n border-radius: 120px 0 0 120px;\n top: -7px;\n left: -33px;\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n -webkit-transform-origin: 60px 60px;\n transform-origin: 60px 60px; }\n .sweet-alert .sa-icon.sa-success::after {\n -webkit-border-radius: 0 120px 120px 0;\n border-radius: 0 120px 120px 0;\n top: -11px;\n left: 30px;\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n -webkit-transform-origin: 0px 60px;\n transform-origin: 0px 60px; }\n .sweet-alert .sa-icon.sa-success .sa-placeholder {\n width: 80px;\n height: 80px;\n border: 4px solid rgba(165, 220, 134, 0.2);\n -webkit-border-radius: 40px;\n border-radius: 40px;\n border-radius: 50%;\n box-sizing: content-box;\n position: absolute;\n left: -4px;\n top: -4px;\n z-index: 2; }\n .sweet-alert .sa-icon.sa-success .sa-fix {\n width: 5px;\n height: 90px;\n background-color: white;\n position: absolute;\n left: 28px;\n top: 8px;\n z-index: 1;\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg); }\n .sweet-alert .sa-icon.sa-success .sa-line {\n height: 5px;\n background-color: #A5DC86;\n display: block;\n border-radius: 2px;\n position: absolute;\n z-index: 2; }\n .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n width: 25px;\n left: 14px;\n top: 46px;\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg); }\n .sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n width: 47px;\n right: 8px;\n top: 38px;\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg); }\n .sweet-alert .sa-icon.sa-custom {\n background-size: contain;\n border-radius: 0;\n border: none;\n background-position: center center;\n background-repeat: no-repeat; }\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n 0% {\n transform: scale(0.7);\n -webkit-transform: scale(0.7); }\n 45% {\n transform: scale(1.05);\n -webkit-transform: scale(1.05); }\n 80% {\n transform: scale(0.95);\n -webkit-transform: scale(0.95); }\n 100% {\n transform: scale(1);\n -webkit-transform: scale(1); } }\n\n@keyframes showSweetAlert {\n 0% {\n transform: scale(0.7);\n -webkit-transform: scale(0.7); }\n 45% {\n transform: scale(1.05);\n -webkit-transform: scale(1.05); }\n 80% {\n transform: scale(0.95);\n -webkit-transform: scale(0.95); }\n 100% {\n transform: scale(1);\n -webkit-transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n 0% {\n transform: scale(1);\n -webkit-transform: scale(1); }\n 100% {\n transform: scale(0.5);\n -webkit-transform: scale(0.5); } }\n\n@keyframes hideSweetAlert {\n 0% {\n transform: scale(1);\n -webkit-transform: scale(1); }\n 100% {\n transform: scale(0.5);\n -webkit-transform: scale(0.5); } }\n\n@-webkit-keyframes slideFromTop {\n 0% {\n top: 0%; }\n 100% {\n top: 50%; } }\n\n@keyframes slideFromTop {\n 0% {\n top: 0%; }\n 100% {\n top: 50%; } }\n\n@-webkit-keyframes slideToTop {\n 0% {\n top: 50%; }\n 100% {\n top: 0%; } }\n\n@keyframes slideToTop {\n 0% {\n top: 50%; }\n 100% {\n top: 0%; } }\n\n@-webkit-keyframes slideFromBottom {\n 0% {\n top: 70%; }\n 100% {\n top: 50%; } }\n\n@keyframes slideFromBottom {\n 0% {\n top: 70%; }\n 100% {\n top: 50%; } }\n\n@-webkit-keyframes slideToBottom {\n 0% {\n top: 50%; }\n 100% {\n top: 70%; } }\n\n@keyframes slideToBottom {\n 0% {\n top: 50%; }\n 100% {\n top: 70%; } }\n\n.showSweetAlert[data-animation=pop] {\n -webkit-animation: showSweetAlert 0.3s;\n animation: showSweetAlert 0.3s; }\n\n.showSweetAlert[data-animation=none] {\n -webkit-animation: none;\n animation: none; }\n\n.showSweetAlert[data-animation=slide-from-top] {\n -webkit-animation: slideFromTop 0.3s;\n animation: slideFromTop 0.3s; }\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n -webkit-animation: slideFromBottom 0.3s;\n animation: slideFromBottom 0.3s; }\n\n.hideSweetAlert[data-animation=pop] {\n -webkit-animation: hideSweetAlert 0.2s;\n animation: hideSweetAlert 0.2s; }\n\n.hideSweetAlert[data-animation=none] {\n -webkit-animation: none;\n animation: none; }\n\n.hideSweetAlert[data-animation=slide-from-top] {\n -webkit-animation: slideToTop 0.4s;\n animation: slideToTop 0.4s; }\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n -webkit-animation: slideToBottom 0.3s;\n animation: slideToBottom 0.3s; }\n\n@-webkit-keyframes animateSuccessTip {\n 0% {\n width: 0;\n left: 1px;\n top: 19px; }\n 54% {\n width: 0;\n left: 1px;\n top: 19px; }\n 70% {\n width: 50px;\n left: -8px;\n top: 37px; }\n 84% {\n width: 17px;\n left: 21px;\n top: 48px; }\n 100% {\n width: 25px;\n left: 14px;\n top: 45px; } }\n\n@keyframes animateSuccessTip {\n 0% {\n width: 0;\n left: 1px;\n top: 19px; }\n 54% {\n width: 0;\n left: 1px;\n top: 19px; }\n 70% {\n width: 50px;\n left: -8px;\n top: 37px; }\n 84% {\n width: 17px;\n left: 21px;\n top: 48px; }\n 100% {\n width: 25px;\n left: 14px;\n top: 45px; } }\n\n@-webkit-keyframes animateSuccessLong {\n 0% {\n width: 0;\n right: 46px;\n top: 54px; }\n 65% {\n width: 0;\n right: 46px;\n top: 54px; }\n 84% {\n width: 55px;\n right: 0px;\n top: 35px; }\n 100% {\n width: 47px;\n right: 8px;\n top: 38px; } }\n\n@keyframes animateSuccessLong {\n 0% {\n width: 0;\n right: 46px;\n top: 54px; }\n 65% {\n width: 0;\n right: 46px;\n top: 54px; }\n 84% {\n width: 55px;\n right: 0px;\n top: 35px; }\n 100% {\n width: 47px;\n right: 8px;\n top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n 0% {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg); }\n 5% {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg); }\n 12% {\n transform: rotate(-405deg);\n -webkit-transform: rotate(-405deg); }\n 100% {\n transform: rotate(-405deg);\n -webkit-transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n 0% {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg); }\n 5% {\n transform: rotate(-45deg);\n -webkit-transform: rotate(-45deg); }\n 12% {\n transform: rotate(-405deg);\n -webkit-transform: rotate(-405deg); }\n 100% {\n transform: rotate(-405deg);\n -webkit-transform: rotate(-405deg); } }\n\n.animateSuccessTip {\n -webkit-animation: animateSuccessTip 0.75s;\n animation: animateSuccessTip 0.75s; }\n\n.animateSuccessLong {\n -webkit-animation: animateSuccessLong 0.75s;\n animation: animateSuccessLong 0.75s; }\n\n.sa-icon.sa-success.animate::after {\n -webkit-animation: rotatePlaceholder 4.25s ease-in;\n animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animateErrorIcon {\n 0% {\n transform: rotateX(100deg);\n -webkit-transform: rotateX(100deg);\n opacity: 0; }\n 100% {\n transform: rotateX(0deg);\n -webkit-transform: rotateX(0deg);\n opacity: 1; } }\n\n@keyframes animateErrorIcon {\n 0% {\n transform: rotateX(100deg);\n -webkit-transform: rotateX(100deg);\n opacity: 0; }\n 100% {\n transform: rotateX(0deg);\n -webkit-transform: rotateX(0deg);\n opacity: 1; } }\n\n.animateErrorIcon {\n -webkit-animation: animateErrorIcon 0.5s;\n animation: animateErrorIcon 0.5s; }\n\n@-webkit-keyframes animateXMark {\n 0% {\n transform: scale(0.4);\n -webkit-transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 50% {\n transform: scale(0.4);\n -webkit-transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 80% {\n transform: scale(1.15);\n -webkit-transform: scale(1.15);\n margin-top: -6px; }\n 100% {\n transform: scale(1);\n -webkit-transform: scale(1);\n margin-top: 0;\n opacity: 1; } }\n\n@keyframes animateXMark {\n 0% {\n transform: scale(0.4);\n -webkit-transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 50% {\n transform: scale(0.4);\n -webkit-transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 80% {\n transform: scale(1.15);\n -webkit-transform: scale(1.15);\n margin-top: -6px; }\n 100% {\n transform: scale(1);\n -webkit-transform: scale(1);\n margin-top: 0;\n opacity: 1; } }\n\n.animateXMark {\n -webkit-animation: animateXMark 0.5s;\n animation: animateXMark 0.5s; }\n\n@-webkit-keyframes pulseWarning {\n 0% {\n border-color: #F8D486; }\n 100% {\n border-color: #F8BB86; } }\n\n@keyframes pulseWarning {\n 0% {\n border-color: #F8D486; }\n 100% {\n border-color: #F8BB86; } }\n\n.pulseWarning {\n -webkit-animation: pulseWarning 0.75s infinite alternate;\n animation: pulseWarning 0.75s infinite alternate; }\n\n@-webkit-keyframes pulseWarningIns {\n 0% {\n background-color: #F8D486; }\n 100% {\n background-color: #F8BB86; } }\n\n@keyframes pulseWarningIns {\n 0% {\n background-color: #F8D486; }\n 100% {\n background-color: #F8BB86; } }\n\n.pulseWarningIns {\n -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n animation: pulseWarningIns 0.75s infinite alternate; }\n\n@-webkit-keyframes rotate-loading {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n@keyframes rotate-loading {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n/* Internet Explorer 9 has some special quirks that are fixed here */\n/* The icons are not animated. */\n/* This file is automatically merged into sweet-alert.min.js through Gulp */\n/* Error icon */\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n -ms-transform: rotate(-45deg) \\9; }\n\n/* Success icon */\n.sweet-alert .sa-icon.sa-success {\n border-color: transparent\\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n -ms-transform: rotate(-45deg) \\9; }\n\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n.la-ball-fall,\n.la-ball-fall > div {\n position: relative;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n.la-ball-fall {\n display: block;\n font-size: 0;\n color: #fff; }\n\n.la-ball-fall.la-dark {\n color: #333; }\n\n.la-ball-fall > div {\n display: inline-block;\n float: none;\n background-color: currentColor;\n border: 0 solid currentColor; }\n\n.la-ball-fall {\n width: 54px;\n height: 18px; }\n\n.la-ball-fall > div {\n width: 10px;\n height: 10px;\n margin: 4px;\n border-radius: 100%;\n opacity: 0;\n -webkit-animation: ball-fall 1s ease-in-out infinite;\n -moz-animation: ball-fall 1s ease-in-out infinite;\n -o-animation: ball-fall 1s ease-in-out infinite;\n animation: ball-fall 1s ease-in-out infinite; }\n\n.la-ball-fall > div:nth-child(1) {\n -webkit-animation-delay: -200ms;\n -moz-animation-delay: -200ms;\n -o-animation-delay: -200ms;\n animation-delay: -200ms; }\n\n.la-ball-fall > div:nth-child(2) {\n -webkit-animation-delay: -100ms;\n -moz-animation-delay: -100ms;\n -o-animation-delay: -100ms;\n animation-delay: -100ms; }\n\n.la-ball-fall > div:nth-child(3) {\n -webkit-animation-delay: 0ms;\n -moz-animation-delay: 0ms;\n -o-animation-delay: 0ms;\n animation-delay: 0ms; }\n\n.la-ball-fall.la-sm {\n width: 26px;\n height: 8px; }\n\n.la-ball-fall.la-sm > div {\n width: 4px;\n height: 4px;\n margin: 2px; }\n\n.la-ball-fall.la-2x {\n width: 108px;\n height: 36px; }\n\n.la-ball-fall.la-2x > div {\n width: 20px;\n height: 20px;\n margin: 8px; }\n\n.la-ball-fall.la-3x {\n width: 162px;\n height: 54px; }\n\n.la-ball-fall.la-3x > div {\n width: 30px;\n height: 30px;\n margin: 12px; }\n\n/*\n * Animation\n */\n@-webkit-keyframes ball-fall {\n 0% {\n opacity: 0;\n -webkit-transform: translateY(-145%);\n transform: translateY(-145%); }\n 10% {\n opacity: .5; }\n 20% {\n opacity: 1;\n -webkit-transform: translateY(0);\n transform: translateY(0); }\n 80% {\n opacity: 1;\n -webkit-transform: translateY(0);\n transform: translateY(0); }\n 90% {\n opacity: .5; }\n 100% {\n opacity: 0;\n -webkit-transform: translateY(145%);\n transform: translateY(145%); } }\n\n@-moz-keyframes ball-fall {\n 0% {\n opacity: 0;\n -moz-transform: translateY(-145%);\n transform: translateY(-145%); }\n 10% {\n opacity: .5; }\n 20% {\n opacity: 1;\n -moz-transform: translateY(0);\n transform: translateY(0); }\n 80% {\n opacity: 1;\n -moz-transform: translateY(0);\n transform: translateY(0); }\n 90% {\n opacity: .5; }\n 100% {\n opacity: 0;\n -moz-transform: translateY(145%);\n transform: translateY(145%); } }\n\n@-o-keyframes ball-fall {\n 0% {\n opacity: 0;\n -o-transform: translateY(-145%);\n transform: translateY(-145%); }\n 10% {\n opacity: .5; }\n 20% {\n opacity: 1;\n -o-transform: translateY(0);\n transform: translateY(0); }\n 80% {\n opacity: 1;\n -o-transform: translateY(0);\n transform: translateY(0); }\n 90% {\n opacity: .5; }\n 100% {\n opacity: 0;\n -o-transform: translateY(145%);\n transform: translateY(145%); } }\n\n@keyframes ball-fall {\n 0% {\n opacity: 0;\n -webkit-transform: translateY(-145%);\n -moz-transform: translateY(-145%);\n -o-transform: translateY(-145%);\n transform: translateY(-145%); }\n 10% {\n opacity: .5; }\n 20% {\n opacity: 1;\n -webkit-transform: translateY(0);\n -moz-transform: translateY(0);\n -o-transform: translateY(0);\n transform: translateY(0); }\n 80% {\n opacity: 1;\n -webkit-transform: translateY(0);\n -moz-transform: translateY(0);\n -o-transform: translateY(0);\n transform: translateY(0); }\n 90% {\n opacity: .5; }\n 100% {\n opacity: 0;\n -webkit-transform: translateY(145%);\n -moz-transform: translateY(145%);\n -o-transform: translateY(145%);\n transform: translateY(145%); } }\n","@font-face {\n font-family: octicons-link;\n src: url(data:font/woff;charset=utf-8;base64,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) format('woff');\n}\n\n.markdown-body {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n color: #333;\n font-family: \"Helvetica Neue\", Helvetica, \"Segoe UI\", Arial, freesans, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 16px;\n line-height: 1.6;\n word-wrap: break-word;\n}\n\n.markdown-body a {\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\n.markdown-body a:active,\n.markdown-body a:hover {\n outline-width: 0;\n}\n\n.markdown-body strong {\n font-weight: inherit;\n}\n\n.markdown-body strong {\n font-weight: bolder;\n}\n\n.markdown-body h1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n.markdown-body img {\n border-style: none;\n}\n\n.markdown-body svg:not(:root) {\n overflow: hidden;\n}\n\n.markdown-body code,\n.markdown-body kbd,\n.markdown-body pre {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n.markdown-body hr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\n.markdown-body input {\n font: inherit;\n margin: 0;\n}\n\n.markdown-body input {\n overflow: visible;\n}\n\n.markdown-body button:-moz-focusring,\n.markdown-body [type=\"button\"]:-moz-focusring,\n.markdown-body [type=\"reset\"]:-moz-focusring,\n.markdown-body [type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n.markdown-body [type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\n.markdown-body table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n.markdown-body td,\n.markdown-body th {\n padding: 0;\n}\n\n.markdown-body * {\n box-sizing: border-box;\n}\n\n.markdown-body input {\n font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n.markdown-body a {\n color: #4078c0;\n text-decoration: none;\n}\n\n.markdown-body a:hover,\n.markdown-body a:active {\n text-decoration: underline;\n}\n\n.markdown-body hr {\n height: 0;\n margin: 15px 0;\n overflow: hidden;\n background: transparent;\n border: 0;\n border-bottom: 1px solid #ddd;\n}\n\n.markdown-body hr::before {\n display: table;\n content: \"\";\n}\n\n.markdown-body hr::after {\n display: table;\n clear: both;\n content: \"\";\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 0;\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.markdown-body h1 {\n font-size: 30px;\n}\n\n.markdown-body h2 {\n font-size: 21px;\n}\n\n.markdown-body h3 {\n font-size: 16px;\n}\n\n.markdown-body h4 {\n font-size: 14px;\n}\n\n.markdown-body h5 {\n font-size: 12px;\n}\n\n.markdown-body h6 {\n font-size: 11px;\n}\n\n.markdown-body p {\n margin-top: 0;\n margin-bottom: 10px;\n}\n\n.markdown-body blockquote {\n margin: 0;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.markdown-body ol ol,\n.markdown-body ul ol {\n list-style-type: lower-roman;\n}\n\n.markdown-body ul ul ol,\n.markdown-body ul ol ol,\n.markdown-body ol ul ol,\n.markdown-body ol ol ol {\n list-style-type: lower-alpha;\n}\n\n.markdown-body dd {\n margin-left: 0;\n}\n\n.markdown-body code {\n font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n font-size: 12px;\n}\n\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 0;\n font: 12px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n}\n\n.markdown-body .pl-0 {\n padding-left: 0 !important;\n}\n\n.markdown-body .pl-1 {\n padding-left: 3px !important;\n}\n\n.markdown-body .pl-2 {\n padding-left: 6px !important;\n}\n\n.markdown-body .pl-3 {\n padding-left: 12px !important;\n}\n\n.markdown-body .pl-4 {\n padding-left: 24px !important;\n}\n\n.markdown-body .pl-5 {\n padding-left: 36px !important;\n}\n\n.markdown-body .pl-6 {\n padding-left: 48px !important;\n}\n\n.markdown-body .form-select::-ms-expand {\n opacity: 0;\n}\n\n.markdown-body:before {\n display: table;\n content: \"\";\n}\n\n.markdown-body:after {\n display: table;\n clear: both;\n content: \"\";\n}\n\n.markdown-body>*:first-child {\n margin-top: 0 !important;\n}\n\n.markdown-body>*:last-child {\n margin-bottom: 0 !important;\n}\n\n.markdown-body a:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\n.markdown-body .anchor {\n display: inline-block;\n padding-right: 2px;\n margin-left: -18px;\n}\n\n.markdown-body .anchor:focus {\n outline: none;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 1em;\n margin-bottom: 16px;\n font-weight: bold;\n line-height: 1.4;\n}\n\n.markdown-body h1 .octicon-link,\n.markdown-body h2 .octicon-link,\n.markdown-body h3 .octicon-link,\n.markdown-body h4 .octicon-link,\n.markdown-body h5 .octicon-link,\n.markdown-body h6 .octicon-link {\n color: #000;\n vertical-align: middle;\n visibility: hidden;\n}\n\n.markdown-body h1:hover .anchor,\n.markdown-body h2:hover .anchor,\n.markdown-body h3:hover .anchor,\n.markdown-body h4:hover .anchor,\n.markdown-body h5:hover .anchor,\n.markdown-body h6:hover .anchor {\n text-decoration: none;\n}\n\n.markdown-body h1:hover .anchor .octicon-link,\n.markdown-body h2:hover .anchor .octicon-link,\n.markdown-body h3:hover .anchor .octicon-link,\n.markdown-body h4:hover .anchor .octicon-link,\n.markdown-body h5:hover .anchor .octicon-link,\n.markdown-body h6:hover .anchor .octicon-link {\n visibility: visible;\n}\n\n.markdown-body h1 {\n padding-bottom: 0.3em;\n font-size: 2.25em;\n line-height: 1.2;\n border-bottom: 1px solid #eee;\n}\n\n.markdown-body h1 .anchor {\n line-height: 1;\n}\n\n.markdown-body h2 {\n padding-bottom: 0.3em;\n font-size: 1.75em;\n line-height: 1.225;\n border-bottom: 1px solid #eee;\n}\n\n.markdown-body h2 .anchor {\n line-height: 1;\n}\n\n.markdown-body h3 {\n font-size: 1.5em;\n line-height: 1.43;\n}\n\n.markdown-body h3 .anchor {\n line-height: 1.2;\n}\n\n.markdown-body h4 {\n font-size: 1.25em;\n}\n\n.markdown-body h4 .anchor {\n line-height: 1.2;\n}\n\n.markdown-body h5 {\n font-size: 1em;\n}\n\n.markdown-body h5 .anchor {\n line-height: 1.1;\n}\n\n.markdown-body h6 {\n font-size: 1em;\n color: #777;\n}\n\n.markdown-body h6 .anchor {\n line-height: 1.1;\n}\n\n.markdown-body p,\n.markdown-body blockquote,\n.markdown-body ul,\n.markdown-body ol,\n.markdown-body dl,\n.markdown-body table,\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 16px;\n}\n\n.markdown-body hr {\n height: 4px;\n padding: 0;\n margin: 16px 0;\n background-color: #e7e7e7;\n border: 0 none;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 2em;\n}\n\n.markdown-body ul ul,\n.markdown-body ul ol,\n.markdown-body ol ol,\n.markdown-body ol ul {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.markdown-body li>p {\n margin-top: 16px;\n}\n\n.markdown-body dl {\n padding: 0;\n}\n\n.markdown-body dl dt {\n padding: 0;\n margin-top: 16px;\n font-size: 1em;\n font-style: italic;\n font-weight: bold;\n}\n\n.markdown-body dl dd {\n padding: 0 16px;\n margin-bottom: 16px;\n}\n\n.markdown-body blockquote {\n padding: 0 15px;\n color: #777;\n border-left: 4px solid #ddd;\n}\n\n.markdown-body blockquote>:first-child {\n margin-top: 0;\n}\n\n.markdown-body blockquote>:last-child {\n margin-bottom: 0;\n}\n\n.markdown-body table {\n display: block;\n width: 100%;\n overflow: auto;\n word-break: normal;\n word-break: keep-all;\n}\n\n.markdown-body table th {\n font-weight: bold;\n}\n\n.markdown-body table th,\n.markdown-body table td {\n padding: 6px 13px;\n border: 1px solid #ddd;\n}\n\n.markdown-body table tr {\n background-color: #fff;\n border-top: 1px solid #ccc;\n}\n\n.markdown-body table tr:nth-child(2n) {\n background-color: #f8f8f8;\n}\n\n.markdown-body img {\n max-width: 100%;\n box-sizing: content-box;\n background-color: #fff;\n}\n\n.markdown-body code {\n padding: 0;\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(0,0,0,0.04);\n border-radius: 3px;\n}\n\n.markdown-body code:before,\n.markdown-body code:after {\n letter-spacing: -0.2em;\n content: \"\\00a0\";\n}\n\n.markdown-body pre>code {\n padding: 0;\n margin: 0;\n font-size: 100%;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n}\n\n.markdown-body .highlight {\n margin-bottom: 16px;\n}\n\n.markdown-body .highlight pre,\n.markdown-body pre {\n padding: 16px;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: #f7f7f7;\n border-radius: 3px;\n}\n\n.markdown-body .highlight pre {\n margin-bottom: 0;\n word-break: normal;\n}\n\n.markdown-body pre {\n word-wrap: normal;\n}\n\n.markdown-body pre code {\n display: inline;\n max-width: initial;\n padding: 0;\n margin: 0;\n overflow: initial;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0;\n}\n\n.markdown-body pre code:before,\n.markdown-body pre code:after {\n content: normal;\n}\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font-size: 11px;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb;\n}\n\n.markdown-body .pl-c {\n color: #969896;\n}\n\n.markdown-body .pl-c1,\n.markdown-body .pl-s .pl-v {\n color: #0086b3;\n}\n\n.markdown-body .pl-e,\n.markdown-body .pl-en {\n color: #795da3;\n}\n\n.markdown-body .pl-s .pl-s1,\n.markdown-body .pl-smi {\n color: #333;\n}\n\n.markdown-body .pl-ent {\n color: #63a35c;\n}\n\n.markdown-body .pl-k {\n color: #a71d5d;\n}\n\n.markdown-body .pl-pds,\n.markdown-body .pl-s,\n.markdown-body .pl-s .pl-pse .pl-s1,\n.markdown-body .pl-sr,\n.markdown-body .pl-sr .pl-cce,\n.markdown-body .pl-sr .pl-sra,\n.markdown-body .pl-sr .pl-sre {\n color: #183691;\n}\n\n.markdown-body .pl-v {\n color: #ed6a43;\n}\n\n.markdown-body .pl-id {\n color: #b52a1d;\n}\n\n.markdown-body .pl-ii {\n background-color: #b52a1d;\n color: #f8f8f8;\n}\n\n.markdown-body .pl-sr .pl-cce {\n color: #63a35c;\n font-weight: bold;\n}\n\n.markdown-body .pl-ml {\n color: #693a17;\n}\n\n.markdown-body .pl-mh,\n.markdown-body .pl-mh .pl-en,\n.markdown-body .pl-ms {\n color: #1d3e81;\n font-weight: bold;\n}\n\n.markdown-body .pl-mq {\n color: #008080;\n}\n\n.markdown-body .pl-mi {\n color: #333;\n font-style: italic;\n}\n\n.markdown-body .pl-mb {\n color: #333;\n font-weight: bold;\n}\n\n.markdown-body .pl-md {\n background-color: #ffecec;\n color: #bd2c00;\n}\n\n.markdown-body .pl-mi1 {\n background-color: #eaffea;\n color: #55a532;\n}\n\n.markdown-body .pl-mdr {\n color: #795da3;\n font-weight: bold;\n}\n\n.markdown-body .pl-mo {\n color: #1d3e81;\n}\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb;\n}\n\n.markdown-body .full-commit .btn-outline:not(:disabled):hover {\n color: #4078c0;\n border: 1px solid #4078c0;\n}\n\n.markdown-body :checked+.radio-label {\n position: relative;\n z-index: 1;\n border-color: #4078c0;\n}\n\n.markdown-body .octicon {\n display: inline-block;\n vertical-align: text-top;\n fill: currentColor;\n}\n\n.markdown-body .task-list-item {\n list-style-type: none;\n}\n\n.markdown-body .task-list-item+.task-list-item {\n margin-top: 3px;\n}\n\n.markdown-body .task-list-item input {\n margin: 0 0.2em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.markdown-body hr {\n border-bottom-color: #eee;\n}\n","@charset \"UTF-8\";\n/*!\n Ionicons, v2.0.1\n Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n https://twitter.com/benjsperry https://twitter.com/ionicframework\n MIT License: https://github.com/driftyco/ionicons\n\n Android-style icons originally built by Google’s\n Material Design Icons: https://github.com/google/material-design-icons\n used under CC BY http://creativecommons.org/licenses/by/4.0/\n Modified icons to fit ionicon’s grid from original.\n*/\n@font-face {\n font-family: \"Ionicons\";\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1\");\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1#iefix\") format(\"embedded-opentype\"), url(\"../../../fonts/ionicons.ttf?v=2.0.1\") format(\"truetype\"), url(\"../../../fonts/ionicons.woff?v=2.0.1\") format(\"woff\"), url(\"../../../fonts/ionicons.svg?v=2.0.1#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal; }\n\n.ion, .ionicons,\n.ion-alert:before,\n.ion-alert-circled:before,\n.ion-android-add:before,\n.ion-android-add-circle:before,\n.ion-android-alarm-clock:before,\n.ion-android-alert:before,\n.ion-android-apps:before,\n.ion-android-archive:before,\n.ion-android-arrow-back:before,\n.ion-android-arrow-down:before,\n.ion-android-arrow-dropdown:before,\n.ion-android-arrow-dropdown-circle:before,\n.ion-android-arrow-dropleft:before,\n.ion-android-arrow-dropleft-circle:before,\n.ion-android-arrow-dropright:before,\n.ion-android-arrow-dropright-circle:before,\n.ion-android-arrow-dropup:before,\n.ion-android-arrow-dropup-circle:before,\n.ion-android-arrow-forward:before,\n.ion-android-arrow-up:before,\n.ion-android-attach:before,\n.ion-android-bar:before,\n.ion-android-bicycle:before,\n.ion-android-boat:before,\n.ion-android-bookmark:before,\n.ion-android-bulb:before,\n.ion-android-bus:before,\n.ion-android-calendar:before,\n.ion-android-call:before,\n.ion-android-camera:before,\n.ion-android-cancel:before,\n.ion-android-car:before,\n.ion-android-cart:before,\n.ion-android-chat:before,\n.ion-android-checkbox:before,\n.ion-android-checkbox-blank:before,\n.ion-android-checkbox-outline:before,\n.ion-android-checkbox-outline-blank:before,\n.ion-android-checkmark-circle:before,\n.ion-android-clipboard:before,\n.ion-android-close:before,\n.ion-android-cloud:before,\n.ion-android-cloud-circle:before,\n.ion-android-cloud-done:before,\n.ion-android-cloud-outline:before,\n.ion-android-color-palette:before,\n.ion-android-compass:before,\n.ion-android-contact:before,\n.ion-android-contacts:before,\n.ion-android-contract:before,\n.ion-android-create:before,\n.ion-android-delete:before,\n.ion-android-desktop:before,\n.ion-android-document:before,\n.ion-android-done:before,\n.ion-android-done-all:before,\n.ion-android-download:before,\n.ion-android-drafts:before,\n.ion-android-exit:before,\n.ion-android-expand:before,\n.ion-android-favorite:before,\n.ion-android-favorite-outline:before,\n.ion-android-film:before,\n.ion-android-folder:before,\n.ion-android-folder-open:before,\n.ion-android-funnel:before,\n.ion-android-globe:before,\n.ion-android-hand:before,\n.ion-android-hangout:before,\n.ion-android-happy:before,\n.ion-android-home:before,\n.ion-android-image:before,\n.ion-android-laptop:before,\n.ion-android-list:before,\n.ion-android-locate:before,\n.ion-android-lock:before,\n.ion-android-mail:before,\n.ion-android-map:before,\n.ion-android-menu:before,\n.ion-android-microphone:before,\n.ion-android-microphone-off:before,\n.ion-android-more-horizontal:before,\n.ion-android-more-vertical:before,\n.ion-android-navigate:before,\n.ion-android-notifications:before,\n.ion-android-notifications-none:before,\n.ion-android-notifications-off:before,\n.ion-android-open:before,\n.ion-android-options:before,\n.ion-android-people:before,\n.ion-android-person:before,\n.ion-android-person-add:before,\n.ion-android-phone-landscape:before,\n.ion-android-phone-portrait:before,\n.ion-android-pin:before,\n.ion-android-plane:before,\n.ion-android-playstore:before,\n.ion-android-print:before,\n.ion-android-radio-button-off:before,\n.ion-android-radio-button-on:before,\n.ion-android-refresh:before,\n.ion-android-remove:before,\n.ion-android-remove-circle:before,\n.ion-android-restaurant:before,\n.ion-android-sad:before,\n.ion-android-search:before,\n.ion-android-send:before,\n.ion-android-settings:before,\n.ion-android-share:before,\n.ion-android-share-alt:before,\n.ion-android-star:before,\n.ion-android-star-half:before,\n.ion-android-star-outline:before,\n.ion-android-stopwatch:before,\n.ion-android-subway:before,\n.ion-android-sunny:before,\n.ion-android-sync:before,\n.ion-android-textsms:before,\n.ion-android-time:before,\n.ion-android-train:before,\n.ion-android-unlock:before,\n.ion-android-upload:before,\n.ion-android-volume-down:before,\n.ion-android-volume-mute:before,\n.ion-android-volume-off:before,\n.ion-android-volume-up:before,\n.ion-android-walk:before,\n.ion-android-warning:before,\n.ion-android-watch:before,\n.ion-android-wifi:before,\n.ion-aperture:before,\n.ion-archive:before,\n.ion-arrow-down-a:before,\n.ion-arrow-down-b:before,\n.ion-arrow-down-c:before,\n.ion-arrow-expand:before,\n.ion-arrow-graph-down-left:before,\n.ion-arrow-graph-down-right:before,\n.ion-arrow-graph-up-left:before,\n.ion-arrow-graph-up-right:before,\n.ion-arrow-left-a:before,\n.ion-arrow-left-b:before,\n.ion-arrow-left-c:before,\n.ion-arrow-move:before,\n.ion-arrow-resize:before,\n.ion-arrow-return-left:before,\n.ion-arrow-return-right:before,\n.ion-arrow-right-a:before,\n.ion-arrow-right-b:before,\n.ion-arrow-right-c:before,\n.ion-arrow-shrink:before,\n.ion-arrow-swap:before,\n.ion-arrow-up-a:before,\n.ion-arrow-up-b:before,\n.ion-arrow-up-c:before,\n.ion-asterisk:before,\n.ion-at:before,\n.ion-backspace:before,\n.ion-backspace-outline:before,\n.ion-bag:before,\n.ion-battery-charging:before,\n.ion-battery-empty:before,\n.ion-battery-full:before,\n.ion-battery-half:before,\n.ion-battery-low:before,\n.ion-beaker:before,\n.ion-beer:before,\n.ion-bluetooth:before,\n.ion-bonfire:before,\n.ion-bookmark:before,\n.ion-bowtie:before,\n.ion-briefcase:before,\n.ion-bug:before,\n.ion-calculator:before,\n.ion-calendar:before,\n.ion-camera:before,\n.ion-card:before,\n.ion-cash:before,\n.ion-chatbox:before,\n.ion-chatbox-working:before,\n.ion-chatboxes:before,\n.ion-chatbubble:before,\n.ion-chatbubble-working:before,\n.ion-chatbubbles:before,\n.ion-checkmark:before,\n.ion-checkmark-circled:before,\n.ion-checkmark-round:before,\n.ion-chevron-down:before,\n.ion-chevron-left:before,\n.ion-chevron-right:before,\n.ion-chevron-up:before,\n.ion-clipboard:before,\n.ion-clock:before,\n.ion-close:before,\n.ion-close-circled:before,\n.ion-close-round:before,\n.ion-closed-captioning:before,\n.ion-cloud:before,\n.ion-code:before,\n.ion-code-download:before,\n.ion-code-working:before,\n.ion-coffee:before,\n.ion-compass:before,\n.ion-compose:before,\n.ion-connection-bars:before,\n.ion-contrast:before,\n.ion-crop:before,\n.ion-cube:before,\n.ion-disc:before,\n.ion-document:before,\n.ion-document-text:before,\n.ion-drag:before,\n.ion-earth:before,\n.ion-easel:before,\n.ion-edit:before,\n.ion-egg:before,\n.ion-eject:before,\n.ion-email:before,\n.ion-email-unread:before,\n.ion-erlenmeyer-flask:before,\n.ion-erlenmeyer-flask-bubbles:before,\n.ion-eye:before,\n.ion-eye-disabled:before,\n.ion-female:before,\n.ion-filing:before,\n.ion-film-marker:before,\n.ion-fireball:before,\n.ion-flag:before,\n.ion-flame:before,\n.ion-flash:before,\n.ion-flash-off:before,\n.ion-folder:before,\n.ion-fork:before,\n.ion-fork-repo:before,\n.ion-forward:before,\n.ion-funnel:before,\n.ion-gear-a:before,\n.ion-gear-b:before,\n.ion-grid:before,\n.ion-hammer:before,\n.ion-happy:before,\n.ion-happy-outline:before,\n.ion-headphone:before,\n.ion-heart:before,\n.ion-heart-broken:before,\n.ion-help:before,\n.ion-help-buoy:before,\n.ion-help-circled:before,\n.ion-home:before,\n.ion-icecream:before,\n.ion-image:before,\n.ion-images:before,\n.ion-information:before,\n.ion-information-circled:before,\n.ion-ionic:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-americanfootball:before,\n.ion-ios-americanfootball-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-left:before,\n.ion-ios-arrow-right:before,\n.ion-ios-arrow-thin-down:before,\n.ion-ios-arrow-thin-left:before,\n.ion-ios-arrow-thin-right:before,\n.ion-ios-arrow-thin-up:before,\n.ion-ios-arrow-up:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-bell:before,\n.ion-ios-bell-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bolt:before,\n.ion-ios-bolt-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-box:before,\n.ion-ios-box-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubble:before,\n.ion-ios-chatbubble-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-empty:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-circle-filled:before,\n.ion-ios-circle-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-empty:before,\n.ion-ios-close-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compose:before,\n.ion-ios-compose-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-strong:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-drag:before,\n.ion-ios-email:before,\n.ion-ios-email-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-gear:before,\n.ion-ios-gear-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-grid-view:before,\n.ion-ios-grid-view-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-empty:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-empty:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-lightbulb:before,\n.ion-ios-lightbulb-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-outline:before,\n.ion-ios-location:before,\n.ion-ios-location-outline:before,\n.ion-ios-locked:before,\n.ion-ios-locked-outline:before,\n.ion-ios-loop:before,\n.ion-ios-loop-strong:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-outline:before,\n.ion-ios-minus:before,\n.ion-ios-minus-empty:before,\n.ion-ios-minus-outline:before,\n.ion-ios-monitor:before,\n.ion-ios-monitor-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-notes:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paperplane:before,\n.ion-ios-paperplane-outline:before,\n.ion-ios-partlysunny:before,\n.ion-ios-partlysunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-outline:before,\n.ion-ios-personadd:before,\n.ion-ios-personadd-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-plus:before,\n.ion-ios-plus-empty:before,\n.ion-ios-plus-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-printer:before,\n.ion-ios-printer-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-strong:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-empty:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-reload:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-strong:before,\n.ion-ios-settings:before,\n.ion-ios-settings-strong:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-strong:before,\n.ion-ios-skipbackward:before,\n.ion-ios-skipbackward-outline:before,\n.ion-ios-skipforward:before,\n.ion-ios-skipforward-outline:before,\n.ion-ios-snowy:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-telephone:before,\n.ion-ios-telephone-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-toggle:before,\n.ion-ios-toggle-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlocked:before,\n.ion-ios-unlocked-outline:before,\n.ion-ios-upload:before,\n.ion-ios-upload-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-high:before,\n.ion-ios-volume-low:before,\n.ion-ios-wineglass:before,\n.ion-ios-wineglass-outline:before,\n.ion-ios-world:before,\n.ion-ios-world-outline:before,\n.ion-ipad:before,\n.ion-iphone:before,\n.ion-ipod:before,\n.ion-jet:before,\n.ion-key:before,\n.ion-knife:before,\n.ion-laptop:before,\n.ion-leaf:before,\n.ion-levels:before,\n.ion-lightbulb:before,\n.ion-link:before,\n.ion-load-a:before,\n.ion-load-b:before,\n.ion-load-c:before,\n.ion-load-d:before,\n.ion-location:before,\n.ion-lock-combination:before,\n.ion-locked:before,\n.ion-log-in:before,\n.ion-log-out:before,\n.ion-loop:before,\n.ion-magnet:before,\n.ion-male:before,\n.ion-man:before,\n.ion-map:before,\n.ion-medkit:before,\n.ion-merge:before,\n.ion-mic-a:before,\n.ion-mic-b:before,\n.ion-mic-c:before,\n.ion-minus:before,\n.ion-minus-circled:before,\n.ion-minus-round:before,\n.ion-model-s:before,\n.ion-monitor:before,\n.ion-more:before,\n.ion-mouse:before,\n.ion-music-note:before,\n.ion-navicon:before,\n.ion-navicon-round:before,\n.ion-navigate:before,\n.ion-network:before,\n.ion-no-smoking:before,\n.ion-nuclear:before,\n.ion-outlet:before,\n.ion-paintbrush:before,\n.ion-paintbucket:before,\n.ion-paper-airplane:before,\n.ion-paperclip:before,\n.ion-pause:before,\n.ion-person:before,\n.ion-person-add:before,\n.ion-person-stalker:before,\n.ion-pie-graph:before,\n.ion-pin:before,\n.ion-pinpoint:before,\n.ion-pizza:before,\n.ion-plane:before,\n.ion-planet:before,\n.ion-play:before,\n.ion-playstation:before,\n.ion-plus:before,\n.ion-plus-circled:before,\n.ion-plus-round:before,\n.ion-podium:before,\n.ion-pound:before,\n.ion-power:before,\n.ion-pricetag:before,\n.ion-pricetags:before,\n.ion-printer:before,\n.ion-pull-request:before,\n.ion-qr-scanner:before,\n.ion-quote:before,\n.ion-radio-waves:before,\n.ion-record:before,\n.ion-refresh:before,\n.ion-reply:before,\n.ion-reply-all:before,\n.ion-ribbon-a:before,\n.ion-ribbon-b:before,\n.ion-sad:before,\n.ion-sad-outline:before,\n.ion-scissors:before,\n.ion-search:before,\n.ion-settings:before,\n.ion-share:before,\n.ion-shuffle:before,\n.ion-skip-backward:before,\n.ion-skip-forward:before,\n.ion-social-android:before,\n.ion-social-android-outline:before,\n.ion-social-angular:before,\n.ion-social-angular-outline:before,\n.ion-social-apple:before,\n.ion-social-apple-outline:before,\n.ion-social-bitcoin:before,\n.ion-social-bitcoin-outline:before,\n.ion-social-buffer:before,\n.ion-social-buffer-outline:before,\n.ion-social-chrome:before,\n.ion-social-chrome-outline:before,\n.ion-social-codepen:before,\n.ion-social-codepen-outline:before,\n.ion-social-css3:before,\n.ion-social-css3-outline:before,\n.ion-social-designernews:before,\n.ion-social-designernews-outline:before,\n.ion-social-dribbble:before,\n.ion-social-dribbble-outline:before,\n.ion-social-dropbox:before,\n.ion-social-dropbox-outline:before,\n.ion-social-euro:before,\n.ion-social-euro-outline:before,\n.ion-social-facebook:before,\n.ion-social-facebook-outline:before,\n.ion-social-foursquare:before,\n.ion-social-foursquare-outline:before,\n.ion-social-freebsd-devil:before,\n.ion-social-github:before,\n.ion-social-github-outline:before,\n.ion-social-google:before,\n.ion-social-google-outline:before,\n.ion-social-googleplus:before,\n.ion-social-googleplus-outline:before,\n.ion-social-hackernews:before,\n.ion-social-hackernews-outline:before,\n.ion-social-html5:before,\n.ion-social-html5-outline:before,\n.ion-social-instagram:before,\n.ion-social-instagram-outline:before,\n.ion-social-javascript:before,\n.ion-social-javascript-outline:before,\n.ion-social-linkedin:before,\n.ion-social-linkedin-outline:before,\n.ion-social-markdown:before,\n.ion-social-nodejs:before,\n.ion-social-octocat:before,\n.ion-social-pinterest:before,\n.ion-social-pinterest-outline:before,\n.ion-social-python:before,\n.ion-social-reddit:before,\n.ion-social-reddit-outline:before,\n.ion-social-rss:before,\n.ion-social-rss-outline:before,\n.ion-social-sass:before,\n.ion-social-skype:before,\n.ion-social-skype-outline:before,\n.ion-social-snapchat:before,\n.ion-social-snapchat-outline:before,\n.ion-social-tumblr:before,\n.ion-social-tumblr-outline:before,\n.ion-social-tux:before,\n.ion-social-twitch:before,\n.ion-social-twitch-outline:before,\n.ion-social-twitter:before,\n.ion-social-twitter-outline:before,\n.ion-social-usd:before,\n.ion-social-usd-outline:before,\n.ion-social-vimeo:before,\n.ion-social-vimeo-outline:before,\n.ion-social-whatsapp:before,\n.ion-social-whatsapp-outline:before,\n.ion-social-windows:before,\n.ion-social-windows-outline:before,\n.ion-social-wordpress:before,\n.ion-social-wordpress-outline:before,\n.ion-social-yahoo:before,\n.ion-social-yahoo-outline:before,\n.ion-social-yen:before,\n.ion-social-yen-outline:before,\n.ion-social-youtube:before,\n.ion-social-youtube-outline:before,\n.ion-soup-can:before,\n.ion-soup-can-outline:before,\n.ion-speakerphone:before,\n.ion-speedometer:before,\n.ion-spoon:before,\n.ion-star:before,\n.ion-stats-bars:before,\n.ion-steam:before,\n.ion-stop:before,\n.ion-thermometer:before,\n.ion-thumbsdown:before,\n.ion-thumbsup:before,\n.ion-toggle:before,\n.ion-toggle-filled:before,\n.ion-transgender:before,\n.ion-trash-a:before,\n.ion-trash-b:before,\n.ion-trophy:before,\n.ion-tshirt:before,\n.ion-tshirt-outline:before,\n.ion-umbrella:before,\n.ion-university:before,\n.ion-unlocked:before,\n.ion-upload:before,\n.ion-usb:before,\n.ion-videocamera:before,\n.ion-volume-high:before,\n.ion-volume-low:before,\n.ion-volume-medium:before,\n.ion-volume-mute:before,\n.ion-wand:before,\n.ion-waterdrop:before,\n.ion-wifi:before,\n.ion-wineglass:before,\n.ion-woman:before,\n.ion-wrench:before,\n.ion-xbox:before {\n display: inline-block;\n font-family: \"Ionicons\";\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.ion-alert:before {\n content: \"\"; }\n\n.ion-alert-circled:before {\n content: \"\"; }\n\n.ion-android-add:before {\n content: \"\"; }\n\n.ion-android-add-circle:before {\n content: \"\"; }\n\n.ion-android-alarm-clock:before {\n content: \"\"; }\n\n.ion-android-alert:before {\n content: \"\"; }\n\n.ion-android-apps:before {\n content: \"\"; }\n\n.ion-android-archive:before {\n content: \"\"; }\n\n.ion-android-arrow-back:before {\n content: \"\"; }\n\n.ion-android-arrow-down:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-forward:before {\n content: \"\"; }\n\n.ion-android-arrow-up:before {\n content: \"\"; }\n\n.ion-android-attach:before {\n content: \"\"; }\n\n.ion-android-bar:before {\n content: \"\"; }\n\n.ion-android-bicycle:before {\n content: \"\"; }\n\n.ion-android-boat:before {\n content: \"\"; }\n\n.ion-android-bookmark:before {\n content: \"\"; }\n\n.ion-android-bulb:before {\n content: \"\"; }\n\n.ion-android-bus:before {\n content: \"\"; }\n\n.ion-android-calendar:before {\n content: \"\"; }\n\n.ion-android-call:before {\n content: \"\"; }\n\n.ion-android-camera:before {\n content: \"\"; }\n\n.ion-android-cancel:before {\n content: \"\"; }\n\n.ion-android-car:before {\n content: \"\"; }\n\n.ion-android-cart:before {\n content: \"\"; }\n\n.ion-android-chat:before {\n content: \"\"; }\n\n.ion-android-checkbox:before {\n content: \"\"; }\n\n.ion-android-checkbox-blank:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline-blank:before {\n content: \"\"; }\n\n.ion-android-checkmark-circle:before {\n content: \"\"; }\n\n.ion-android-clipboard:before {\n content: \"\"; }\n\n.ion-android-close:before {\n content: \"\"; }\n\n.ion-android-cloud:before {\n content: \"\"; }\n\n.ion-android-cloud-circle:before {\n content: \"\"; }\n\n.ion-android-cloud-done:before {\n content: \"\"; }\n\n.ion-android-cloud-outline:before {\n content: \"\"; }\n\n.ion-android-color-palette:before {\n content: \"\"; }\n\n.ion-android-compass:before {\n content: \"\"; }\n\n.ion-android-contact:before {\n content: \"\"; }\n\n.ion-android-contacts:before {\n content: \"\"; }\n\n.ion-android-contract:before {\n content: \"\"; }\n\n.ion-android-create:before {\n content: \"\"; }\n\n.ion-android-delete:before {\n content: \"\"; }\n\n.ion-android-desktop:before {\n content: \"\"; }\n\n.ion-android-document:before {\n content: \"\"; }\n\n.ion-android-done:before {\n content: \"\"; }\n\n.ion-android-done-all:before {\n content: \"\"; }\n\n.ion-android-download:before {\n content: \"\"; }\n\n.ion-android-drafts:before {\n content: \"\"; }\n\n.ion-android-exit:before {\n content: \"\"; }\n\n.ion-android-expand:before {\n content: \"\"; }\n\n.ion-android-favorite:before {\n content: \"\"; }\n\n.ion-android-favorite-outline:before {\n content: \"\"; }\n\n.ion-android-film:before {\n content: \"\"; }\n\n.ion-android-folder:before {\n content: \"\"; }\n\n.ion-android-folder-open:before {\n content: \"\"; }\n\n.ion-android-funnel:before {\n content: \"\"; }\n\n.ion-android-globe:before {\n content: \"\"; }\n\n.ion-android-hand:before {\n content: \"\"; }\n\n.ion-android-hangout:before {\n content: \"\"; }\n\n.ion-android-happy:before {\n content: \"\"; }\n\n.ion-android-home:before {\n content: \"\"; }\n\n.ion-android-image:before {\n content: \"\"; }\n\n.ion-android-laptop:before {\n content: \"\"; }\n\n.ion-android-list:before {\n content: \"\"; }\n\n.ion-android-locate:before {\n content: \"\"; }\n\n.ion-android-lock:before {\n content: \"\"; }\n\n.ion-android-mail:before {\n content: \"\"; }\n\n.ion-android-map:before {\n content: \"\"; }\n\n.ion-android-menu:before {\n content: \"\"; }\n\n.ion-android-microphone:before {\n content: \"\"; }\n\n.ion-android-microphone-off:before {\n content: \"\"; }\n\n.ion-android-more-horizontal:before {\n content: \"\"; }\n\n.ion-android-more-vertical:before {\n content: \"\"; }\n\n.ion-android-navigate:before {\n content: \"\"; }\n\n.ion-android-notifications:before {\n content: \"\"; }\n\n.ion-android-notifications-none:before {\n content: \"\"; }\n\n.ion-android-notifications-off:before {\n content: \"\"; }\n\n.ion-android-open:before {\n content: \"\"; }\n\n.ion-android-options:before {\n content: \"\"; }\n\n.ion-android-people:before {\n content: \"\"; }\n\n.ion-android-person:before {\n content: \"\"; }\n\n.ion-android-person-add:before {\n content: \"\"; }\n\n.ion-android-phone-landscape:before {\n content: \"\"; }\n\n.ion-android-phone-portrait:before {\n content: \"\"; }\n\n.ion-android-pin:before {\n content: \"\"; }\n\n.ion-android-plane:before {\n content: \"\"; }\n\n.ion-android-playstore:before {\n content: \"\"; }\n\n.ion-android-print:before {\n content: \"\"; }\n\n.ion-android-radio-button-off:before {\n content: \"\"; }\n\n.ion-android-radio-button-on:before {\n content: \"\"; }\n\n.ion-android-refresh:before {\n content: \"\"; }\n\n.ion-android-remove:before {\n content: \"\"; }\n\n.ion-android-remove-circle:before {\n content: \"\"; }\n\n.ion-android-restaurant:before {\n content: \"\"; }\n\n.ion-android-sad:before {\n content: \"\"; }\n\n.ion-android-search:before {\n content: \"\"; }\n\n.ion-android-send:before {\n content: \"\"; }\n\n.ion-android-settings:before {\n content: \"\"; }\n\n.ion-android-share:before {\n content: \"\"; }\n\n.ion-android-share-alt:before {\n content: \"\"; }\n\n.ion-android-star:before {\n content: \"\"; }\n\n.ion-android-star-half:before {\n content: \"\"; }\n\n.ion-android-star-outline:before {\n content: \"\"; }\n\n.ion-android-stopwatch:before {\n content: \"\"; }\n\n.ion-android-subway:before {\n content: \"\"; }\n\n.ion-android-sunny:before {\n content: \"\"; }\n\n.ion-android-sync:before {\n content: \"\"; }\n\n.ion-android-textsms:before {\n content: \"\"; }\n\n.ion-android-time:before {\n content: \"\"; }\n\n.ion-android-train:before {\n content: \"\"; }\n\n.ion-android-unlock:before {\n content: \"\"; }\n\n.ion-android-upload:before {\n content: \"\"; }\n\n.ion-android-volume-down:before {\n content: \"\"; }\n\n.ion-android-volume-mute:before {\n content: \"\"; }\n\n.ion-android-volume-off:before {\n content: \"\"; }\n\n.ion-android-volume-up:before {\n content: \"\"; }\n\n.ion-android-walk:before {\n content: \"\"; }\n\n.ion-android-warning:before {\n content: \"\"; }\n\n.ion-android-watch:before {\n content: \"\"; }\n\n.ion-android-wifi:before {\n content: \"\"; }\n\n.ion-aperture:before {\n content: \"\"; }\n\n.ion-archive:before {\n content: \"\"; }\n\n.ion-arrow-down-a:before {\n content: \"\"; }\n\n.ion-arrow-down-b:before {\n content: \"\"; }\n\n.ion-arrow-down-c:before {\n content: \"\"; }\n\n.ion-arrow-expand:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-right:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-right:before {\n content: \"\"; }\n\n.ion-arrow-left-a:before {\n content: \"\"; }\n\n.ion-arrow-left-b:before {\n content: \"\"; }\n\n.ion-arrow-left-c:before {\n content: \"\"; }\n\n.ion-arrow-move:before {\n content: \"\"; }\n\n.ion-arrow-resize:before {\n content: \"\"; }\n\n.ion-arrow-return-left:before {\n content: \"\"; }\n\n.ion-arrow-return-right:before {\n content: \"\"; }\n\n.ion-arrow-right-a:before {\n content: \"\"; }\n\n.ion-arrow-right-b:before {\n content: \"\"; }\n\n.ion-arrow-right-c:before {\n content: \"\"; }\n\n.ion-arrow-shrink:before {\n content: \"\"; }\n\n.ion-arrow-swap:before {\n content: \"\"; }\n\n.ion-arrow-up-a:before {\n content: \"\"; }\n\n.ion-arrow-up-b:before {\n content: \"\"; }\n\n.ion-arrow-up-c:before {\n content: \"\"; }\n\n.ion-asterisk:before {\n content: \"\"; }\n\n.ion-at:before {\n content: \"\"; }\n\n.ion-backspace:before {\n content: \"\"; }\n\n.ion-backspace-outline:before {\n content: \"\"; }\n\n.ion-bag:before {\n content: \"\"; }\n\n.ion-battery-charging:before {\n content: \"\"; }\n\n.ion-battery-empty:before {\n content: \"\"; }\n\n.ion-battery-full:before {\n content: \"\"; }\n\n.ion-battery-half:before {\n content: \"\"; }\n\n.ion-battery-low:before {\n content: \"\"; }\n\n.ion-beaker:before {\n content: \"\"; }\n\n.ion-beer:before {\n content: \"\"; }\n\n.ion-bluetooth:before {\n content: \"\"; }\n\n.ion-bonfire:before {\n content: \"\"; }\n\n.ion-bookmark:before {\n content: \"\"; }\n\n.ion-bowtie:before {\n content: \"\"; }\n\n.ion-briefcase:before {\n content: \"\"; }\n\n.ion-bug:before {\n content: \"\"; }\n\n.ion-calculator:before {\n content: \"\"; }\n\n.ion-calendar:before {\n content: \"\"; }\n\n.ion-camera:before {\n content: \"\"; }\n\n.ion-card:before {\n content: \"\"; }\n\n.ion-cash:before {\n content: \"\"; }\n\n.ion-chatbox:before {\n content: \"\"; }\n\n.ion-chatbox-working:before {\n content: \"\"; }\n\n.ion-chatboxes:before {\n content: \"\"; }\n\n.ion-chatbubble:before {\n content: \"\"; }\n\n.ion-chatbubble-working:before {\n content: \"\"; }\n\n.ion-chatbubbles:before {\n content: \"\"; }\n\n.ion-checkmark:before {\n content: \"\"; }\n\n.ion-checkmark-circled:before {\n content: \"\"; }\n\n.ion-checkmark-round:before {\n content: \"\"; }\n\n.ion-chevron-down:before {\n content: \"\"; }\n\n.ion-chevron-left:before {\n content: \"\"; }\n\n.ion-chevron-right:before {\n content: \"\"; }\n\n.ion-chevron-up:before {\n content: \"\"; }\n\n.ion-clipboard:before {\n content: \"\"; }\n\n.ion-clock:before {\n content: \"\"; }\n\n.ion-close:before {\n content: \"\"; }\n\n.ion-close-circled:before {\n content: \"\"; }\n\n.ion-close-round:before {\n content: \"\"; }\n\n.ion-closed-captioning:before {\n content: \"\"; }\n\n.ion-cloud:before {\n content: \"\"; }\n\n.ion-code:before {\n content: \"\"; }\n\n.ion-code-download:before {\n content: \"\"; }\n\n.ion-code-working:before {\n content: \"\"; }\n\n.ion-coffee:before {\n content: \"\"; }\n\n.ion-compass:before {\n content: \"\"; }\n\n.ion-compose:before {\n content: \"\"; }\n\n.ion-connection-bars:before {\n content: \"\"; }\n\n.ion-contrast:before {\n content: \"\"; }\n\n.ion-crop:before {\n content: \"\"; }\n\n.ion-cube:before {\n content: \"\"; }\n\n.ion-disc:before {\n content: \"\"; }\n\n.ion-document:before {\n content: \"\"; }\n\n.ion-document-text:before {\n content: \"\"; }\n\n.ion-drag:before {\n content: \"\"; }\n\n.ion-earth:before {\n content: \"\"; }\n\n.ion-easel:before {\n content: \"\"; }\n\n.ion-edit:before {\n content: \"\"; }\n\n.ion-egg:before {\n content: \"\"; }\n\n.ion-eject:before {\n content: \"\"; }\n\n.ion-email:before {\n content: \"\"; }\n\n.ion-email-unread:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask-bubbles:before {\n content: \"\"; }\n\n.ion-eye:before {\n content: \"\"; }\n\n.ion-eye-disabled:before {\n content: \"\"; }\n\n.ion-female:before {\n content: \"\"; }\n\n.ion-filing:before {\n content: \"\"; }\n\n.ion-film-marker:before {\n content: \"\"; }\n\n.ion-fireball:before {\n content: \"\"; }\n\n.ion-flag:before {\n content: \"\"; }\n\n.ion-flame:before {\n content: \"\"; }\n\n.ion-flash:before {\n content: \"\"; }\n\n.ion-flash-off:before {\n content: \"\"; }\n\n.ion-folder:before {\n content: \"\"; }\n\n.ion-fork:before {\n content: \"\"; }\n\n.ion-fork-repo:before {\n content: \"\"; }\n\n.ion-forward:before {\n content: \"\"; }\n\n.ion-funnel:before {\n content: \"\"; }\n\n.ion-gear-a:before {\n content: \"\"; }\n\n.ion-gear-b:before {\n content: \"\"; }\n\n.ion-grid:before {\n content: \"\"; }\n\n.ion-hammer:before {\n content: \"\"; }\n\n.ion-happy:before {\n content: \"\"; }\n\n.ion-happy-outline:before {\n content: \"\"; }\n\n.ion-headphone:before {\n content: \"\"; }\n\n.ion-heart:before {\n content: \"\"; }\n\n.ion-heart-broken:before {\n content: \"\"; }\n\n.ion-help:before {\n content: \"\"; }\n\n.ion-help-buoy:before {\n content: \"\"; }\n\n.ion-help-circled:before {\n content: \"\"; }\n\n.ion-home:before {\n content: \"\"; }\n\n.ion-icecream:before {\n content: \"\"; }\n\n.ion-image:before {\n content: \"\"; }\n\n.ion-images:before {\n content: \"\"; }\n\n.ion-information:before {\n content: \"\"; }\n\n.ion-information-circled:before {\n content: \"\"; }\n\n.ion-ionic:before {\n content: \"\"; }\n\n.ion-ios-alarm:before {\n content: \"\"; }\n\n.ion-ios-alarm-outline:before {\n content: \"\"; }\n\n.ion-ios-albums:before {\n content: \"\"; }\n\n.ion-ios-albums-outline:before {\n content: \"\"; }\n\n.ion-ios-americanfootball:before {\n content: \"\"; }\n\n.ion-ios-americanfootball-outline:before {\n content: \"\"; }\n\n.ion-ios-analytics:before {\n content: \"\"; }\n\n.ion-ios-analytics-outline:before {\n content: \"\"; }\n\n.ion-ios-arrow-back:before {\n content: \"\"; }\n\n.ion-ios-arrow-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-forward:before {\n content: \"\"; }\n\n.ion-ios-arrow-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-up:before {\n content: \"\"; }\n\n.ion-ios-arrow-up:before {\n content: \"\"; }\n\n.ion-ios-at:before {\n content: \"\"; }\n\n.ion-ios-at-outline:before {\n content: \"\"; }\n\n.ion-ios-barcode:before {\n content: \"\"; }\n\n.ion-ios-barcode-outline:before {\n content: \"\"; }\n\n.ion-ios-baseball:before {\n content: \"\"; }\n\n.ion-ios-baseball-outline:before {\n content: \"\"; }\n\n.ion-ios-basketball:before {\n content: \"\"; }\n\n.ion-ios-basketball-outline:before {\n content: \"\"; }\n\n.ion-ios-bell:before {\n content: \"\"; }\n\n.ion-ios-bell-outline:before {\n content: \"\"; }\n\n.ion-ios-body:before {\n content: \"\"; }\n\n.ion-ios-body-outline:before {\n content: \"\"; }\n\n.ion-ios-bolt:before {\n content: \"\"; }\n\n.ion-ios-bolt-outline:before {\n content: \"\"; }\n\n.ion-ios-book:before {\n content: \"\"; }\n\n.ion-ios-book-outline:before {\n content: \"\"; }\n\n.ion-ios-bookmarks:before {\n content: \"\"; }\n\n.ion-ios-bookmarks-outline:before {\n content: \"\"; }\n\n.ion-ios-box:before {\n content: \"\"; }\n\n.ion-ios-box-outline:before {\n content: \"\"; }\n\n.ion-ios-briefcase:before {\n content: \"\"; }\n\n.ion-ios-briefcase-outline:before {\n content: \"\"; }\n\n.ion-ios-browsers:before {\n content: \"\"; }\n\n.ion-ios-browsers-outline:before {\n content: \"\"; }\n\n.ion-ios-calculator:before {\n content: \"\"; }\n\n.ion-ios-calculator-outline:before {\n content: \"\"; }\n\n.ion-ios-calendar:before {\n content: \"\"; }\n\n.ion-ios-calendar-outline:before {\n content: \"\"; }\n\n.ion-ios-camera:before {\n content: \"\"; }\n\n.ion-ios-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-cart:before {\n content: \"\"; }\n\n.ion-ios-cart-outline:before {\n content: \"\"; }\n\n.ion-ios-chatboxes:before {\n content: \"\"; }\n\n.ion-ios-chatboxes-outline:before {\n content: \"\"; }\n\n.ion-ios-chatbubble:before {\n content: \"\"; }\n\n.ion-ios-chatbubble-outline:before {\n content: \"\"; }\n\n.ion-ios-checkmark:before {\n content: \"\"; }\n\n.ion-ios-checkmark-empty:before {\n content: \"\"; }\n\n.ion-ios-checkmark-outline:before {\n content: \"\"; }\n\n.ion-ios-circle-filled:before {\n content: \"\"; }\n\n.ion-ios-circle-outline:before {\n content: \"\"; }\n\n.ion-ios-clock:before {\n content: \"\"; }\n\n.ion-ios-clock-outline:before {\n content: \"\"; }\n\n.ion-ios-close:before {\n content: \"\"; }\n\n.ion-ios-close-empty:before {\n content: \"\"; }\n\n.ion-ios-close-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud:before {\n content: \"\"; }\n\n.ion-ios-cloud-download:before {\n content: \"\"; }\n\n.ion-ios-cloud-download-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy-outline:before {\n content: \"\"; }\n\n.ion-ios-cog:before {\n content: \"\"; }\n\n.ion-ios-cog-outline:before {\n content: \"\"; }\n\n.ion-ios-color-filter:before {\n content: \"\"; }\n\n.ion-ios-color-filter-outline:before {\n content: \"\"; }\n\n.ion-ios-color-wand:before {\n content: \"\"; }\n\n.ion-ios-color-wand-outline:before {\n content: \"\"; }\n\n.ion-ios-compose:before {\n content: \"\"; }\n\n.ion-ios-compose-outline:before {\n content: \"\"; }\n\n.ion-ios-contact:before {\n content: \"\"; }\n\n.ion-ios-contact-outline:before {\n content: \"\"; }\n\n.ion-ios-copy:before {\n content: \"\"; }\n\n.ion-ios-copy-outline:before {\n content: \"\"; }\n\n.ion-ios-crop:before {\n content: \"\"; }\n\n.ion-ios-crop-strong:before {\n content: \"\"; }\n\n.ion-ios-download:before {\n content: \"\"; }\n\n.ion-ios-download-outline:before {\n content: \"\"; }\n\n.ion-ios-drag:before {\n content: \"\"; }\n\n.ion-ios-email:before {\n content: \"\"; }\n\n.ion-ios-email-outline:before {\n content: \"\"; }\n\n.ion-ios-eye:before {\n content: \"\"; }\n\n.ion-ios-eye-outline:before {\n content: \"\"; }\n\n.ion-ios-fastforward:before {\n content: \"\"; }\n\n.ion-ios-fastforward-outline:before {\n content: \"\"; }\n\n.ion-ios-filing:before {\n content: \"\"; }\n\n.ion-ios-filing-outline:before {\n content: \"\"; }\n\n.ion-ios-film:before {\n content: \"\"; }\n\n.ion-ios-film-outline:before {\n content: \"\"; }\n\n.ion-ios-flag:before {\n content: \"\"; }\n\n.ion-ios-flag-outline:before {\n content: \"\"; }\n\n.ion-ios-flame:before {\n content: \"\"; }\n\n.ion-ios-flame-outline:before {\n content: \"\"; }\n\n.ion-ios-flask:before {\n content: \"\"; }\n\n.ion-ios-flask-outline:before {\n content: \"\"; }\n\n.ion-ios-flower:before {\n content: \"\"; }\n\n.ion-ios-flower-outline:before {\n content: \"\"; }\n\n.ion-ios-folder:before {\n content: \"\"; }\n\n.ion-ios-folder-outline:before {\n content: \"\"; }\n\n.ion-ios-football:before {\n content: \"\"; }\n\n.ion-ios-football-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b-outline:before {\n content: \"\"; }\n\n.ion-ios-gear:before {\n content: \"\"; }\n\n.ion-ios-gear-outline:before {\n content: \"\"; }\n\n.ion-ios-glasses:before {\n content: \"\"; }\n\n.ion-ios-glasses-outline:before {\n content: \"\"; }\n\n.ion-ios-grid-view:before {\n content: \"\"; }\n\n.ion-ios-grid-view-outline:before {\n content: \"\"; }\n\n.ion-ios-heart:before {\n content: \"\"; }\n\n.ion-ios-heart-outline:before {\n content: \"\"; }\n\n.ion-ios-help:before {\n content: \"\"; }\n\n.ion-ios-help-empty:before {\n content: \"\"; }\n\n.ion-ios-help-outline:before {\n content: \"\"; }\n\n.ion-ios-home:before {\n content: \"\"; }\n\n.ion-ios-home-outline:before {\n content: \"\"; }\n\n.ion-ios-infinite:before {\n content: \"\"; }\n\n.ion-ios-infinite-outline:before {\n content: \"\"; }\n\n.ion-ios-information:before {\n content: \"\"; }\n\n.ion-ios-information-empty:before {\n content: \"\"; }\n\n.ion-ios-information-outline:before {\n content: \"\"; }\n\n.ion-ios-ionic-outline:before {\n content: \"\"; }\n\n.ion-ios-keypad:before {\n content: \"\"; }\n\n.ion-ios-keypad-outline:before {\n content: \"\"; }\n\n.ion-ios-lightbulb:before {\n content: \"\"; }\n\n.ion-ios-lightbulb-outline:before {\n content: \"\"; }\n\n.ion-ios-list:before {\n content: \"\"; }\n\n.ion-ios-list-outline:before {\n content: \"\"; }\n\n.ion-ios-location:before {\n content: \"\"; }\n\n.ion-ios-location-outline:before {\n content: \"\"; }\n\n.ion-ios-locked:before {\n content: \"\"; }\n\n.ion-ios-locked-outline:before {\n content: \"\"; }\n\n.ion-ios-loop:before {\n content: \"\"; }\n\n.ion-ios-loop-strong:before {\n content: \"\"; }\n\n.ion-ios-medical:before {\n content: \"\"; }\n\n.ion-ios-medical-outline:before {\n content: \"\"; }\n\n.ion-ios-medkit:before {\n content: \"\"; }\n\n.ion-ios-medkit-outline:before {\n content: \"\"; }\n\n.ion-ios-mic:before {\n content: \"\"; }\n\n.ion-ios-mic-off:before {\n content: \"\"; }\n\n.ion-ios-mic-outline:before {\n content: \"\"; }\n\n.ion-ios-minus:before {\n content: \"\"; }\n\n.ion-ios-minus-empty:before {\n content: \"\"; }\n\n.ion-ios-minus-outline:before {\n content: \"\"; }\n\n.ion-ios-monitor:before {\n content: \"\"; }\n\n.ion-ios-monitor-outline:before {\n content: \"\"; }\n\n.ion-ios-moon:before {\n content: \"\"; }\n\n.ion-ios-moon-outline:before {\n content: \"\"; }\n\n.ion-ios-more:before {\n content: \"\"; }\n\n.ion-ios-more-outline:before {\n content: \"\"; }\n\n.ion-ios-musical-note:before {\n content: \"\"; }\n\n.ion-ios-musical-notes:before {\n content: \"\"; }\n\n.ion-ios-navigate:before {\n content: \"\"; }\n\n.ion-ios-navigate-outline:before {\n content: \"\"; }\n\n.ion-ios-nutrition:before {\n content: \"\"; }\n\n.ion-ios-nutrition-outline:before {\n content: \"\"; }\n\n.ion-ios-paper:before {\n content: \"\"; }\n\n.ion-ios-paper-outline:before {\n content: \"\"; }\n\n.ion-ios-paperplane:before {\n content: \"\"; }\n\n.ion-ios-paperplane-outline:before {\n content: \"\"; }\n\n.ion-ios-partlysunny:before {\n content: \"\"; }\n\n.ion-ios-partlysunny-outline:before {\n content: \"\"; }\n\n.ion-ios-pause:before {\n content: \"\"; }\n\n.ion-ios-pause-outline:before {\n content: \"\"; }\n\n.ion-ios-paw:before {\n content: \"\"; }\n\n.ion-ios-paw-outline:before {\n content: \"\"; }\n\n.ion-ios-people:before {\n content: \"\"; }\n\n.ion-ios-people-outline:before {\n content: \"\"; }\n\n.ion-ios-person:before {\n content: \"\"; }\n\n.ion-ios-person-outline:before {\n content: \"\"; }\n\n.ion-ios-personadd:before {\n content: \"\"; }\n\n.ion-ios-personadd-outline:before {\n content: \"\"; }\n\n.ion-ios-photos:before {\n content: \"\"; }\n\n.ion-ios-photos-outline:before {\n content: \"\"; }\n\n.ion-ios-pie:before {\n content: \"\"; }\n\n.ion-ios-pie-outline:before {\n content: \"\"; }\n\n.ion-ios-pint:before {\n content: \"\"; }\n\n.ion-ios-pint-outline:before {\n content: \"\"; }\n\n.ion-ios-play:before {\n content: \"\"; }\n\n.ion-ios-play-outline:before {\n content: \"\"; }\n\n.ion-ios-plus:before {\n content: \"\"; }\n\n.ion-ios-plus-empty:before {\n content: \"\"; }\n\n.ion-ios-plus-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetag:before {\n content: \"\"; }\n\n.ion-ios-pricetag-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetags:before {\n content: \"\"; }\n\n.ion-ios-pricetags-outline:before {\n content: \"\"; }\n\n.ion-ios-printer:before {\n content: \"\"; }\n\n.ion-ios-printer-outline:before {\n content: \"\"; }\n\n.ion-ios-pulse:before {\n content: \"\"; }\n\n.ion-ios-pulse-strong:before {\n content: \"\"; }\n\n.ion-ios-rainy:before {\n content: \"\"; }\n\n.ion-ios-rainy-outline:before {\n content: \"\"; }\n\n.ion-ios-recording:before {\n content: \"\"; }\n\n.ion-ios-recording-outline:before {\n content: \"\"; }\n\n.ion-ios-redo:before {\n content: \"\"; }\n\n.ion-ios-redo-outline:before {\n content: \"\"; }\n\n.ion-ios-refresh:before {\n content: \"\"; }\n\n.ion-ios-refresh-empty:before {\n content: \"\"; }\n\n.ion-ios-refresh-outline:before {\n content: \"\"; }\n\n.ion-ios-reload:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-rewind:before {\n content: \"\"; }\n\n.ion-ios-rewind-outline:before {\n content: \"\"; }\n\n.ion-ios-rose:before {\n content: \"\"; }\n\n.ion-ios-rose-outline:before {\n content: \"\"; }\n\n.ion-ios-search:before {\n content: \"\"; }\n\n.ion-ios-search-strong:before {\n content: \"\"; }\n\n.ion-ios-settings:before {\n content: \"\"; }\n\n.ion-ios-settings-strong:before {\n content: \"\"; }\n\n.ion-ios-shuffle:before {\n content: \"\"; }\n\n.ion-ios-shuffle-strong:before {\n content: \"\"; }\n\n.ion-ios-skipbackward:before {\n content: \"\"; }\n\n.ion-ios-skipbackward-outline:before {\n content: \"\"; }\n\n.ion-ios-skipforward:before {\n content: \"\"; }\n\n.ion-ios-skipforward-outline:before {\n content: \"\"; }\n\n.ion-ios-snowy:before {\n content: \"\"; }\n\n.ion-ios-speedometer:before {\n content: \"\"; }\n\n.ion-ios-speedometer-outline:before {\n content: \"\"; }\n\n.ion-ios-star:before {\n content: \"\"; }\n\n.ion-ios-star-half:before {\n content: \"\"; }\n\n.ion-ios-star-outline:before {\n content: \"\"; }\n\n.ion-ios-stopwatch:before {\n content: \"\"; }\n\n.ion-ios-stopwatch-outline:before {\n content: \"\"; }\n\n.ion-ios-sunny:before {\n content: \"\"; }\n\n.ion-ios-sunny-outline:before {\n content: \"\"; }\n\n.ion-ios-telephone:before {\n content: \"\"; }\n\n.ion-ios-telephone-outline:before {\n content: \"\"; }\n\n.ion-ios-tennisball:before {\n content: \"\"; }\n\n.ion-ios-tennisball-outline:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm-outline:before {\n content: \"\"; }\n\n.ion-ios-time:before {\n content: \"\"; }\n\n.ion-ios-time-outline:before {\n content: \"\"; }\n\n.ion-ios-timer:before {\n content: \"\"; }\n\n.ion-ios-timer-outline:before {\n content: \"\"; }\n\n.ion-ios-toggle:before {\n content: \"\"; }\n\n.ion-ios-toggle-outline:before {\n content: \"\"; }\n\n.ion-ios-trash:before {\n content: \"\"; }\n\n.ion-ios-trash-outline:before {\n content: \"\"; }\n\n.ion-ios-undo:before {\n content: \"\"; }\n\n.ion-ios-undo-outline:before {\n content: \"\"; }\n\n.ion-ios-unlocked:before {\n content: \"\"; }\n\n.ion-ios-unlocked-outline:before {\n content: \"\"; }\n\n.ion-ios-upload:before {\n content: \"\"; }\n\n.ion-ios-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-videocam:before {\n content: \"\"; }\n\n.ion-ios-videocam-outline:before {\n content: \"\"; }\n\n.ion-ios-volume-high:before {\n content: \"\"; }\n\n.ion-ios-volume-low:before {\n content: \"\"; }\n\n.ion-ios-wineglass:before {\n content: \"\"; }\n\n.ion-ios-wineglass-outline:before {\n content: \"\"; }\n\n.ion-ios-world:before {\n content: \"\"; }\n\n.ion-ios-world-outline:before {\n content: \"\"; }\n\n.ion-ipad:before {\n content: \"\"; }\n\n.ion-iphone:before {\n content: \"\"; }\n\n.ion-ipod:before {\n content: \"\"; }\n\n.ion-jet:before {\n content: \"\"; }\n\n.ion-key:before {\n content: \"\"; }\n\n.ion-knife:before {\n content: \"\"; }\n\n.ion-laptop:before {\n content: \"\"; }\n\n.ion-leaf:before {\n content: \"\"; }\n\n.ion-levels:before {\n content: \"\"; }\n\n.ion-lightbulb:before {\n content: \"\"; }\n\n.ion-link:before {\n content: \"\"; }\n\n.ion-load-a:before {\n content: \"\"; }\n\n.ion-load-b:before {\n content: \"\"; }\n\n.ion-load-c:before {\n content: \"\"; }\n\n.ion-load-d:before {\n content: \"\"; }\n\n.ion-location:before {\n content: \"\"; }\n\n.ion-lock-combination:before {\n content: \"\"; }\n\n.ion-locked:before {\n content: \"\"; }\n\n.ion-log-in:before {\n content: \"\"; }\n\n.ion-log-out:before {\n content: \"\"; }\n\n.ion-loop:before {\n content: \"\"; }\n\n.ion-magnet:before {\n content: \"\"; }\n\n.ion-male:before {\n content: \"\"; }\n\n.ion-man:before {\n content: \"\"; }\n\n.ion-map:before {\n content: \"\"; }\n\n.ion-medkit:before {\n content: \"\"; }\n\n.ion-merge:before {\n content: \"\"; }\n\n.ion-mic-a:before {\n content: \"\"; }\n\n.ion-mic-b:before {\n content: \"\"; }\n\n.ion-mic-c:before {\n content: \"\"; }\n\n.ion-minus:before {\n content: \"\"; }\n\n.ion-minus-circled:before {\n content: \"\"; }\n\n.ion-minus-round:before {\n content: \"\"; }\n\n.ion-model-s:before {\n content: \"\"; }\n\n.ion-monitor:before {\n content: \"\"; }\n\n.ion-more:before {\n content: \"\"; }\n\n.ion-mouse:before {\n content: \"\"; }\n\n.ion-music-note:before {\n content: \"\"; }\n\n.ion-navicon:before {\n content: \"\"; }\n\n.ion-navicon-round:before {\n content: \"\"; }\n\n.ion-navigate:before {\n content: \"\"; }\n\n.ion-network:before {\n content: \"\"; }\n\n.ion-no-smoking:before {\n content: \"\"; }\n\n.ion-nuclear:before {\n content: \"\"; }\n\n.ion-outlet:before {\n content: \"\"; }\n\n.ion-paintbrush:before {\n content: \"\"; }\n\n.ion-paintbucket:before {\n content: \"\"; }\n\n.ion-paper-airplane:before {\n content: \"\"; }\n\n.ion-paperclip:before {\n content: \"\"; }\n\n.ion-pause:before {\n content: \"\"; }\n\n.ion-person:before {\n content: \"\"; }\n\n.ion-person-add:before {\n content: \"\"; }\n\n.ion-person-stalker:before {\n content: \"\"; }\n\n.ion-pie-graph:before {\n content: \"\"; }\n\n.ion-pin:before {\n content: \"\"; }\n\n.ion-pinpoint:before {\n content: \"\"; }\n\n.ion-pizza:before {\n content: \"\"; }\n\n.ion-plane:before {\n content: \"\"; }\n\n.ion-planet:before {\n content: \"\"; }\n\n.ion-play:before {\n content: \"\"; }\n\n.ion-playstation:before {\n content: \"\"; }\n\n.ion-plus:before {\n content: \"\"; }\n\n.ion-plus-circled:before {\n content: \"\"; }\n\n.ion-plus-round:before {\n content: \"\"; }\n\n.ion-podium:before {\n content: \"\"; }\n\n.ion-pound:before {\n content: \"\"; }\n\n.ion-power:before {\n content: \"\"; }\n\n.ion-pricetag:before {\n content: \"\"; }\n\n.ion-pricetags:before {\n content: \"\"; }\n\n.ion-printer:before {\n content: \"\"; }\n\n.ion-pull-request:before {\n content: \"\"; }\n\n.ion-qr-scanner:before {\n content: \"\"; }\n\n.ion-quote:before {\n content: \"\"; }\n\n.ion-radio-waves:before {\n content: \"\"; }\n\n.ion-record:before {\n content: \"\"; }\n\n.ion-refresh:before {\n content: \"\"; }\n\n.ion-reply:before {\n content: \"\"; }\n\n.ion-reply-all:before {\n content: \"\"; }\n\n.ion-ribbon-a:before {\n content: \"\"; }\n\n.ion-ribbon-b:before {\n content: \"\"; }\n\n.ion-sad:before {\n content: \"\"; }\n\n.ion-sad-outline:before {\n content: \"\"; }\n\n.ion-scissors:before {\n content: \"\"; }\n\n.ion-search:before {\n content: \"\"; }\n\n.ion-settings:before {\n content: \"\"; }\n\n.ion-share:before {\n content: \"\"; }\n\n.ion-shuffle:before {\n content: \"\"; }\n\n.ion-skip-backward:before {\n content: \"\"; }\n\n.ion-skip-forward:before {\n content: \"\"; }\n\n.ion-social-android:before {\n content: \"\"; }\n\n.ion-social-android-outline:before {\n content: \"\"; }\n\n.ion-social-angular:before {\n content: \"\"; }\n\n.ion-social-angular-outline:before {\n content: \"\"; }\n\n.ion-social-apple:before {\n content: \"\"; }\n\n.ion-social-apple-outline:before {\n content: \"\"; }\n\n.ion-social-bitcoin:before {\n content: \"\"; }\n\n.ion-social-bitcoin-outline:before {\n content: \"\"; }\n\n.ion-social-buffer:before {\n content: \"\"; }\n\n.ion-social-buffer-outline:before {\n content: \"\"; }\n\n.ion-social-chrome:before {\n content: \"\"; }\n\n.ion-social-chrome-outline:before {\n content: \"\"; }\n\n.ion-social-codepen:before {\n content: \"\"; }\n\n.ion-social-codepen-outline:before {\n content: \"\"; }\n\n.ion-social-css3:before {\n content: \"\"; }\n\n.ion-social-css3-outline:before {\n content: \"\"; }\n\n.ion-social-designernews:before {\n content: \"\"; }\n\n.ion-social-designernews-outline:before {\n content: \"\"; }\n\n.ion-social-dribbble:before {\n content: \"\"; }\n\n.ion-social-dribbble-outline:before {\n content: \"\"; }\n\n.ion-social-dropbox:before {\n content: \"\"; }\n\n.ion-social-dropbox-outline:before {\n content: \"\"; }\n\n.ion-social-euro:before {\n content: \"\"; }\n\n.ion-social-euro-outline:before {\n content: \"\"; }\n\n.ion-social-facebook:before {\n content: \"\"; }\n\n.ion-social-facebook-outline:before {\n content: \"\"; }\n\n.ion-social-foursquare:before {\n content: \"\"; }\n\n.ion-social-foursquare-outline:before {\n content: \"\"; }\n\n.ion-social-freebsd-devil:before {\n content: \"\"; }\n\n.ion-social-github:before {\n content: \"\"; }\n\n.ion-social-github-outline:before {\n content: \"\"; }\n\n.ion-social-google:before {\n content: \"\"; }\n\n.ion-social-google-outline:before {\n content: \"\"; }\n\n.ion-social-googleplus:before {\n content: \"\"; }\n\n.ion-social-googleplus-outline:before {\n content: \"\"; }\n\n.ion-social-hackernews:before {\n content: \"\"; }\n\n.ion-social-hackernews-outline:before {\n content: \"\"; }\n\n.ion-social-html5:before {\n content: \"\"; }\n\n.ion-social-html5-outline:before {\n content: \"\"; }\n\n.ion-social-instagram:before {\n content: \"\"; }\n\n.ion-social-instagram-outline:before {\n content: \"\"; }\n\n.ion-social-javascript:before {\n content: \"\"; }\n\n.ion-social-javascript-outline:before {\n content: \"\"; }\n\n.ion-social-linkedin:before {\n content: \"\"; }\n\n.ion-social-linkedin-outline:before {\n content: \"\"; }\n\n.ion-social-markdown:before {\n content: \"\"; }\n\n.ion-social-nodejs:before {\n content: \"\"; }\n\n.ion-social-octocat:before {\n content: \"\"; }\n\n.ion-social-pinterest:before {\n content: \"\"; }\n\n.ion-social-pinterest-outline:before {\n content: \"\"; }\n\n.ion-social-python:before {\n content: \"\"; }\n\n.ion-social-reddit:before {\n content: \"\"; }\n\n.ion-social-reddit-outline:before {\n content: \"\"; }\n\n.ion-social-rss:before {\n content: \"\"; }\n\n.ion-social-rss-outline:before {\n content: \"\"; }\n\n.ion-social-sass:before {\n content: \"\"; }\n\n.ion-social-skype:before {\n content: \"\"; }\n\n.ion-social-skype-outline:before {\n content: \"\"; }\n\n.ion-social-snapchat:before {\n content: \"\"; }\n\n.ion-social-snapchat-outline:before {\n content: \"\"; }\n\n.ion-social-tumblr:before {\n content: \"\"; }\n\n.ion-social-tumblr-outline:before {\n content: \"\"; }\n\n.ion-social-tux:before {\n content: \"\"; }\n\n.ion-social-twitch:before {\n content: \"\"; }\n\n.ion-social-twitch-outline:before {\n content: \"\"; }\n\n.ion-social-twitter:before {\n content: \"\"; }\n\n.ion-social-twitter-outline:before {\n content: \"\"; }\n\n.ion-social-usd:before {\n content: \"\"; }\n\n.ion-social-usd-outline:before {\n content: \"\"; }\n\n.ion-social-vimeo:before {\n content: \"\"; }\n\n.ion-social-vimeo-outline:before {\n content: \"\"; }\n\n.ion-social-whatsapp:before {\n content: \"\"; }\n\n.ion-social-whatsapp-outline:before {\n content: \"\"; }\n\n.ion-social-windows:before {\n content: \"\"; }\n\n.ion-social-windows-outline:before {\n content: \"\"; }\n\n.ion-social-wordpress:before {\n content: \"\"; }\n\n.ion-social-wordpress-outline:before {\n content: \"\"; }\n\n.ion-social-yahoo:before {\n content: \"\"; }\n\n.ion-social-yahoo-outline:before {\n content: \"\"; }\n\n.ion-social-yen:before {\n content: \"\"; }\n\n.ion-social-yen-outline:before {\n content: \"\"; }\n\n.ion-social-youtube:before {\n content: \"\"; }\n\n.ion-social-youtube-outline:before {\n content: \"\"; }\n\n.ion-soup-can:before {\n content: \"\"; }\n\n.ion-soup-can-outline:before {\n content: \"\"; }\n\n.ion-speakerphone:before {\n content: \"\"; }\n\n.ion-speedometer:before {\n content: \"\"; }\n\n.ion-spoon:before {\n content: \"\"; }\n\n.ion-star:before {\n content: \"\"; }\n\n.ion-stats-bars:before {\n content: \"\"; }\n\n.ion-steam:before {\n content: \"\"; }\n\n.ion-stop:before {\n content: \"\"; }\n\n.ion-thermometer:before {\n content: \"\"; }\n\n.ion-thumbsdown:before {\n content: \"\"; }\n\n.ion-thumbsup:before {\n content: \"\"; }\n\n.ion-toggle:before {\n content: \"\"; }\n\n.ion-toggle-filled:before {\n content: \"\"; }\n\n.ion-transgender:before {\n content: \"\"; }\n\n.ion-trash-a:before {\n content: \"\"; }\n\n.ion-trash-b:before {\n content: \"\"; }\n\n.ion-trophy:before {\n content: \"\"; }\n\n.ion-tshirt:before {\n content: \"\"; }\n\n.ion-tshirt-outline:before {\n content: \"\"; }\n\n.ion-umbrella:before {\n content: \"\"; }\n\n.ion-university:before {\n content: \"\"; }\n\n.ion-unlocked:before {\n content: \"\"; }\n\n.ion-upload:before {\n content: \"\"; }\n\n.ion-usb:before {\n content: \"\"; }\n\n.ion-videocamera:before {\n content: \"\"; }\n\n.ion-volume-high:before {\n content: \"\"; }\n\n.ion-volume-low:before {\n content: \"\"; }\n\n.ion-volume-medium:before {\n content: \"\"; }\n\n.ion-volume-mute:before {\n content: \"\"; }\n\n.ion-wand:before {\n content: \"\"; }\n\n.ion-waterdrop:before {\n content: \"\"; }\n\n.ion-wifi:before {\n content: \"\"; }\n\n.ion-wineglass:before {\n content: \"\"; }\n\n.ion-woman:before {\n content: \"\"; }\n\n.ion-wrench:before {\n content: \"\"; }\n\n.ion-xbox:before {\n content: \"\"; }\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline; }\n\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n[hidden],\ntemplate {\n display: none; }\n\na {\n background-color: transparent; }\n\na:active,\na:hover {\n outline: 0; }\n\nabbr[title] {\n border-bottom: 1px dotted; }\n\nb,\nstrong {\n font-weight: bold; }\n\ndfn {\n font-style: italic; }\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nmark {\n background: #ff0;\n color: #000; }\n\nsmall {\n font-size: 80%; }\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\nimg {\n border: 0; }\n\nsvg:not(:root) {\n overflow: hidden; }\n\nfigure {\n margin: 1em 40px; }\n\nhr {\n box-sizing: content-box;\n height: 0; }\n\npre {\n overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0; }\n\nbutton {\n overflow: visible; }\n\nbutton,\nselect {\n text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput {\n line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n border: 0;\n padding: 0; }\n\ntextarea {\n overflow: auto; }\n\noptgroup {\n font-weight: bold; }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\"; }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; }\n .navbar {\n display: none; }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important; }\n .label {\n border: 1px solid #000; }\n .table {\n border-collapse: collapse !important; }\n .table td,\n .table th {\n background-color: #fff !important; }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important; } }\n\n* {\n box-sizing: border-box; }\n\n*:before,\n*:after {\n box-sizing: border-box; }\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: transparent; }\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.428571429;\n color: #333333;\n background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\na {\n color: #67808c;\n text-decoration: none; }\n a:hover, a:focus {\n color: #465760;\n text-decoration: underline; }\n a:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\nfigure {\n margin: 0; }\n\nimg {\n vertical-align: middle; }\n\n.img-responsive {\n display: block;\n max-width: 100%;\n height: auto; }\n\n.img-rounded {\n border-radius: 4px; }\n\n.img-thumbnail {\n padding: 4px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto; }\n\n.img-circle {\n border-radius: 50%; }\n\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee; }\n\n.sr-only, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto; }\n\n[role=\"button\"] {\n cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n h1 small,\n h1 .small, h2 small,\n h2 .small, h3 small,\n h3 .small, h4 small,\n h4 .small, h5 small,\n h5 .small, h6 small,\n h6 .small,\n .h1 small,\n .h1 .small, .h2 small,\n .h2 .small, .h3 small,\n .h3 .small, .h4 small,\n .h4 .small, .h5 small,\n .h5 .small, .h6 small,\n .h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: 20px;\n margin-bottom: 10px; }\n h1 small,\n h1 .small, .h1 small,\n .h1 .small,\n h2 small,\n h2 .small, .h2 small,\n .h2 .small,\n h3 small,\n h3 .small, .h3 small,\n .h3 .small {\n font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: 10px;\n margin-bottom: 10px; }\n h4 small,\n h4 .small, .h4 small,\n .h4 .small,\n h5 small,\n h5 .small, .h5 small,\n .h5 .small,\n h6 small,\n h6 .small, .h6 small,\n .h6 .small {\n font-size: 75%; }\n\nh1, .h1 {\n font-size: 36px; }\n\nh2, .h2 {\n font-size: 30px; }\n\nh3, .h3 {\n font-size: 24px; }\n\nh4, .h4 {\n font-size: 18px; }\n\nh5, .h5 {\n font-size: 14px; }\n\nh6, .h6 {\n font-size: 12px; }\n\np {\n margin: 0 0 10px; }\n\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4; }\n @media (min-width: 768px) {\n .lead {\n font-size: 21px; } }\n\nsmall,\n.small {\n font-size: 85%; }\n\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em; }\n\n.text-left {\n text-align: left; }\n\n.text-right, .component-inline-update {\n text-align: right; }\n\n.text-center, body.dashboard .sidebar .sidebar-inner .quick-add-incident {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n.text-nowrap {\n white-space: nowrap; }\n\n.text-lowercase {\n text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n text-transform: uppercase; }\n\n.text-capitalize {\n text-transform: capitalize; }\n\n.text-muted {\n color: #777777; }\n\n.text-primary {\n color: #67808c; }\n\na.text-primary:hover,\na.text-primary:focus {\n color: #51656f; }\n\n.text-success {\n color: #3c763d; }\n\na.text-success:hover,\na.text-success:focus {\n color: #2b542c; }\n\n.text-info {\n color: #31708f; }\n\na.text-info:hover,\na.text-info:focus {\n color: #245269; }\n\n.text-warning {\n color: #8a6d3b; }\n\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c; }\n\n.text-danger {\n color: #a94442; }\n\na.text-danger:hover,\na.text-danger:focus {\n color: #843534; }\n\n.bg-primary {\n color: #fff; }\n\n.bg-primary {\n background-color: #67808c; }\n\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #51656f; }\n\n.bg-success {\n background-color: #dff0d8; }\n\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3; }\n\n.bg-info {\n background-color: #d9edf7; }\n\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee; }\n\n.bg-warning {\n background-color: #fcf8e3; }\n\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5; }\n\n.bg-danger {\n background-color: #f2dede; }\n\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9; }\n\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px; }\n ul ul,\n ul ol,\n ol ul,\n ol ol {\n margin-bottom: 0; }\n\n.list-unstyled {\n padding-left: 0;\n list-style: none; }\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px; }\n .list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px; }\n\ndl {\n margin-top: 0;\n margin-bottom: 20px; }\n\ndt,\ndd {\n line-height: 1.428571429; }\n\ndt {\n font-weight: bold; }\n\ndd {\n margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n content: \" \";\n display: table; }\n\n.dl-horizontal dd:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .dl-horizontal dd {\n margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777; }\n\n.initialism {\n font-size: 90%; }\n\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee; }\n blockquote p:last-child,\n blockquote ul:last-child,\n blockquote ol:last-child {\n margin-bottom: 0; }\n blockquote footer,\n blockquote small,\n blockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.428571429;\n color: #777777; }\n blockquote footer:before,\n blockquote small:before,\n blockquote .small:before {\n content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right; }\n .blockquote-reverse footer:before,\n .blockquote-reverse small:before,\n .blockquote-reverse .small:before,\n blockquote.pull-right footer:before,\n blockquote.pull-right small:before,\n blockquote.pull-right .small:before {\n content: ''; }\n .blockquote-reverse footer:after,\n .blockquote-reverse small:after,\n .blockquote-reverse .small:after,\n blockquote.pull-right footer:after,\n blockquote.pull-right small:after,\n blockquote.pull-right .small:after {\n content: '\\00A0 \\2014'; }\n\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 3px; }\n\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 2px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n kbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none; }\n\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.428571429;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 3px; }\n pre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0; }\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll; }\n\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container:before, .container:after {\n content: \" \";\n display: table; }\n .container:after {\n clear: both; }\n @media (min-width: 768px) {\n .container {\n width: 750px; } }\n @media (min-width: 992px) {\n .container {\n width: 970px; } }\n @media (min-width: 1200px) {\n .container {\n width: 1170px; } }\n\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container-fluid:before, .container-fluid:after {\n content: \" \";\n display: table; }\n .container-fluid:after {\n clear: both; }\n\n.row, .setup-page .steps {\n margin-left: -15px;\n margin-right: -15px; }\n .row:before, .setup-page .steps:before, .row:after, .setup-page .steps:after {\n content: \" \";\n display: table; }\n .row:after, .setup-page .steps:after {\n clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .setup-page .steps .step, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .setup-page .steps .step, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left; }\n\n.col-xs-1 {\n width: 8.3333333333%; }\n\n.col-xs-2 {\n width: 16.6666666667%; }\n\n.col-xs-3, .setup-page .steps .step {\n width: 25%; }\n\n.col-xs-4 {\n width: 33.3333333333%; }\n\n.col-xs-5 {\n width: 41.6666666667%; }\n\n.col-xs-6 {\n width: 50%; }\n\n.col-xs-7 {\n width: 58.3333333333%; }\n\n.col-xs-8 {\n width: 66.6666666667%; }\n\n.col-xs-9 {\n width: 75%; }\n\n.col-xs-10 {\n width: 83.3333333333%; }\n\n.col-xs-11 {\n width: 91.6666666667%; }\n\n.col-xs-12 {\n width: 100%; }\n\n.col-xs-pull-0 {\n right: auto; }\n\n.col-xs-pull-1 {\n right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n right: 25%; }\n\n.col-xs-pull-4 {\n right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n right: 50%; }\n\n.col-xs-pull-7 {\n right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n right: 75%; }\n\n.col-xs-pull-10 {\n right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n right: 100%; }\n\n.col-xs-push-0 {\n left: auto; }\n\n.col-xs-push-1 {\n left: 8.3333333333%; }\n\n.col-xs-push-2 {\n left: 16.6666666667%; }\n\n.col-xs-push-3 {\n left: 25%; }\n\n.col-xs-push-4 {\n left: 33.3333333333%; }\n\n.col-xs-push-5 {\n left: 41.6666666667%; }\n\n.col-xs-push-6 {\n left: 50%; }\n\n.col-xs-push-7 {\n left: 58.3333333333%; }\n\n.col-xs-push-8 {\n left: 66.6666666667%; }\n\n.col-xs-push-9 {\n left: 75%; }\n\n.col-xs-push-10 {\n left: 83.3333333333%; }\n\n.col-xs-push-11 {\n left: 91.6666666667%; }\n\n.col-xs-push-12 {\n left: 100%; }\n\n.col-xs-offset-0 {\n margin-left: 0%; }\n\n.col-xs-offset-1 {\n margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n margin-left: 25%; }\n\n.col-xs-offset-4 {\n margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n margin-left: 50%; }\n\n.col-xs-offset-7 {\n margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n margin-left: 75%; }\n\n.col-xs-offset-10 {\n margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n margin-left: 100%; }\n\n@media (min-width: 768px) {\n .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 {\n float: left; }\n .col-sm-1 {\n width: 8.3333333333%; }\n .col-sm-2 {\n width: 16.6666666667%; }\n .col-sm-3 {\n width: 25%; }\n .col-sm-4 {\n width: 33.3333333333%; }\n .col-sm-5 {\n width: 41.6666666667%; }\n .col-sm-6 {\n width: 50%; }\n .col-sm-7 {\n width: 58.3333333333%; }\n .col-sm-8 {\n width: 66.6666666667%; }\n .col-sm-9 {\n width: 75%; }\n .col-sm-10 {\n width: 83.3333333333%; }\n .col-sm-11 {\n width: 91.6666666667%; }\n .col-sm-12 {\n width: 100%; }\n .col-sm-pull-0 {\n right: auto; }\n .col-sm-pull-1 {\n right: 8.3333333333%; }\n .col-sm-pull-2 {\n right: 16.6666666667%; }\n .col-sm-pull-3 {\n right: 25%; }\n .col-sm-pull-4 {\n right: 33.3333333333%; }\n .col-sm-pull-5 {\n right: 41.6666666667%; }\n .col-sm-pull-6 {\n right: 50%; }\n .col-sm-pull-7 {\n right: 58.3333333333%; }\n .col-sm-pull-8 {\n right: 66.6666666667%; }\n .col-sm-pull-9 {\n right: 75%; }\n .col-sm-pull-10 {\n right: 83.3333333333%; }\n .col-sm-pull-11 {\n right: 91.6666666667%; }\n .col-sm-pull-12 {\n right: 100%; }\n .col-sm-push-0 {\n left: auto; }\n .col-sm-push-1 {\n left: 8.3333333333%; }\n .col-sm-push-2 {\n left: 16.6666666667%; }\n .col-sm-push-3 {\n left: 25%; }\n .col-sm-push-4 {\n left: 33.3333333333%; }\n .col-sm-push-5 {\n left: 41.6666666667%; }\n .col-sm-push-6 {\n left: 50%; }\n .col-sm-push-7 {\n left: 58.3333333333%; }\n .col-sm-push-8 {\n left: 66.6666666667%; }\n .col-sm-push-9 {\n left: 75%; }\n .col-sm-push-10 {\n left: 83.3333333333%; }\n .col-sm-push-11 {\n left: 91.6666666667%; }\n .col-sm-push-12 {\n left: 100%; }\n .col-sm-offset-0 {\n margin-left: 0%; }\n .col-sm-offset-1 {\n margin-left: 8.3333333333%; }\n .col-sm-offset-2 {\n margin-left: 16.6666666667%; }\n .col-sm-offset-3 {\n margin-left: 25%; }\n .col-sm-offset-4 {\n margin-left: 33.3333333333%; }\n .col-sm-offset-5 {\n margin-left: 41.6666666667%; }\n .col-sm-offset-6 {\n margin-left: 50%; }\n .col-sm-offset-7 {\n margin-left: 58.3333333333%; }\n .col-sm-offset-8 {\n margin-left: 66.6666666667%; }\n .col-sm-offset-9 {\n margin-left: 75%; }\n .col-sm-offset-10 {\n margin-left: 83.3333333333%; }\n .col-sm-offset-11 {\n margin-left: 91.6666666667%; }\n .col-sm-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 992px) {\n .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 {\n float: left; }\n .col-md-1 {\n width: 8.3333333333%; }\n .col-md-2 {\n width: 16.6666666667%; }\n .col-md-3 {\n width: 25%; }\n .col-md-4 {\n width: 33.3333333333%; }\n .col-md-5 {\n width: 41.6666666667%; }\n .col-md-6 {\n width: 50%; }\n .col-md-7 {\n width: 58.3333333333%; }\n .col-md-8 {\n width: 66.6666666667%; }\n .col-md-9 {\n width: 75%; }\n .col-md-10 {\n width: 83.3333333333%; }\n .col-md-11 {\n width: 91.6666666667%; }\n .col-md-12 {\n width: 100%; }\n .col-md-pull-0 {\n right: auto; }\n .col-md-pull-1 {\n right: 8.3333333333%; }\n .col-md-pull-2 {\n right: 16.6666666667%; }\n .col-md-pull-3 {\n right: 25%; }\n .col-md-pull-4 {\n right: 33.3333333333%; }\n .col-md-pull-5 {\n right: 41.6666666667%; }\n .col-md-pull-6 {\n right: 50%; }\n .col-md-pull-7 {\n right: 58.3333333333%; }\n .col-md-pull-8 {\n right: 66.6666666667%; }\n .col-md-pull-9 {\n right: 75%; }\n .col-md-pull-10 {\n right: 83.3333333333%; }\n .col-md-pull-11 {\n right: 91.6666666667%; }\n .col-md-pull-12 {\n right: 100%; }\n .col-md-push-0 {\n left: auto; }\n .col-md-push-1 {\n left: 8.3333333333%; }\n .col-md-push-2 {\n left: 16.6666666667%; }\n .col-md-push-3 {\n left: 25%; }\n .col-md-push-4 {\n left: 33.3333333333%; }\n .col-md-push-5 {\n left: 41.6666666667%; }\n .col-md-push-6 {\n left: 50%; }\n .col-md-push-7 {\n left: 58.3333333333%; }\n .col-md-push-8 {\n left: 66.6666666667%; }\n .col-md-push-9 {\n left: 75%; }\n .col-md-push-10 {\n left: 83.3333333333%; }\n .col-md-push-11 {\n left: 91.6666666667%; }\n .col-md-push-12 {\n left: 100%; }\n .col-md-offset-0 {\n margin-left: 0%; }\n .col-md-offset-1 {\n margin-left: 8.3333333333%; }\n .col-md-offset-2 {\n margin-left: 16.6666666667%; }\n .col-md-offset-3 {\n margin-left: 25%; }\n .col-md-offset-4 {\n margin-left: 33.3333333333%; }\n .col-md-offset-5 {\n margin-left: 41.6666666667%; }\n .col-md-offset-6 {\n margin-left: 50%; }\n .col-md-offset-7 {\n margin-left: 58.3333333333%; }\n .col-md-offset-8 {\n margin-left: 66.6666666667%; }\n .col-md-offset-9 {\n margin-left: 75%; }\n .col-md-offset-10 {\n margin-left: 83.3333333333%; }\n .col-md-offset-11 {\n margin-left: 91.6666666667%; }\n .col-md-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 1200px) {\n .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 {\n float: left; }\n .col-lg-1 {\n width: 8.3333333333%; }\n .col-lg-2 {\n width: 16.6666666667%; }\n .col-lg-3 {\n width: 25%; }\n .col-lg-4 {\n width: 33.3333333333%; }\n .col-lg-5 {\n width: 41.6666666667%; }\n .col-lg-6 {\n width: 50%; }\n .col-lg-7 {\n width: 58.3333333333%; }\n .col-lg-8 {\n width: 66.6666666667%; }\n .col-lg-9 {\n width: 75%; }\n .col-lg-10 {\n width: 83.3333333333%; }\n .col-lg-11 {\n width: 91.6666666667%; }\n .col-lg-12 {\n width: 100%; }\n .col-lg-pull-0 {\n right: auto; }\n .col-lg-pull-1 {\n right: 8.3333333333%; }\n .col-lg-pull-2 {\n right: 16.6666666667%; }\n .col-lg-pull-3 {\n right: 25%; }\n .col-lg-pull-4 {\n right: 33.3333333333%; }\n .col-lg-pull-5 {\n right: 41.6666666667%; }\n .col-lg-pull-6 {\n right: 50%; }\n .col-lg-pull-7 {\n right: 58.3333333333%; }\n .col-lg-pull-8 {\n right: 66.6666666667%; }\n .col-lg-pull-9 {\n right: 75%; }\n .col-lg-pull-10 {\n right: 83.3333333333%; }\n .col-lg-pull-11 {\n right: 91.6666666667%; }\n .col-lg-pull-12 {\n right: 100%; }\n .col-lg-push-0 {\n left: auto; }\n .col-lg-push-1 {\n left: 8.3333333333%; }\n .col-lg-push-2 {\n left: 16.6666666667%; }\n .col-lg-push-3 {\n left: 25%; }\n .col-lg-push-4 {\n left: 33.3333333333%; }\n .col-lg-push-5 {\n left: 41.6666666667%; }\n .col-lg-push-6 {\n left: 50%; }\n .col-lg-push-7 {\n left: 58.3333333333%; }\n .col-lg-push-8 {\n left: 66.6666666667%; }\n .col-lg-push-9 {\n left: 75%; }\n .col-lg-push-10 {\n left: 83.3333333333%; }\n .col-lg-push-11 {\n left: 91.6666666667%; }\n .col-lg-push-12 {\n left: 100%; }\n .col-lg-offset-0 {\n margin-left: 0%; }\n .col-lg-offset-1 {\n margin-left: 8.3333333333%; }\n .col-lg-offset-2 {\n margin-left: 16.6666666667%; }\n .col-lg-offset-3 {\n margin-left: 25%; }\n .col-lg-offset-4 {\n margin-left: 33.3333333333%; }\n .col-lg-offset-5 {\n margin-left: 41.6666666667%; }\n .col-lg-offset-6 {\n margin-left: 50%; }\n .col-lg-offset-7 {\n margin-left: 58.3333333333%; }\n .col-lg-offset-8 {\n margin-left: 66.6666666667%; }\n .col-lg-offset-9 {\n margin-left: 75%; }\n .col-lg-offset-10 {\n margin-left: 83.3333333333%; }\n .col-lg-offset-11 {\n margin-left: 91.6666666667%; }\n .col-lg-offset-12 {\n margin-left: 100%; } }\n\ntable {\n background-color: transparent; }\n\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left; }\n\nth {\n text-align: left; }\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px; }\n .table > thead > tr > th,\n .table > thead > tr > td,\n .table > tbody > tr > th,\n .table > tbody > tr > td,\n .table > tfoot > tr > th,\n .table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.428571429;\n vertical-align: top;\n border-top: 1px solid #ddd; }\n .table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd; }\n .table > caption + thead > tr:first-child > th,\n .table > caption + thead > tr:first-child > td,\n .table > colgroup + thead > tr:first-child > th,\n .table > colgroup + thead > tr:first-child > td,\n .table > thead:first-child > tr:first-child > th,\n .table > thead:first-child > tr:first-child > td {\n border-top: 0; }\n .table > tbody + tbody {\n border-top: 2px solid #ddd; }\n .table .table {\n background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n padding: 5px; }\n\n.table-bordered {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td,\n .table-bordered > tbody > tr > th,\n .table-bordered > tbody > tr > td,\n .table-bordered > tfoot > tr > th,\n .table-bordered > tfoot > tr > td {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td {\n border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc; }\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; }\n @media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd; }\n .table-responsive > .table {\n margin-bottom: 0; }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap; }\n .table-responsive > .table-bordered {\n border: 0; }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0; } }\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\ninput[type=\"search\"] {\n box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\ninput[type=\"file\"] {\n display: block; }\n\ninput[type=\"range\"] {\n display: block;\n width: 100%; }\n\nselect[multiple],\nselect[size] {\n height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 3px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .form-control:-ms-input-placeholder {\n color: #999; }\n .form-control::-webkit-input-placeholder {\n color: #999; }\n .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .form-control[disabled], .form-control[readonly],\n fieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .form-control[disabled],\n fieldset[disabled] .form-control {\n cursor: not-allowed; }\n\ntextarea.form-control {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px; }\n input[type=\"date\"].input-sm, .input-group-sm > input[type=\"date\"].form-control,\n .input-group-sm > input[type=\"date\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm input[type=\"date\"],\n input[type=\"time\"].input-sm,\n .input-group-sm > input[type=\"time\"].form-control,\n .input-group-sm > input[type=\"time\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-sm,\n .input-group-sm > input[type=\"datetime-local\"].form-control,\n .input-group-sm > input[type=\"datetime-local\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-sm,\n .input-group-sm > input[type=\"month\"].form-control,\n .input-group-sm > input[type=\"month\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n input[type=\"month\"] {\n line-height: 30px; }\n input[type=\"date\"].input-lg, .input-group-lg > input[type=\"date\"].form-control,\n .input-group-lg > input[type=\"date\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg input[type=\"date\"],\n input[type=\"time\"].input-lg,\n .input-group-lg > input[type=\"time\"].form-control,\n .input-group-lg > input[type=\"time\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-lg,\n .input-group-lg > input[type=\"datetime-local\"].form-control,\n .input-group-lg > input[type=\"datetime-local\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-lg,\n .input-group-lg > input[type=\"month\"].form-control,\n .input-group-lg > input[type=\"month\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n input[type=\"month\"] {\n line-height: 46px; } }\n\n.form-group {\n margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .radio label,\n .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n cursor: not-allowed; }\n\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n .input-group-lg > .form-control-static.input-group-addon,\n .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n .input-group-sm > .form-control-static.input-group-addon,\n .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select[multiple].form-control,\n.input-group-sm > select[multiple].input-group-addon,\n.input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto; }\n\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select[multiple].form-control,\n.input-group-lg > select[multiple].input-group-addon,\n.input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto; }\n\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.has-feedback {\n position: relative; }\n .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,\n.input-group-lg > .input-group-addon + .form-control-feedback,\n.input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,\n.input-group-sm > .input-group-addon + .form-control-feedback,\n.input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d; }\n\n.has-success .form-control {\n border-color: #3c763d;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-success .form-control:focus {\n border-color: #2b542c;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.has-warning .form-control {\n border-color: #8a6d3b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-warning .form-control:focus {\n border-color: #66512c;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442; }\n\n.has-error .form-control {\n border-color: #a94442;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-error .form-control:focus {\n border-color: #843534;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after ~ .form-control-feedback {\n top: 0; }\n\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .form-inline .form-control-static {\n display: inline-block; }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto; }\n .form-inline .input-group > .form-control {\n width: 100%; }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0; }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px; }\n\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n border-radius: 3px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .btn:hover, .btn:focus, .btn.focus {\n color: #333;\n text-decoration: none; }\n .btn:active, .btn.active {\n outline: 0;\n background-image: none;\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn.disabled, .btn[disabled],\n fieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n box-shadow: none; }\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none; }\n\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .btn-default:focus, .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,\n .open > .btn-default.dropdown-toggle:hover,\n .open > .btn-default.dropdown-toggle:focus,\n .open > .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n background-image: none; }\n .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,\n fieldset[disabled] .btn-default:hover,\n fieldset[disabled] .btn-default:focus,\n fieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.btn-primary {\n color: #fff;\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #51656f;\n border-color: #262f34; }\n .btn-primary:hover {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,\n .open > .btn-primary.dropdown-toggle:hover,\n .open > .btn-primary.dropdown-toggle:focus,\n .open > .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #42525a;\n border-color: #262f34; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n background-image: none; }\n .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,\n fieldset[disabled] .btn-primary:hover,\n fieldset[disabled] .btn-primary:focus,\n fieldset[disabled] .btn-primary.focus {\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary .badge {\n color: #67808c;\n background-color: #fff; }\n\n.btn-success {\n color: #fff;\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #64a71a;\n border-color: #2f4f0c; }\n .btn-success:hover {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,\n .open > .btn-success.dropdown-toggle:hover,\n .open > .btn-success.dropdown-toggle:focus,\n .open > .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #518815;\n border-color: #2f4f0c; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n background-image: none; }\n .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,\n fieldset[disabled] .btn-success:hover,\n fieldset[disabled] .btn-success:focus,\n fieldset[disabled] .btn-success.focus {\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success .badge {\n color: #7ED321;\n background-color: #fff; }\n\n.btn-info {\n color: #fff;\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #217dbb;\n border-color: #124364; }\n .btn-info:hover {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,\n .open > .btn-info.dropdown-toggle:hover,\n .open > .btn-info.dropdown-toggle:focus,\n .open > .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #1c699d;\n border-color: #124364; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n background-image: none; }\n .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,\n fieldset[disabled] .btn-info:hover,\n fieldset[disabled] .btn-info:focus,\n fieldset[disabled] .btn-info.focus {\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info .badge {\n color: #3498db;\n background-color: #fff; }\n\n.btn-warning {\n color: #fff;\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning:focus, .btn-warning.focus {\n color: #fff;\n background-color: #cc6d00;\n border-color: #663600; }\n .btn-warning:hover {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,\n .open > .btn-warning.dropdown-toggle:hover,\n .open > .btn-warning.dropdown-toggle:focus,\n .open > .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #a85a00;\n border-color: #663600; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n background-image: none; }\n .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,\n fieldset[disabled] .btn-warning:hover,\n fieldset[disabled] .btn-warning:focus,\n fieldset[disabled] .btn-warning.focus {\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning .badge {\n color: #FF8800;\n background-color: #fff; }\n\n.btn-danger {\n color: #fff;\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #d50000; }\n .btn-danger:hover {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,\n .open > .btn-danger.dropdown-toggle:hover,\n .open > .btn-danger.dropdown-toggle:focus,\n .open > .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ff1818;\n border-color: #d50000; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n background-image: none; }\n .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,\n fieldset[disabled] .btn-danger:hover,\n fieldset[disabled] .btn-danger:focus,\n fieldset[disabled] .btn-danger.focus {\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger .badge {\n color: #ff6f6f;\n background-color: #fff; }\n\n.btn-link {\n color: #67808c;\n font-weight: normal;\n border-radius: 0; }\n .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n fieldset[disabled] .btn-link {\n background-color: transparent;\n box-shadow: none; }\n .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n border-color: transparent; }\n .btn-link:hover, .btn-link:focus {\n color: #465760;\n text-decoration: underline;\n background-color: transparent; }\n .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n fieldset[disabled] .btn-link:hover,\n fieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-xs, .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-block {\n display: block;\n width: 100%; }\n\n.btn-block + .btn-block {\n margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%; }\n\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear; }\n .fade.in {\n opacity: 1; }\n\n.collapse {\n display: none; }\n .collapse.in {\n display: block; }\n\ntr.collapse.in {\n display: table-row; }\n\ntbody.collapse.in {\n display: table-row-group; }\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease; }\n\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n position: relative; }\n\n.dropdown-toggle:focus {\n outline: 0; }\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box; }\n .dropdown-menu.pull-right {\n right: 0;\n left: auto; }\n .dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.428571429;\n color: #333333;\n white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #67808c; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed; }\n\n.open > .dropdown-menu {\n display: block; }\n\n.open > a {\n outline: 0; }\n\n.dropdown-menu-right {\n left: auto;\n right: 0; }\n\n.dropdown-menu-left {\n left: 0;\n right: auto; }\n\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.428571429;\n color: #777777;\n white-space: nowrap; }\n\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990; }\n\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto; }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .btn-group > .btn,\n .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n .btn-group-vertical > .btn:hover,\n .btn-group-vertical > .btn:focus,\n .btn-group-vertical > .btn:active,\n .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.btn-toolbar {\n margin-left: -5px; }\n .btn-toolbar:before, .btn-toolbar:after {\n content: \" \";\n display: table; }\n .btn-toolbar:after {\n clear: both; }\n .btn-toolbar .btn,\n .btn-toolbar .btn-group,\n .btn-toolbar .input-group {\n float: left; }\n .btn-toolbar > .btn,\n .btn-toolbar > .btn-group,\n .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.btn-group > .btn:first-child {\n margin-left: 0; }\n .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn-group.open .dropdown-toggle.btn-link {\n box-shadow: none; }\n\n.btn .caret {\n margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .btn-group-justified > .btn,\n .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .input-group .form-control:focus {\n z-index: 3; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell; }\n .input-group-addon:not(:first-child):not(:last-child),\n .input-group-btn:not(:first-child):not(:last-child),\n .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 3px; }\n .input-group-addon.input-sm,\n .input-group-sm > .input-group-addon,\n .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 2px; }\n .input-group-addon.input-lg,\n .input-group-lg > .input-group-addon,\n .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 4px; }\n .input-group-addon input[type=\"radio\"],\n .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n border-left: 0; }\n\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .input-group-btn > .btn {\n position: relative; }\n .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n z-index: 2; }\n .input-group-btn:first-child > .btn,\n .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .input-group-btn:last-child > .btn,\n .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none; }\n .nav:before, .nav:after {\n content: \" \";\n display: table; }\n .nav:after {\n clear: both; }\n .nav > li {\n position: relative;\n display: block; }\n .nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px; }\n .nav > li > a:hover, .nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .nav > li.disabled > a {\n color: #777777; }\n .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed; }\n .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #67808c; }\n .nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .nav > li > a > img {\n max-width: none; }\n\n.nav-tabs {\n border-bottom: 1px solid #ddd; }\n .nav-tabs > li {\n float: left;\n margin-bottom: -1px; }\n .nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.428571429;\n border: 1px solid transparent;\n border-radius: 3px 3px 0 0; }\n .nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd; }\n .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default; }\n\n.nav-pills > li {\n float: left; }\n .nav-pills > li > a {\n border-radius: 3px; }\n .nav-pills > li + li {\n margin-left: 2px; }\n .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #67808c; }\n\n.nav-stacked > li {\n float: none; }\n .nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n width: 100%; }\n .nav-justified > li, .nav-tabs.nav-justified > li {\n float: none; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px; }\n .nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto; }\n @media (min-width: 768px) {\n .nav-justified > li, .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n border-bottom: 0; }\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 3px; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd; }\n @media (min-width: 768px) {\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 3px 3px 0 0; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n display: none; }\n\n.tab-content > .active {\n display: block; }\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent; }\n .navbar:before, .navbar:after {\n content: \" \";\n display: table; }\n .navbar:after {\n clear: both; }\n @media (min-width: 768px) {\n .navbar {\n border-radius: 3px; } }\n\n.navbar-header:before, .navbar-header:after {\n content: \" \";\n display: table; }\n\n.navbar-header:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .navbar-header {\n float: left; } }\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch; }\n .navbar-collapse:before, .navbar-collapse:after {\n content: \" \";\n display: table; }\n .navbar-collapse:after {\n clear: both; }\n .navbar-collapse.in {\n overflow-y: auto; }\n @media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none; }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important; }\n .navbar-collapse.in {\n overflow-y: visible; }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px; }\n @media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px; }\n @media (min-width: 768px) {\n .container > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-header,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0; } }\n\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px; }\n @media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030; }\n @media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0; } }\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0; }\n\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px; }\n .navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none; }\n .navbar-brand > img {\n display: block; }\n @media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px; } }\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 3px; }\n .navbar-toggle:focus {\n outline: 0; }\n .navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px; }\n .navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px; }\n @media (min-width: 768px) {\n .navbar-toggle {\n display: none; } }\n\n.navbar-nav {\n margin: 7.5px -15px; }\n .navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px; }\n @media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none; }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px; }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px; }\n .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none; } }\n @media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0; }\n .navbar-nav > li {\n float: left; }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px; } }\n\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px; }\n @media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .navbar-form .form-control-static {\n display: inline-block; }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle; }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto; }\n .navbar-form .input-group > .form-control {\n width: 100%; }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0; }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0; } }\n @media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px; }\n .navbar-form .form-group:last-child {\n margin-bottom: 0; } }\n @media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px; }\n .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px; }\n .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px; }\n\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px; }\n @media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px; } }\n\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important; }\n .navbar-right {\n float: right !important;\n margin-right: -15px; }\n .navbar-right ~ .navbar-right {\n margin-right: 0; } }\n\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7; }\n .navbar-default .navbar-brand {\n color: #777; }\n .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent; }\n .navbar-default .navbar-text {\n color: #777; }\n .navbar-default .navbar-nav > li > a {\n color: #777; }\n .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; }\n .navbar-default .navbar-toggle {\n border-color: #ddd; }\n .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n background-color: #ddd; }\n .navbar-default .navbar-toggle .icon-bar {\n background-color: #888; }\n .navbar-default .navbar-collapse,\n .navbar-default .navbar-form {\n border-color: #e7e7e7; }\n .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555; }\n @media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777; }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; } }\n .navbar-default .navbar-link {\n color: #777; }\n .navbar-default .navbar-link:hover {\n color: #333; }\n .navbar-default .btn-link {\n color: #777; }\n .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n color: #333; }\n .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-default .btn-link:hover,\n fieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc; }\n\n.navbar-inverse {\n background-color: #222;\n border-color: #090909; }\n .navbar-inverse .navbar-brand {\n color: #9d9d9d; }\n .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-text {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent; }\n .navbar-inverse .navbar-toggle {\n border-color: #333; }\n .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n background-color: #333; }\n .navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff; }\n .navbar-inverse .navbar-collapse,\n .navbar-inverse .navbar-form {\n border-color: #101010; }\n .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #090909;\n color: #fff; }\n @media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent; } }\n .navbar-inverse .navbar-link {\n color: #9d9d9d; }\n .navbar-inverse .navbar-link:hover {\n color: #fff; }\n .navbar-inverse .btn-link {\n color: #9d9d9d; }\n .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n color: #fff; }\n .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-inverse .btn-link:hover,\n fieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444; }\n\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 3px; }\n .breadcrumb > li {\n display: inline-block; }\n .breadcrumb > li + li:before {\n content: \"/ \";\n padding: 0 5px;\n color: #ccc; }\n .breadcrumb > .active {\n color: #777777; }\n\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 3px; }\n .pagination > li {\n display: inline; }\n .pagination > li > a,\n .pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.428571429;\n text-decoration: none;\n color: #67808c;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px; }\n .pagination > li:first-child > a,\n .pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px; }\n .pagination > li:last-child > a,\n .pagination > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px; }\n .pagination > li > a:hover, .pagination > li > a:focus,\n .pagination > li > span:hover,\n .pagination > li > span:focus {\n z-index: 2;\n color: #465760;\n background-color: #eeeeee;\n border-color: #ddd; }\n .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n .pagination > .active > span,\n .pagination > .active > span:hover,\n .pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c;\n cursor: default; }\n .pagination > .disabled > span,\n .pagination > .disabled > span:hover,\n .pagination > .disabled > span:focus,\n .pagination > .disabled > a,\n .pagination > .disabled > a:hover,\n .pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px; }\n\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center; }\n .pager:before, .pager:after {\n content: \" \";\n display: table; }\n .pager:after {\n clear: both; }\n .pager li {\n display: inline; }\n .pager li > a,\n .pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px; }\n .pager li > a:hover,\n .pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .pager .next > a,\n .pager .next > span {\n float: right; }\n .pager .previous > a,\n .pager .previous > span {\n float: left; }\n .pager .disabled > a,\n .pager .disabled > a:hover,\n .pager .disabled > a:focus,\n .pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed; }\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em; }\n .label:empty {\n display: none; }\n .btn .label {\n position: relative;\n top: -1px; }\n\na.label:hover, a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.label-default {\n background-color: #777777; }\n .label-default[href]:hover, .label-default[href]:focus {\n background-color: #5e5e5e; }\n\n.label-primary {\n background-color: #67808c; }\n .label-primary[href]:hover, .label-primary[href]:focus {\n background-color: #51656f; }\n\n.label-success {\n background-color: #7ED321; }\n .label-success[href]:hover, .label-success[href]:focus {\n background-color: #64a71a; }\n\n.label-info {\n background-color: #3498db; }\n .label-info[href]:hover, .label-info[href]:focus {\n background-color: #217dbb; }\n\n.label-warning {\n background-color: #FF8800; }\n .label-warning[href]:hover, .label-warning[href]:focus {\n background-color: #cc6d00; }\n\n.label-danger {\n background-color: #ff6f6f; }\n .label-danger[href]:hover, .label-danger[href]:focus {\n background-color: #ff3c3c; }\n\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px; }\n .badge:empty {\n display: none; }\n .btn .badge {\n position: relative;\n top: -1px; }\n .btn-xs .badge, .btn-group-xs > .btn .badge,\n .btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px; }\n .list-group-item.active > .badge,\n .nav-pills > .active > a > .badge {\n color: #67808c;\n background-color: #fff; }\n .list-group-item > .badge {\n float: right; }\n .list-group-item > .badge + .badge {\n margin-right: 5px; }\n .nav-pills > li > a > .badge {\n margin-left: 3px; }\n\na.badge:hover, a.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee; }\n .jumbotron h1,\n .jumbotron .h1 {\n color: inherit; }\n .jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200; }\n .jumbotron > hr {\n border-top-color: #d5d5d5; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n border-radius: 4px;\n padding-left: 15px;\n padding-right: 15px; }\n .jumbotron .container {\n max-width: 100%; }\n @media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px; }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px; } }\n\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out; }\n .thumbnail > img,\n .thumbnail a > img {\n display: block;\n max-width: 100%;\n height: auto;\n margin-left: auto;\n margin-right: auto; }\n .thumbnail .caption {\n padding: 9px;\n color: #333333; }\n\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #67808c; }\n\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 3px; }\n .alert h4 {\n margin-top: 0;\n color: inherit; }\n .alert .alert-link {\n font-weight: bold; }\n .alert > p,\n .alert > ul {\n margin-bottom: 0; }\n .alert > p + p {\n margin-top: 5px; }\n\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px; }\n .alert-dismissable .close,\n .alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit; }\n\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d; }\n .alert-success hr {\n border-top-color: #c9e2b3; }\n .alert-success .alert-link {\n color: #2b542c; }\n\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f; }\n .alert-info hr {\n border-top-color: #a6e1ec; }\n .alert-info .alert-link {\n color: #245269; }\n\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b; }\n .alert-warning hr {\n border-top-color: #f7e1b5; }\n .alert-warning .alert-link {\n color: #66512c; }\n\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442; }\n .alert-danger hr {\n border-top-color: #e4b9c0; }\n .alert-danger .alert-link {\n color: #843534; }\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 3px;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #67808c;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n transition: width 0.6s ease; }\n\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px; }\n\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n background-color: #7ED321; }\n .progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n background-color: #3498db; }\n .progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n background-color: #FF8800; }\n .progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n background-color: #ff6f6f; }\n .progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media {\n margin-top: 15px; }\n .media:first-child {\n margin-top: 0; }\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden; }\n\n.media-body {\n width: 10000px; }\n\n.media-object {\n display: block; }\n .media-object.img-thumbnail {\n max-width: none; }\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px; }\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px; }\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top; }\n\n.media-middle {\n vertical-align: middle; }\n\n.media-bottom {\n vertical-align: bottom; }\n\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.media-list {\n padding-left: 0;\n list-style: none; }\n\n.list-group {\n margin-bottom: 20px;\n padding-left: 0; }\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd; }\n .list-group-item:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\na.list-group-item,\nbutton.list-group-item {\n color: #555; }\n a.list-group-item .list-group-item-heading,\n button.list-group-item .list-group-item-heading {\n color: #333; }\n a.list-group-item:hover, a.list-group-item:focus,\n button.list-group-item:hover,\n button.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5; }\n\nbutton.list-group-item {\n width: 100%;\n text-align: left; }\n\n.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed; }\n .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {\n color: inherit; }\n .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {\n color: #777777; }\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .list-group-item.active .list-group-item-heading,\n .list-group-item.active .list-group-item-heading > small,\n .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,\n .list-group-item.active:hover .list-group-item-heading > small,\n .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,\n .list-group-item.active:focus .list-group-item-heading > small,\n .list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit; }\n .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n color: #dbe1e4; }\n\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8; }\n\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d; }\n a.list-group-item-success .list-group-item-heading,\n button.list-group-item-success .list-group-item-heading {\n color: inherit; }\n a.list-group-item-success:hover, a.list-group-item-success:focus,\n button.list-group-item-success:hover,\n button.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6; }\n a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,\n button.list-group-item-success.active,\n button.list-group-item-success.active:hover,\n button.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d; }\n\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7; }\n\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f; }\n a.list-group-item-info .list-group-item-heading,\n button.list-group-item-info .list-group-item-heading {\n color: inherit; }\n a.list-group-item-info:hover, a.list-group-item-info:focus,\n button.list-group-item-info:hover,\n button.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3; }\n a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,\n button.list-group-item-info.active,\n button.list-group-item-info.active:hover,\n button.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f; }\n\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3; }\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b; }\n a.list-group-item-warning .list-group-item-heading,\n button.list-group-item-warning .list-group-item-heading {\n color: inherit; }\n a.list-group-item-warning:hover, a.list-group-item-warning:focus,\n button.list-group-item-warning:hover,\n button.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc; }\n a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,\n button.list-group-item-warning.active,\n button.list-group-item-warning.active:hover,\n button.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b; }\n\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede; }\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442; }\n a.list-group-item-danger .list-group-item-heading,\n button.list-group-item-danger .list-group-item-heading {\n color: inherit; }\n a.list-group-item-danger:hover, a.list-group-item-danger:focus,\n button.list-group-item-danger:hover,\n button.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc; }\n a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,\n button.list-group-item-danger.active,\n button.list-group-item-danger.active:hover,\n button.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442; }\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3; }\n\n.panel, body.status-page .list-group.components {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 3px;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n padding: 15px; }\n .panel-body:before, .panel-body:after {\n content: \" \";\n display: table; }\n .panel-body:after {\n clear: both; }\n\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel-heading > .dropdown .dropdown-toggle {\n color: inherit; }\n\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit; }\n .panel-title > a,\n .panel-title > small,\n .panel-title > .small,\n .panel-title > small > a,\n .panel-title > .small > a {\n color: inherit; }\n\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .list-group, body.status-page .list-group.components > .list-group,\n.panel > .panel-collapse > .list-group, body.status-page .list-group.components > .panel-collapse > .list-group {\n margin-bottom: 0; }\n .panel > .list-group .list-group-item, body.status-page .list-group.components > .list-group .list-group-item,\n .panel > .panel-collapse > .list-group .list-group-item, body.status-page .list-group.components > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0; }\n .panel > .list-group:first-child .list-group-item:first-child, body.status-page .list-group.components > .list-group:first-child .list-group-item:first-child,\n .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child, body.status-page .list-group.components > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .list-group:last-child .list-group-item:last-child, body.status-page .list-group.components > .list-group:last-child .list-group-item:last-child,\n .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child, body.status-page .list-group.components > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child, body.status-page .list-group.components > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0; }\n\n.list-group + .panel-footer {\n border-top-width: 0; }\n\n.panel > .table, body.status-page .list-group.components > .table,\n.panel > .table-responsive > .table, body.status-page .list-group.components > .table-responsive > .table,\n.panel > .panel-collapse > .table, body.status-page .list-group.components > .panel-collapse > .table {\n margin-bottom: 0; }\n .panel > .table caption, body.status-page .list-group.components > .table caption,\n .panel > .table-responsive > .table caption, body.status-page .list-group.components > .table-responsive > .table caption,\n .panel > .panel-collapse > .table caption, body.status-page .list-group.components > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px; }\n\n.panel > .table:first-child, body.status-page .list-group.components > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 2px;\n border-top-right-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 2px; }\n\n.panel > .table:last-child, body.status-page .list-group.components > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 2px;\n border-bottom-right-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 2px; }\n\n.panel > .panel-body + .table, body.status-page .list-group.components > .panel-body + .table,\n.panel > .panel-body + .table-responsive, body.status-page .list-group.components > .panel-body + .table-responsive,\n.panel > .table + .panel-body, body.status-page .list-group.components > .table + .panel-body,\n.panel > .table-responsive + .panel-body, body.status-page .list-group.components > .table-responsive + .panel-body {\n border-top: 1px solid #ddd; }\n\n.panel > .table > tbody:first-child > tr:first-child th, body.status-page .list-group.components > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td, body.status-page .list-group.components > .table > tbody:first-child > tr:first-child td {\n border-top: 0; }\n\n.panel > .table-bordered, body.status-page .list-group.components > .table-bordered,\n.panel > .table-responsive > .table-bordered, body.status-page .list-group.components > .table-responsive > .table-bordered {\n border: 0; }\n .panel > .table-bordered > thead > tr > th:first-child, body.status-page .list-group.components > .table-bordered > thead > tr > th:first-child,\n .panel > .table-bordered > thead > tr > td:first-child, body.status-page .list-group.components > .table-bordered > thead > tr > td:first-child,\n .panel > .table-bordered > tbody > tr > th:first-child, body.status-page .list-group.components > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-bordered > tbody > tr > td:first-child, body.status-page .list-group.components > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-bordered > tfoot > tr > th:first-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-bordered > tfoot > tr > td:first-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .panel > .table-bordered > thead > tr > th:last-child, body.status-page .list-group.components > .table-bordered > thead > tr > th:last-child,\n .panel > .table-bordered > thead > tr > td:last-child, body.status-page .list-group.components > .table-bordered > thead > tr > td:last-child,\n .panel > .table-bordered > tbody > tr > th:last-child, body.status-page .list-group.components > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-bordered > tbody > tr > td:last-child, body.status-page .list-group.components > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-bordered > tfoot > tr > th:last-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-bordered > tfoot > tr > td:last-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .panel > .table-bordered > thead > tr:first-child > td, body.status-page .list-group.components > .table-bordered > thead > tr:first-child > td,\n .panel > .table-bordered > thead > tr:first-child > th, body.status-page .list-group.components > .table-bordered > thead > tr:first-child > th,\n .panel > .table-bordered > tbody > tr:first-child > td, body.status-page .list-group.components > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-bordered > tbody > tr:first-child > th, body.status-page .list-group.components > .table-bordered > tbody > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0; }\n .panel > .table-bordered > tbody > tr:last-child > td, body.status-page .list-group.components > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-bordered > tbody > tr:last-child > th, body.status-page .list-group.components > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-bordered > tfoot > tr:last-child > td, body.status-page .list-group.components > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-bordered > tfoot > tr:last-child > th, body.status-page .list-group.components > .table-bordered > tfoot > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0; }\n\n.panel > .table-responsive, body.status-page .list-group.components > .table-responsive {\n border: 0;\n margin-bottom: 0; }\n\n.panel-group {\n margin-bottom: 20px; }\n .panel-group .panel, .panel-group body.status-page .list-group.components, body.status-page .panel-group .list-group.components {\n margin-bottom: 0;\n border-radius: 3px; }\n .panel-group .panel + .panel, .panel-group body.status-page .list-group.components + .panel, body.status-page .panel-group .list-group.components + .panel, .panel-group body.status-page .panel + .list-group.components, body.status-page .panel-group .panel + .list-group.components, .panel-group body.status-page .list-group.components + .list-group.components, body.status-page .panel-group .list-group.components + .list-group.components {\n margin-top: 5px; }\n .panel-group .panel-heading {\n border-bottom: 0; }\n .panel-group .panel-heading + .panel-collapse > .panel-body,\n .panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd; }\n .panel-group .panel-footer {\n border-top: 0; }\n .panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd; }\n\n.panel-default {\n border-color: #ddd; }\n .panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd; }\n .panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd; }\n .panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333; }\n .panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd; }\n\n.panel-primary {\n border-color: #67808c; }\n .panel-primary > .panel-heading {\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #67808c; }\n .panel-primary > .panel-heading .badge {\n color: #67808c;\n background-color: #fff; }\n .panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #67808c; }\n\n.panel-success {\n border-color: #d6e9c6; }\n .panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6; }\n .panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6; }\n\n.panel-info {\n border-color: #bce8f1; }\n .panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1; }\n .panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1; }\n\n.panel-warning {\n border-color: #faebcc; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc; }\n .panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc; }\n\n.panel-danger {\n border-color: #ebccd1; }\n .panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1; }\n .panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1; }\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden; }\n .embed-responsive .embed-responsive-item,\n .embed-responsive iframe,\n .embed-responsive embed,\n .embed-responsive object,\n .embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0; }\n\n.embed-responsive-16by9 {\n padding-bottom: 56.25%; }\n\n.embed-responsive-4by3 {\n padding-bottom: 75%; }\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 3px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n .well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n padding: 24px;\n border-radius: 4px; }\n\n.well-sm {\n padding: 9px;\n border-radius: 2px; }\n\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .close:hover, .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.428571429; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0); }\n .tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .tooltip.top {\n margin-top: -3px;\n padding: 5px 0; }\n .tooltip.right {\n margin-left: 3px;\n padding: 0 5px; }\n .tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0; }\n .tooltip.left {\n margin-left: -3px;\n padding: 0 5px; }\n\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #333;\n border-radius: 3px; }\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #333; }\n\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #333; }\n\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\n .popover.top {\n margin-top: -10px; }\n .popover.right {\n margin-left: 10px; }\n .popover.bottom {\n margin-top: 10px; }\n .popover.left {\n margin-left: -10px; }\n\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 3px 3px 0 0; }\n\n.popover-content {\n padding: 9px 14px; }\n\n.popover > .arrow, .popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.popover > .arrow {\n border-width: 11px; }\n\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\"; }\n\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px; }\n .popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff; }\n\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25); }\n .popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff; }\n\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px; }\n .popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff; }\n\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25); }\n .popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px; }\n\n.carousel {\n position: relative; }\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%; }\n .carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left; }\n .carousel-inner > .item > img,\n .carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n line-height: 1; }\n @media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n perspective: 1000px; }\n .carousel-inner > .item.next, .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.prev, .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0; } }\n .carousel-inner > .active,\n .carousel-inner > .next,\n .carousel-inner > .prev {\n display: block; }\n .carousel-inner > .active {\n left: 0; }\n .carousel-inner > .next,\n .carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%; }\n .carousel-inner > .next {\n left: 100%; }\n .carousel-inner > .prev {\n left: -100%; }\n .carousel-inner > .next.left,\n .carousel-inner > .prev.right {\n left: 0; }\n .carousel-inner > .active.left {\n left: -100%; }\n .carousel-inner > .active.right {\n left: 100%; }\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: transparent; }\n .carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n .carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n .carousel-control:hover, .carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .carousel-control .icon-prev,\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block; }\n .carousel-control .icon-prev,\n .carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px; }\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px; }\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif; }\n .carousel-control .icon-prev:before {\n content: '\\2039'; }\n .carousel-control .icon-next:before {\n content: '\\203a'; }\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center; }\n .carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: transparent; }\n .carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff; }\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n .carousel-caption .btn {\n text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px; }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px; }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px; }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px; }\n .carousel-indicators {\n bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n content: \" \";\n display: table; }\n\n.clearfix:after {\n clear: both; }\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.pull-right {\n float: right !important; }\n\n.pull-left {\n float: left !important; }\n\n.hide {\n display: none !important; }\n\n.show {\n display: block !important; }\n\n.invisible {\n visibility: hidden; }\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0; }\n\n.hidden {\n display: none !important; }\n\n.affix {\n position: fixed; }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident span, body.dashboard .sidebar .sidebar-inner > ul > li > a > span, body.dashboard .sidebar .bottom-menu-sidebar {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n\nhtml {\n position: relative;\n min-height: 100%;\n -webkit-font-smoothing: antialiased;\n overflow-y: scroll; }\n\nbody {\n margin-bottom: 60px;\n padding-bottom: 60px; }\n\n.uppercase {\n text-transform: uppercase; }\n\n.margin-top {\n margin-top: 20px; }\n\n.margin-bottom {\n margin-bottom: 20px; }\n\n.no-select {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\ndiv[role=tabpanel] ul.nav-tabs {\n border-bottom: 1px solid #d5d8d7; }\n div[role=tabpanel] ul.nav-tabs li a {\n font-weight: 400;\n display: inline-block;\n padding: 10px 25px;\n border-radius: 0;\n font-size: 0.9em;\n letter-spacing: 0.01em; }\n\ndiv[role=tabpanel] .tab-content {\n border-left: 1px solid #d5d8d7;\n border-bottom: 1px solid #d5d8d7;\n border-right: 1px solid #d5d8d7;\n background-color: white; }\n div[role=tabpanel] .tab-content .tab-pane {\n padding: 10px; }\n\nlabel {\n font-size: 14px; }\n\ntextarea {\n resize: none;\n overflow: auto; }\n\n.markdown-control {\n position: relative; }\n .markdown-control:before {\n position: absolute;\n display: block;\n right: 0%;\n bottom: 0%;\n width: 40px;\n height: 40px;\n font-size: 2em;\n font-family: \"Ionicons\";\n content: \"\\f4e6\"; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 45px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n box-shadow: none !important;\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9; }\n\n@media (max-width: 767px) {\n .component-inline .radio-items {\n text-align: left; }\n .component-inline .radio-items .radio-inline {\n margin-left: 0;\n width: 100%; } }\n\n.minicolors-theme-bootstrap .minicolors-swatch {\n top: 9px;\n left: 9px; }\n\n.well {\n border-radius: 0; }\n\n.alert {\n border-radius: 4px;\n background: #F7CA18;\n border: solid 2px #d5ab07; }\n .alert.alert-success {\n background-color: #7ED321;\n border: solid 2px #64a71a;\n color: white; }\n .alert.alert-success a {\n color: white;\n font-weight: bold; }\n .alert.alert-info {\n background: #3498db;\n border: solid 2px #217dbb;\n color: white; }\n .alert.alert-info a {\n color: white;\n font-weight: bold; }\n .alert.alert-danger {\n background: #ff6f6f;\n border: solid 2px #ff3c3c;\n color: white; }\n .alert.alert-danger a {\n color: white;\n font-weight: bold; }\n\n.panel-danger {\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading {\n color: white;\n background-color: #ff6f6f;\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ff3c3c; }\n .panel-danger > .panel-heading .badge {\n color: #ff6f6f;\n background-color: white; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ff3c3c; }\n\n.panel-success {\n border-color: #64a71a; }\n .panel-success > .panel-heading {\n color: white;\n background-color: #7ED321;\n border-color: #64a71a; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #64a71a; }\n .panel-success > .panel-heading .badge {\n color: #7ED321;\n background-color: white; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #64a71a; }\n\n.panel-info {\n border-color: #217dbb; }\n .panel-info > .panel-heading {\n color: white;\n background-color: #3498db;\n border-color: #217dbb; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #217dbb; }\n .panel-info > .panel-heading .badge {\n color: #3498db;\n background-color: white; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #217dbb; }\n\n.panel-warning {\n border-color: #d5ab07; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #F7CA18;\n border-color: #d5ab07; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d5ab07; }\n .panel-warning > .panel-heading .badge {\n color: #F7CA18;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d5ab07; }\n\n.btn.btn-default {\n color: #333;\n background: #fff;\n border: solid 1px #e6e6e6; }\n .btn.btn-default:hover, .btn.btn-default:focus, .btn.btn-default:active, .btn.btn-default.active {\n background: #f2f2f2;\n border-color: #e6e6e6;\n color: #333; }\n .btn.btn-default.disabled, .btn.btn-default.disabled:hover, .btn.btn-default.disabled:focus, .btn.btn-default.disabled:active, .btn.btn-default.disabled.active, .btn.btn-default[disabled], .btn.btn-default[disabled]:hover, .btn.btn-default[disabled]:focus, .btn.btn-default[disabled]:active, .btn.btn-default[disabled].active,\n fieldset[disabled] .btn.btn-default,\n fieldset[disabled] .btn.btn-default:hover,\n fieldset[disabled] .btn.btn-default:focus,\n fieldset[disabled] .btn.btn-default:active,\n fieldset[disabled] .btn.btn-default.active {\n background-color: white;\n border-color: #e6e6e6; }\n\n.btn.btn-primary {\n color: #fff;\n background: #67808c;\n border: solid 1px #51656f; }\n .btn.btn-primary:hover, .btn.btn-primary:focus, .btn.btn-primary:active, .btn.btn-primary.active {\n background: #5c727d;\n border-color: #51656f;\n color: #fff; }\n .btn.btn-primary.disabled, .btn.btn-primary.disabled:hover, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:active, .btn.btn-primary.disabled.active, .btn.btn-primary[disabled], .btn.btn-primary[disabled]:hover, .btn.btn-primary[disabled]:focus, .btn.btn-primary[disabled]:active, .btn.btn-primary[disabled].active,\n fieldset[disabled] .btn.btn-primary,\n fieldset[disabled] .btn.btn-primary:hover,\n fieldset[disabled] .btn.btn-primary:focus,\n fieldset[disabled] .btn.btn-primary:active,\n fieldset[disabled] .btn.btn-primary.active {\n background-color: #748c99;\n border-color: #51656f; }\n\n.btn.btn-success {\n color: #fff;\n background: #7ED321;\n border: solid 1px #64a71a; }\n .btn.btn-success:hover, .btn.btn-success:focus, .btn.btn-success:active, .btn.btn-success.active {\n background: #71bd1e;\n border-color: #64a71a;\n color: #fff; }\n .btn.btn-success.disabled, .btn.btn-success.disabled:hover, .btn.btn-success.disabled:focus, .btn.btn-success.disabled:active, .btn.btn-success.disabled.active, .btn.btn-success[disabled], .btn.btn-success[disabled]:hover, .btn.btn-success[disabled]:focus, .btn.btn-success[disabled]:active, .btn.btn-success[disabled].active,\n fieldset[disabled] .btn.btn-success,\n fieldset[disabled] .btn.btn-success:hover,\n fieldset[disabled] .btn.btn-success:focus,\n fieldset[disabled] .btn.btn-success:active,\n fieldset[disabled] .btn.btn-success.active {\n background-color: #8bde2f;\n border-color: #64a71a; }\n\n.btn.btn-info {\n color: #fff;\n background: #3498db;\n border: solid 1px #217dbb; }\n .btn.btn-info:hover, .btn.btn-info:focus, .btn.btn-info:active, .btn.btn-info.active {\n background: #258cd1;\n border-color: #217dbb;\n color: #fff; }\n .btn.btn-info.disabled, .btn.btn-info.disabled:hover, .btn.btn-info.disabled:focus, .btn.btn-info.disabled:active, .btn.btn-info.disabled.active, .btn.btn-info[disabled], .btn.btn-info[disabled]:hover, .btn.btn-info[disabled]:focus, .btn.btn-info[disabled]:active, .btn.btn-info[disabled].active,\n fieldset[disabled] .btn.btn-info,\n fieldset[disabled] .btn.btn-info:hover,\n fieldset[disabled] .btn.btn-info:focus,\n fieldset[disabled] .btn.btn-info:active,\n fieldset[disabled] .btn.btn-info.active {\n background-color: #4aa3df;\n border-color: #217dbb; }\n\n.btn.btn-warning {\n color: #fff;\n background: #FF8800;\n border: solid 1px #cc6d00; }\n .btn.btn-warning:hover, .btn.btn-warning:focus, .btn.btn-warning:active, .btn.btn-warning.active {\n background: #e67a00;\n border-color: #cc6d00;\n color: #fff; }\n .btn.btn-warning.disabled, .btn.btn-warning.disabled:hover, .btn.btn-warning.disabled:focus, .btn.btn-warning.disabled:active, .btn.btn-warning.disabled.active, .btn.btn-warning[disabled], .btn.btn-warning[disabled]:hover, .btn.btn-warning[disabled]:focus, .btn.btn-warning[disabled]:active, .btn.btn-warning[disabled].active,\n fieldset[disabled] .btn.btn-warning,\n fieldset[disabled] .btn.btn-warning:hover,\n fieldset[disabled] .btn.btn-warning:focus,\n fieldset[disabled] .btn.btn-warning:active,\n fieldset[disabled] .btn.btn-warning.active {\n background-color: #ff941a;\n border-color: #cc6d00; }\n\n.btn.btn-danger {\n color: #fff;\n background: #ff6f6f;\n border: solid 1px #ff3c3c; }\n .btn.btn-danger:hover, .btn.btn-danger:focus, .btn.btn-danger:active, .btn.btn-danger.active {\n background: #ff5656;\n border-color: #ff3c3c;\n color: #fff; }\n .btn.btn-danger.disabled, .btn.btn-danger.disabled:hover, .btn.btn-danger.disabled:focus, .btn.btn-danger.disabled:active, .btn.btn-danger.disabled.active, .btn.btn-danger[disabled], .btn.btn-danger[disabled]:hover, .btn.btn-danger[disabled]:focus, .btn.btn-danger[disabled]:active, .btn.btn-danger[disabled].active,\n fieldset[disabled] .btn.btn-danger,\n fieldset[disabled] .btn.btn-danger:hover,\n fieldset[disabled] .btn.btn-danger:focus,\n fieldset[disabled] .btn.btn-danger:active,\n fieldset[disabled] .btn.btn-danger.active {\n background-color: #ff8989;\n border-color: #ff3c3c; }\n\n.btn.btn-inverse {\n color: white;\n background: #474949;\n border: solid 1px #2e2f2f; }\n .btn.btn-inverse:hover, .btn.btn-inverse:focus, .btn.btn-inverse:active, .btn.btn-inverse.active {\n background: #3a3c3c;\n border-color: #2e2f2f;\n color: white; }\n .btn.btn-inverse.disabled, .btn.btn-inverse.disabled:hover, .btn.btn-inverse.disabled:focus, .btn.btn-inverse.disabled:active, .btn.btn-inverse.disabled.active, .btn.btn-inverse[disabled], .btn.btn-inverse[disabled]:hover, .btn.btn-inverse[disabled]:focus, .btn.btn-inverse[disabled]:active, .btn.btn-inverse[disabled].active,\n fieldset[disabled] .btn.btn-inverse,\n fieldset[disabled] .btn.btn-inverse:hover,\n fieldset[disabled] .btn.btn-inverse:focus,\n fieldset[disabled] .btn.btn-inverse:active,\n fieldset[disabled] .btn.btn-inverse.active {\n background-color: #545656;\n border-color: #2e2f2f; }\n\n.btn-outline {\n background-color: transparent;\n background-image: none !important;\n color: inherit;\n -webkit-transition: all .5s;\n transition: all .5s; }\n\n.btn-default.btn-outline {\n color: #999; }\n\n.btn-primary.btn-outline {\n color: #428bca; }\n\n.btn-success.btn-outline {\n color: #5cb85c; }\n\n.btn-info.btn-outline {\n color: #5bc0de; }\n\n.btn-warning.btn-outline {\n color: #f0ad4e; }\n\n.btn-danger.btn-outline {\n color: #d9534f; }\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff; }\n\n.pager li > a, .pager li > span {\n border-radius: 3px; }\n\nbody.dashboard {\n font-family: -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n font-weight: 400;\n font-size: 15px;\n display: table;\n width: 100%;\n height: 100%;\n table-layout: fixed;\n line-height: 1.42857143;\n -webkit-font-smoothing: antialiased; }\n body.dashboard .wrapper {\n padding-left: 0;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease; }\n body.dashboard .wrapper.toggled {\n padding-left: 230px; }\n body.dashboard .wrapper.toggled .sidebar {\n width: 230px; }\n body.dashboard .wrapper.toggled .page-content {\n position: absolute;\n margin-right: -230px; }\n @media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .wrapper {\n padding-left: 80px; } }\n @media (min-width: 991px) {\n body.dashboard .wrapper {\n padding-left: 230px; }\n body.dashboard .wrapper.toggled {\n padding-left: 0; }\n body.dashboard .wrapper.toggled .page-content {\n position: relative;\n margin-right: 0; } }\n body.dashboard .alerts .alert h5 {\n margin-top: 5px; }\n\nbody.dashboard .wrapper {\n width: 100%;\n display: table;\n height: 100%;\n table-layout: fixed; }\n\nbody.dashboard .navbar {\n z-index: 999;\n border-radius: 0px;\n border: none;\n border-bottom: 1px solid #00695c;\n background: #009c89;\n margin: 0; }\n body.dashboard .navbar a, body.dashboard .navbar a:active, body.dashboard .navbar a:visited {\n color: #ffffff; }\n body.dashboard .navbar a:hover, body.dashboard .navbar a:active:hover, body.dashboard .navbar a:visited:hover {\n color: #e9e9e9; }\n body.dashboard .navbar .navbar-toggle {\n margin-top: 15px;\n background: transparent;\n border-color: transparent; }\n body.dashboard .navbar .navbar-toggle.collapsed span {\n background-color: #ffffff; }\n body.dashboard .navbar .navbar-collapse {\n background: #009c89; }\n body.dashboard .navbar a.navbar-brand {\n padding: 34px 21px;\n line-height: 0em;\n font-size: 1.1em;\n letter-spacing: 0.04em;\n font-weight: 600;\n text-transform: uppercase; }\n @media (min-width: 991px) {\n body.dashboard .navbar a.navbar-brand span {\n padding-right: 10px; }\n body.dashboard .navbar a.navbar-brand span:before {\n font-family: FontAwesome;\n content: \"\\f060\"; } }\n body.dashboard .navbar .nav li a {\n height: 68px;\n line-height: 35px; }\n\nbody.dashboard .sidebar {\n position: fixed;\n left: 230px;\n width: 0;\n height: 100%;\n margin-left: -230px;\n overflow-y: auto;\n background: #333;\n box-shadow: inset 0px -2px 3px rgba(0, 0, 0, 0.25);\n z-index: 1000;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease; }\n body.dashboard .sidebar .sidebar-inner {\n position: absolute;\n top: 0;\n width: 230px;\n margin: 0;\n padding: 0;\n list-style: none; }\n body.dashboard .sidebar .sidebar-inner .profile {\n text-align: center;\n padding: 20px 10px;\n margin-bottom: 0; }\n body.dashboard .sidebar .sidebar-inner .profile .dropdown-toggle {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner .profile .dropdown-menu {\n top: 108%; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar {\n width: 60px; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar img {\n border-radius: 50%;\n width: 50px; }\n body.dashboard .sidebar .sidebar-inner .profile .username {\n word-break: break-all;\n margin-bottom: 0; }\n body.dashboard .sidebar .sidebar-inner .profile a {\n color: #ffffff;\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident {\n padding: 10px; }\n body.dashboard .sidebar .sidebar-inner ul {\n clear: both;\n margin: 0;\n padding: 0;\n list-style: none; }\n body.dashboard .sidebar .sidebar-inner ul li {\n font-size: 0.9em; }\n body.dashboard .sidebar .sidebar-inner ul li:focus, body.dashboard .sidebar .sidebar-inner ul li:hover {\n background: #404040 !important; }\n body.dashboard .sidebar .sidebar-inner ul li.active {\n background: #4d4d4d; }\n body.dashboard .sidebar .sidebar-inner ul li.active:hover {\n background: #595959 !important; }\n body.dashboard .sidebar .sidebar-inner ul li.active a {\n padding-top: 14px;\n padding-bottom: 14px;\n border-top: 1px solid #666;\n border-bottom: 1px solid #666;\n color: #ffffff; }\n body.dashboard .sidebar .sidebar-inner ul li.active a:focus, body.dashboard .sidebar .sidebar-inner ul li.active a:hover {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner ul li a {\n display: block;\n padding: 15px;\n color: #ffffff; }\n body.dashboard .sidebar .sidebar-inner ul li a i {\n font-size: 18px;\n min-width: 17px;\n text-align: center;\n position: relative;\n top: 1px;\n margin-right: 5px; }\n body.dashboard .sidebar .sidebar-inner ul li a:focus, body.dashboard .sidebar .sidebar-inner ul li a:hover {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner ul li a span.label {\n float: right;\n margin: 3px 0; }\n body.dashboard .sidebar .sidebar-inner ul li a span.label.label-info {\n background-color: #6DB81C; }\n body.dashboard .sidebar .sidebar-inner ul li.sub-nav-item a {\n padding-left: 40px; }\n body.dashboard .sidebar .bottom-menu-sidebar {\n position: fixed;\n bottom: 0;\n width: 230px;\n z-index: 999; }\n body.dashboard .sidebar .bottom-menu-sidebar ul > li {\n float: left;\n display: block;\n width: 33.333%;\n border-right: 1px solid #ddd;\n border-top: 1px solid #ddd; }\n body.dashboard .sidebar .bottom-menu-sidebar ul > li a {\n color: #333333;\n display: block;\n position: relative;\n text-align: center;\n padding: 6px 0;\n background: #fff; }\n\n@media (min-width: 767px) {\n body.dashboard .sidebar {\n width: 230px; }\n body.dashboard .wrapper.toggled .sidebar {\n width: 0; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .sidebar {\n width: 80px;\n left: 150px;\n margin-left: -150px; }\n body.dashboard .sidebar .sidebar-inner {\n width: 80px; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar img {\n width: 40px; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident .btn {\n padding: 3px 6px; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n font-size: 20px; }\n body.dashboard .sidebar .sidebar-inner > ul > li > a {\n text-align: center; }\n body.dashboard .sidebar .sidebar-inner > ul > li > a > i {\n font-size: 25px; } }\n\nbody.dashboard .sidebar-toggler {\n float: left;\n padding: 10px;\n position: relative;\n top: -15px;\n left: -5px;\n margin-right: 10px;\n cursor: pointer; }\n body.dashboard .sidebar-toggler i {\n font-size: 25px; }\n\nbody.dashboard .sub-sidebar {\n left: 0;\n top: 0;\n bottom: 0;\n position: fixed;\n margin-left: 228px;\n width: 22%;\n background: #F0F3F4;\n border-right: 1px solid #E8ECF1; }\n body.dashboard .sub-sidebar h3 {\n margin: 0;\n text-align: center;\n font-size: 19px;\n padding: 30px 15px 15px 15px; }\n body.dashboard .sub-sidebar hr {\n margin-top: 5px;\n margin-bottom: 5px; }\n body.dashboard .sub-sidebar ul.menu {\n list-style-type: none;\n padding: 0;\n margin: 0; }\n body.dashboard .sub-sidebar ul.menu li a {\n color: #666;\n display: block;\n padding: 13px 30px;\n font-size: 15px;\n -webkit-transition: all 0.2s linear;\n transition: all 0.2s linear;\n text-decoration: none; }\n body.dashboard .sub-sidebar ul.menu li a.active {\n color: #6DB81C; }\n body.dashboard .sub-sidebar ul.menu li a:hover {\n color: #6DB81C; }\n body.dashboard .sub-sidebar ul.menu li i {\n margin-right: 5px; }\n body.dashboard .sub-sidebar .sidebar-toggler {\n position: absolute;\n top: 3px;\n left: 20px;\n font-size: 36px;\n cursor: pointer; }\n body.dashboard .sub-sidebar + .content-wrapper {\n top: 0;\n position: relative;\n margin-left: 26%;\n padding-right: 40px !important; }\n\n@media (max-width: 767px) {\n body.dashboard .sub-sidebar {\n position: relative;\n margin-left: 0;\n width: 100%; }\n body.dashboard .sub-sidebar + .content-wrapper {\n margin-left: 0;\n padding-left: 40px !important;\n width: 100%; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .sub-sidebar {\n margin-left: 80px;\n width: 25%; }\n body.dashboard .sub-sidebar + .content-wrapper {\n padding-left: 45px !important; } }\n\nbody.dashboard .page-content {\n width: 100%; }\n body.dashboard .page-content .content-wrapper {\n padding-top: 20px;\n padding-left: 40px;\n padding-right: 40px; }\n body.dashboard .page-content .content-wrapper.header-fixed {\n margin-top: 60px; }\n body.dashboard .page-content .header {\n position: relative;\n top: 0;\n left: 0;\n color: #333;\n background-color: #fff;\n padding: 22px 40px;\n width: 100%;\n height: 70px;\n font-size: 1.2em;\n border-bottom: 1px solid #eee;\n z-index: 99; }\n body.dashboard .page-content .header.sub-header {\n padding: 8px 2px;\n height: 50px; }\n body.dashboard .page-content .header.fixed {\n position: fixed;\n padding-left: 270px; }\n body.dashboard .page-content .header input, body.dashboard .page-content .header button, body.dashboard .page-content .header .btn {\n position: relative;\n top: -4px; }\n body.dashboard .page-content .header input {\n width: 20%; }\n body.dashboard .page-content .header + .row, body.dashboard .page-content .setup-page .header + .steps, .setup-page body.dashboard .page-content .header + .steps {\n margin-top: 23px; }\n body.dashboard .page-content .header h3 {\n color: #444;\n margin-top: 0;\n text-transform: uppercase; }\n body.dashboard .page-content .header .ion, body.dashboard .page-content .header .ionicons, body.dashboard .page-content .header\n .ion-alert:before, body.dashboard .page-content .header\n .ion-alert-circled:before, body.dashboard .page-content .header\n .ion-android-add:before, body.dashboard .page-content .header\n .ion-android-add-circle:before, body.dashboard .page-content .header\n .ion-android-alarm-clock:before, body.dashboard .page-content .header\n .ion-android-alert:before, body.dashboard .page-content .header\n .ion-android-apps:before, body.dashboard .page-content .header\n .ion-android-archive:before, body.dashboard .page-content .header\n .ion-android-arrow-back:before, body.dashboard .page-content .header\n .ion-android-arrow-down:before, body.dashboard .page-content .header\n .ion-android-arrow-dropdown:before, body.dashboard .page-content .header\n .ion-android-arrow-dropdown-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropleft:before, body.dashboard .page-content .header\n .ion-android-arrow-dropleft-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropright:before, body.dashboard .page-content .header\n .ion-android-arrow-dropright-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropup:before, body.dashboard .page-content .header\n .ion-android-arrow-dropup-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-forward:before, body.dashboard .page-content .header\n .ion-android-arrow-up:before, body.dashboard .page-content .header\n .ion-android-attach:before, body.dashboard .page-content .header\n .ion-android-bar:before, body.dashboard .page-content .header\n .ion-android-bicycle:before, body.dashboard .page-content .header\n .ion-android-boat:before, body.dashboard .page-content .header\n .ion-android-bookmark:before, body.dashboard .page-content .header\n .ion-android-bulb:before, body.dashboard .page-content .header\n .ion-android-bus:before, body.dashboard .page-content .header\n .ion-android-calendar:before, body.dashboard .page-content .header\n .ion-android-call:before, body.dashboard .page-content .header\n .ion-android-camera:before, body.dashboard .page-content .header\n .ion-android-cancel:before, body.dashboard .page-content .header\n .ion-android-car:before, body.dashboard .page-content .header\n .ion-android-cart:before, body.dashboard .page-content .header\n .ion-android-chat:before, body.dashboard .page-content .header\n .ion-android-checkbox:before, body.dashboard .page-content .header\n .ion-android-checkbox-blank:before, body.dashboard .page-content .header\n .ion-android-checkbox-outline:before, body.dashboard .page-content .header\n .ion-android-checkbox-outline-blank:before, body.dashboard .page-content .header\n .ion-android-checkmark-circle:before, body.dashboard .page-content .header\n .ion-android-clipboard:before, body.dashboard .page-content .header\n .ion-android-close:before, body.dashboard .page-content .header\n .ion-android-cloud:before, body.dashboard .page-content .header\n .ion-android-cloud-circle:before, body.dashboard .page-content .header\n .ion-android-cloud-done:before, body.dashboard .page-content .header\n .ion-android-cloud-outline:before, body.dashboard .page-content .header\n .ion-android-color-palette:before, body.dashboard .page-content .header\n .ion-android-compass:before, body.dashboard .page-content .header\n .ion-android-contact:before, body.dashboard .page-content .header\n .ion-android-contacts:before, body.dashboard .page-content .header\n .ion-android-contract:before, body.dashboard .page-content .header\n .ion-android-create:before, body.dashboard .page-content .header\n .ion-android-delete:before, body.dashboard .page-content .header\n .ion-android-desktop:before, body.dashboard .page-content .header\n .ion-android-document:before, body.dashboard .page-content .header\n .ion-android-done:before, body.dashboard .page-content .header\n .ion-android-done-all:before, body.dashboard .page-content .header\n .ion-android-download:before, body.dashboard .page-content .header\n .ion-android-drafts:before, body.dashboard .page-content .header\n .ion-android-exit:before, body.dashboard .page-content .header\n .ion-android-expand:before, body.dashboard .page-content .header\n .ion-android-favorite:before, body.dashboard .page-content .header\n .ion-android-favorite-outline:before, body.dashboard .page-content .header\n .ion-android-film:before, body.dashboard .page-content .header\n .ion-android-folder:before, body.dashboard .page-content .header\n .ion-android-folder-open:before, body.dashboard .page-content .header\n .ion-android-funnel:before, body.dashboard .page-content .header\n .ion-android-globe:before, body.dashboard .page-content .header\n .ion-android-hand:before, body.dashboard .page-content .header\n .ion-android-hangout:before, body.dashboard .page-content .header\n .ion-android-happy:before, body.dashboard .page-content .header\n .ion-android-home:before, body.dashboard .page-content .header\n .ion-android-image:before, body.dashboard .page-content .header\n .ion-android-laptop:before, body.dashboard .page-content .header\n .ion-android-list:before, body.dashboard .page-content .header\n .ion-android-locate:before, body.dashboard .page-content .header\n .ion-android-lock:before, body.dashboard .page-content .header\n .ion-android-mail:before, body.dashboard .page-content .header\n .ion-android-map:before, body.dashboard .page-content .header\n .ion-android-menu:before, body.dashboard .page-content .header\n .ion-android-microphone:before, body.dashboard .page-content .header\n .ion-android-microphone-off:before, body.dashboard .page-content .header\n .ion-android-more-horizontal:before, body.dashboard .page-content .header\n .ion-android-more-vertical:before, body.dashboard .page-content .header\n .ion-android-navigate:before, body.dashboard .page-content .header\n .ion-android-notifications:before, body.dashboard .page-content .header\n .ion-android-notifications-none:before, body.dashboard .page-content .header\n .ion-android-notifications-off:before, body.dashboard .page-content .header\n .ion-android-open:before, body.dashboard .page-content .header\n .ion-android-options:before, body.dashboard .page-content .header\n .ion-android-people:before, body.dashboard .page-content .header\n .ion-android-person:before, body.dashboard .page-content .header\n .ion-android-person-add:before, body.dashboard .page-content .header\n .ion-android-phone-landscape:before, body.dashboard .page-content .header\n .ion-android-phone-portrait:before, body.dashboard .page-content .header\n .ion-android-pin:before, body.dashboard .page-content .header\n .ion-android-plane:before, body.dashboard .page-content .header\n .ion-android-playstore:before, body.dashboard .page-content .header\n .ion-android-print:before, body.dashboard .page-content .header\n .ion-android-radio-button-off:before, body.dashboard .page-content .header\n .ion-android-radio-button-on:before, body.dashboard .page-content .header\n .ion-android-refresh:before, body.dashboard .page-content .header\n .ion-android-remove:before, body.dashboard .page-content .header\n .ion-android-remove-circle:before, body.dashboard .page-content .header\n .ion-android-restaurant:before, body.dashboard .page-content .header\n .ion-android-sad:before, body.dashboard .page-content .header\n .ion-android-search:before, body.dashboard .page-content .header\n .ion-android-send:before, body.dashboard .page-content .header\n .ion-android-settings:before, body.dashboard .page-content .header\n .ion-android-share:before, body.dashboard .page-content .header\n .ion-android-share-alt:before, body.dashboard .page-content .header\n .ion-android-star:before, body.dashboard .page-content .header\n .ion-android-star-half:before, body.dashboard .page-content .header\n .ion-android-star-outline:before, body.dashboard .page-content .header\n .ion-android-stopwatch:before, body.dashboard .page-content .header\n .ion-android-subway:before, body.dashboard .page-content .header\n .ion-android-sunny:before, body.dashboard .page-content .header\n .ion-android-sync:before, body.dashboard .page-content .header\n .ion-android-textsms:before, body.dashboard .page-content .header\n .ion-android-time:before, body.dashboard .page-content .header\n .ion-android-train:before, body.dashboard .page-content .header\n .ion-android-unlock:before, body.dashboard .page-content .header\n .ion-android-upload:before, body.dashboard .page-content .header\n .ion-android-volume-down:before, body.dashboard .page-content .header\n .ion-android-volume-mute:before, body.dashboard .page-content .header\n .ion-android-volume-off:before, body.dashboard .page-content .header\n .ion-android-volume-up:before, body.dashboard .page-content .header\n .ion-android-walk:before, body.dashboard .page-content .header\n .ion-android-warning:before, body.dashboard .page-content .header\n .ion-android-watch:before, body.dashboard .page-content .header\n .ion-android-wifi:before, body.dashboard .page-content .header\n .ion-aperture:before, body.dashboard .page-content .header\n .ion-archive:before, body.dashboard .page-content .header\n .ion-arrow-down-a:before, body.dashboard .page-content .header\n .ion-arrow-down-b:before, body.dashboard .page-content .header\n .ion-arrow-down-c:before, body.dashboard .page-content .header\n .ion-arrow-expand:before, body.dashboard .page-content .header\n .ion-arrow-graph-down-left:before, body.dashboard .page-content .header\n .ion-arrow-graph-down-right:before, body.dashboard .page-content .header\n .ion-arrow-graph-up-left:before, body.dashboard .page-content .header\n .ion-arrow-graph-up-right:before, body.dashboard .page-content .header\n .ion-arrow-left-a:before, body.dashboard .page-content .header\n .ion-arrow-left-b:before, body.dashboard .page-content .header\n .ion-arrow-left-c:before, body.dashboard .page-content .header\n .ion-arrow-move:before, body.dashboard .page-content .header\n .ion-arrow-resize:before, body.dashboard .page-content .header\n .ion-arrow-return-left:before, body.dashboard .page-content .header\n .ion-arrow-return-right:before, body.dashboard .page-content .header\n .ion-arrow-right-a:before, body.dashboard .page-content .header\n .ion-arrow-right-b:before, body.dashboard .page-content .header\n .ion-arrow-right-c:before, body.dashboard .page-content .header\n .ion-arrow-shrink:before, body.dashboard .page-content .header\n .ion-arrow-swap:before, body.dashboard .page-content .header\n .ion-arrow-up-a:before, body.dashboard .page-content .header\n .ion-arrow-up-b:before, body.dashboard .page-content .header\n .ion-arrow-up-c:before, body.dashboard .page-content .header\n .ion-asterisk:before, body.dashboard .page-content .header\n .ion-at:before, body.dashboard .page-content .header\n .ion-backspace:before, body.dashboard .page-content .header\n .ion-backspace-outline:before, body.dashboard .page-content .header\n .ion-bag:before, body.dashboard .page-content .header\n .ion-battery-charging:before, body.dashboard .page-content .header\n .ion-battery-empty:before, body.dashboard .page-content .header\n .ion-battery-full:before, body.dashboard .page-content .header\n .ion-battery-half:before, body.dashboard .page-content .header\n .ion-battery-low:before, body.dashboard .page-content .header\n .ion-beaker:before, body.dashboard .page-content .header\n .ion-beer:before, body.dashboard .page-content .header\n .ion-bluetooth:before, body.dashboard .page-content .header\n .ion-bonfire:before, body.dashboard .page-content .header\n .ion-bookmark:before, body.dashboard .page-content .header\n .ion-bowtie:before, body.dashboard .page-content .header\n .ion-briefcase:before, body.dashboard .page-content .header\n .ion-bug:before, body.dashboard .page-content .header\n .ion-calculator:before, body.dashboard .page-content .header\n .ion-calendar:before, body.dashboard .page-content .header\n .ion-camera:before, body.dashboard .page-content .header\n .ion-card:before, body.dashboard .page-content .header\n .ion-cash:before, body.dashboard .page-content .header\n .ion-chatbox:before, body.dashboard .page-content .header\n .ion-chatbox-working:before, body.dashboard .page-content .header\n .ion-chatboxes:before, body.dashboard .page-content .header\n .ion-chatbubble:before, body.dashboard .page-content .header\n .ion-chatbubble-working:before, body.dashboard .page-content .header\n .ion-chatbubbles:before, body.dashboard .page-content .header\n .ion-checkmark:before, body.dashboard .page-content .header\n .ion-checkmark-circled:before, body.dashboard .page-content .header\n .ion-checkmark-round:before, body.dashboard .page-content .header\n .ion-chevron-down:before, body.dashboard .page-content .header\n .ion-chevron-left:before, body.dashboard .page-content .header\n .ion-chevron-right:before, body.dashboard .page-content .header\n .ion-chevron-up:before, body.dashboard .page-content .header\n .ion-clipboard:before, body.dashboard .page-content .header\n .ion-clock:before, body.dashboard .page-content .header\n .ion-close:before, body.dashboard .page-content .header\n .ion-close-circled:before, body.dashboard .page-content .header\n .ion-close-round:before, body.dashboard .page-content .header\n .ion-closed-captioning:before, body.dashboard .page-content .header\n .ion-cloud:before, body.dashboard .page-content .header\n .ion-code:before, body.dashboard .page-content .header\n .ion-code-download:before, body.dashboard .page-content .header\n .ion-code-working:before, body.dashboard .page-content .header\n .ion-coffee:before, body.dashboard .page-content .header\n .ion-compass:before, body.dashboard .page-content .header\n .ion-compose:before, body.dashboard .page-content .header\n .ion-connection-bars:before, body.dashboard .page-content .header\n .ion-contrast:before, body.dashboard .page-content .header\n .ion-crop:before, body.dashboard .page-content .header\n .ion-cube:before, body.dashboard .page-content .header\n .ion-disc:before, body.dashboard .page-content .header\n .ion-document:before, body.dashboard .page-content .header\n .ion-document-text:before, body.dashboard .page-content .header\n .ion-drag:before, body.dashboard .page-content .header\n .ion-earth:before, body.dashboard .page-content .header\n .ion-easel:before, body.dashboard .page-content .header\n .ion-edit:before, body.dashboard .page-content .header\n .ion-egg:before, body.dashboard .page-content .header\n .ion-eject:before, body.dashboard .page-content .header\n .ion-email:before, body.dashboard .page-content .header\n .ion-email-unread:before, body.dashboard .page-content .header\n .ion-erlenmeyer-flask:before, body.dashboard .page-content .header\n .ion-erlenmeyer-flask-bubbles:before, body.dashboard .page-content .header\n .ion-eye:before, body.dashboard .page-content .header\n .ion-eye-disabled:before, body.dashboard .page-content .header\n .ion-female:before, body.dashboard .page-content .header\n .ion-filing:before, body.dashboard .page-content .header\n .ion-film-marker:before, body.dashboard .page-content .header\n .ion-fireball:before, body.dashboard .page-content .header\n .ion-flag:before, body.dashboard .page-content .header\n .ion-flame:before, body.dashboard .page-content .header\n .ion-flash:before, body.dashboard .page-content .header\n .ion-flash-off:before, body.dashboard .page-content .header\n .ion-folder:before, body.dashboard .page-content .header\n .ion-fork:before, body.dashboard .page-content .header\n .ion-fork-repo:before, body.dashboard .page-content .header\n .ion-forward:before, body.dashboard .page-content .header\n .ion-funnel:before, body.dashboard .page-content .header\n .ion-gear-a:before, body.dashboard .page-content .header\n .ion-gear-b:before, body.dashboard .page-content .header\n .ion-grid:before, body.dashboard .page-content .header\n .ion-hammer:before, body.dashboard .page-content .header\n .ion-happy:before, body.dashboard .page-content .header\n .ion-happy-outline:before, body.dashboard .page-content .header\n .ion-headphone:before, body.dashboard .page-content .header\n .ion-heart:before, body.dashboard .page-content .header\n .ion-heart-broken:before, body.dashboard .page-content .header\n .ion-help:before, body.dashboard .page-content .header\n .ion-help-buoy:before, body.dashboard .page-content .header\n .ion-help-circled:before, body.dashboard .page-content .header\n .ion-home:before, body.dashboard .page-content .header\n .ion-icecream:before, body.dashboard .page-content .header\n .ion-image:before, body.dashboard .page-content .header\n .ion-images:before, body.dashboard .page-content .header\n .ion-information:before, body.dashboard .page-content .header\n .ion-information-circled:before, body.dashboard .page-content .header\n .ion-ionic:before, body.dashboard .page-content .header\n .ion-ios-alarm:before, body.dashboard .page-content .header\n .ion-ios-alarm-outline:before, body.dashboard .page-content .header\n .ion-ios-albums:before, body.dashboard .page-content .header\n .ion-ios-albums-outline:before, body.dashboard .page-content .header\n .ion-ios-americanfootball:before, body.dashboard .page-content .header\n .ion-ios-americanfootball-outline:before, body.dashboard .page-content .header\n .ion-ios-analytics:before, body.dashboard .page-content .header\n .ion-ios-analytics-outline:before, body.dashboard .page-content .header\n .ion-ios-arrow-back:before, body.dashboard .page-content .header\n .ion-ios-arrow-down:before, body.dashboard .page-content .header\n .ion-ios-arrow-forward:before, body.dashboard .page-content .header\n .ion-ios-arrow-left:before, body.dashboard .page-content .header\n .ion-ios-arrow-right:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-down:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-left:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-right:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-up:before, body.dashboard .page-content .header\n .ion-ios-arrow-up:before, body.dashboard .page-content .header\n .ion-ios-at:before, body.dashboard .page-content .header\n .ion-ios-at-outline:before, body.dashboard .page-content .header\n .ion-ios-barcode:before, body.dashboard .page-content .header\n .ion-ios-barcode-outline:before, body.dashboard .page-content .header\n .ion-ios-baseball:before, body.dashboard .page-content .header\n .ion-ios-baseball-outline:before, body.dashboard .page-content .header\n .ion-ios-basketball:before, body.dashboard .page-content .header\n .ion-ios-basketball-outline:before, body.dashboard .page-content .header\n .ion-ios-bell:before, body.dashboard .page-content .header\n .ion-ios-bell-outline:before, body.dashboard .page-content .header\n .ion-ios-body:before, body.dashboard .page-content .header\n .ion-ios-body-outline:before, body.dashboard .page-content .header\n .ion-ios-bolt:before, body.dashboard .page-content .header\n .ion-ios-bolt-outline:before, body.dashboard .page-content .header\n .ion-ios-book:before, body.dashboard .page-content .header\n .ion-ios-book-outline:before, body.dashboard .page-content .header\n .ion-ios-bookmarks:before, body.dashboard .page-content .header\n .ion-ios-bookmarks-outline:before, body.dashboard .page-content .header\n .ion-ios-box:before, body.dashboard .page-content .header\n .ion-ios-box-outline:before, body.dashboard .page-content .header\n .ion-ios-briefcase:before, body.dashboard .page-content .header\n .ion-ios-briefcase-outline:before, body.dashboard .page-content .header\n .ion-ios-browsers:before, body.dashboard .page-content .header\n .ion-ios-browsers-outline:before, body.dashboard .page-content .header\n .ion-ios-calculator:before, body.dashboard .page-content .header\n .ion-ios-calculator-outline:before, body.dashboard .page-content .header\n .ion-ios-calendar:before, body.dashboard .page-content .header\n .ion-ios-calendar-outline:before, body.dashboard .page-content .header\n .ion-ios-camera:before, body.dashboard .page-content .header\n .ion-ios-camera-outline:before, body.dashboard .page-content .header\n .ion-ios-cart:before, body.dashboard .page-content .header\n .ion-ios-cart-outline:before, body.dashboard .page-content .header\n .ion-ios-chatboxes:before, body.dashboard .page-content .header\n .ion-ios-chatboxes-outline:before, body.dashboard .page-content .header\n .ion-ios-chatbubble:before, body.dashboard .page-content .header\n .ion-ios-chatbubble-outline:before, body.dashboard .page-content .header\n .ion-ios-checkmark:before, body.dashboard .page-content .header\n .ion-ios-checkmark-empty:before, body.dashboard .page-content .header\n .ion-ios-checkmark-outline:before, body.dashboard .page-content .header\n .ion-ios-circle-filled:before, body.dashboard .page-content .header\n .ion-ios-circle-outline:before, body.dashboard .page-content .header\n .ion-ios-clock:before, body.dashboard .page-content .header\n .ion-ios-clock-outline:before, body.dashboard .page-content .header\n .ion-ios-close:before, body.dashboard .page-content .header\n .ion-ios-close-empty:before, body.dashboard .page-content .header\n .ion-ios-close-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud:before, body.dashboard .page-content .header\n .ion-ios-cloud-download:before, body.dashboard .page-content .header\n .ion-ios-cloud-download-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud-upload:before, body.dashboard .page-content .header\n .ion-ios-cloud-upload-outline:before, body.dashboard .page-content .header\n .ion-ios-cloudy:before, body.dashboard .page-content .header\n .ion-ios-cloudy-night:before, body.dashboard .page-content .header\n .ion-ios-cloudy-night-outline:before, body.dashboard .page-content .header\n .ion-ios-cloudy-outline:before, body.dashboard .page-content .header\n .ion-ios-cog:before, body.dashboard .page-content .header\n .ion-ios-cog-outline:before, body.dashboard .page-content .header\n .ion-ios-color-filter:before, body.dashboard .page-content .header\n .ion-ios-color-filter-outline:before, body.dashboard .page-content .header\n .ion-ios-color-wand:before, body.dashboard .page-content .header\n .ion-ios-color-wand-outline:before, body.dashboard .page-content .header\n .ion-ios-compose:before, body.dashboard .page-content .header\n .ion-ios-compose-outline:before, body.dashboard .page-content .header\n .ion-ios-contact:before, body.dashboard .page-content .header\n .ion-ios-contact-outline:before, body.dashboard .page-content .header\n .ion-ios-copy:before, body.dashboard .page-content .header\n .ion-ios-copy-outline:before, body.dashboard .page-content .header\n .ion-ios-crop:before, body.dashboard .page-content .header\n .ion-ios-crop-strong:before, body.dashboard .page-content .header\n .ion-ios-download:before, body.dashboard .page-content .header\n .ion-ios-download-outline:before, body.dashboard .page-content .header\n .ion-ios-drag:before, body.dashboard .page-content .header\n .ion-ios-email:before, body.dashboard .page-content .header\n .ion-ios-email-outline:before, body.dashboard .page-content .header\n .ion-ios-eye:before, body.dashboard .page-content .header\n .ion-ios-eye-outline:before, body.dashboard .page-content .header\n .ion-ios-fastforward:before, body.dashboard .page-content .header\n .ion-ios-fastforward-outline:before, body.dashboard .page-content .header\n .ion-ios-filing:before, body.dashboard .page-content .header\n .ion-ios-filing-outline:before, body.dashboard .page-content .header\n .ion-ios-film:before, body.dashboard .page-content .header\n .ion-ios-film-outline:before, body.dashboard .page-content .header\n .ion-ios-flag:before, body.dashboard .page-content .header\n .ion-ios-flag-outline:before, body.dashboard .page-content .header\n .ion-ios-flame:before, body.dashboard .page-content .header\n .ion-ios-flame-outline:before, body.dashboard .page-content .header\n .ion-ios-flask:before, body.dashboard .page-content .header\n .ion-ios-flask-outline:before, body.dashboard .page-content .header\n .ion-ios-flower:before, body.dashboard .page-content .header\n .ion-ios-flower-outline:before, body.dashboard .page-content .header\n .ion-ios-folder:before, body.dashboard .page-content .header\n .ion-ios-folder-outline:before, body.dashboard .page-content .header\n .ion-ios-football:before, body.dashboard .page-content .header\n .ion-ios-football-outline:before, body.dashboard .page-content .header\n .ion-ios-game-controller-a:before, body.dashboard .page-content .header\n .ion-ios-game-controller-a-outline:before, body.dashboard .page-content .header\n .ion-ios-game-controller-b:before, body.dashboard .page-content .header\n .ion-ios-game-controller-b-outline:before, body.dashboard .page-content .header\n .ion-ios-gear:before, body.dashboard .page-content .header\n .ion-ios-gear-outline:before, body.dashboard .page-content .header\n .ion-ios-glasses:before, body.dashboard .page-content .header\n .ion-ios-glasses-outline:before, body.dashboard .page-content .header\n .ion-ios-grid-view:before, body.dashboard .page-content .header\n .ion-ios-grid-view-outline:before, body.dashboard .page-content .header\n .ion-ios-heart:before, body.dashboard .page-content .header\n .ion-ios-heart-outline:before, body.dashboard .page-content .header\n .ion-ios-help:before, body.dashboard .page-content .header\n .ion-ios-help-empty:before, body.dashboard .page-content .header\n .ion-ios-help-outline:before, body.dashboard .page-content .header\n .ion-ios-home:before, body.dashboard .page-content .header\n .ion-ios-home-outline:before, body.dashboard .page-content .header\n .ion-ios-infinite:before, body.dashboard .page-content .header\n .ion-ios-infinite-outline:before, body.dashboard .page-content .header\n .ion-ios-information:before, body.dashboard .page-content .header\n .ion-ios-information-empty:before, body.dashboard .page-content .header\n .ion-ios-information-outline:before, body.dashboard .page-content .header\n .ion-ios-ionic-outline:before, body.dashboard .page-content .header\n .ion-ios-keypad:before, body.dashboard .page-content .header\n .ion-ios-keypad-outline:before, body.dashboard .page-content .header\n .ion-ios-lightbulb:before, body.dashboard .page-content .header\n .ion-ios-lightbulb-outline:before, body.dashboard .page-content .header\n .ion-ios-list:before, body.dashboard .page-content .header\n .ion-ios-list-outline:before, body.dashboard .page-content .header\n .ion-ios-location:before, body.dashboard .page-content .header\n .ion-ios-location-outline:before, body.dashboard .page-content .header\n .ion-ios-locked:before, body.dashboard .page-content .header\n .ion-ios-locked-outline:before, body.dashboard .page-content .header\n .ion-ios-loop:before, body.dashboard .page-content .header\n .ion-ios-loop-strong:before, body.dashboard .page-content .header\n .ion-ios-medical:before, body.dashboard .page-content .header\n .ion-ios-medical-outline:before, body.dashboard .page-content .header\n .ion-ios-medkit:before, body.dashboard .page-content .header\n .ion-ios-medkit-outline:before, body.dashboard .page-content .header\n .ion-ios-mic:before, body.dashboard .page-content .header\n .ion-ios-mic-off:before, body.dashboard .page-content .header\n .ion-ios-mic-outline:before, body.dashboard .page-content .header\n .ion-ios-minus:before, body.dashboard .page-content .header\n .ion-ios-minus-empty:before, body.dashboard .page-content .header\n .ion-ios-minus-outline:before, body.dashboard .page-content .header\n .ion-ios-monitor:before, body.dashboard .page-content .header\n .ion-ios-monitor-outline:before, body.dashboard .page-content .header\n .ion-ios-moon:before, body.dashboard .page-content .header\n .ion-ios-moon-outline:before, body.dashboard .page-content .header\n .ion-ios-more:before, body.dashboard .page-content .header\n .ion-ios-more-outline:before, body.dashboard .page-content .header\n .ion-ios-musical-note:before, body.dashboard .page-content .header\n .ion-ios-musical-notes:before, body.dashboard .page-content .header\n .ion-ios-navigate:before, body.dashboard .page-content .header\n .ion-ios-navigate-outline:before, body.dashboard .page-content .header\n .ion-ios-nutrition:before, body.dashboard .page-content .header\n .ion-ios-nutrition-outline:before, body.dashboard .page-content .header\n .ion-ios-paper:before, body.dashboard .page-content .header\n .ion-ios-paper-outline:before, body.dashboard .page-content .header\n .ion-ios-paperplane:before, body.dashboard .page-content .header\n .ion-ios-paperplane-outline:before, body.dashboard .page-content .header\n .ion-ios-partlysunny:before, body.dashboard .page-content .header\n .ion-ios-partlysunny-outline:before, body.dashboard .page-content .header\n .ion-ios-pause:before, body.dashboard .page-content .header\n .ion-ios-pause-outline:before, body.dashboard .page-content .header\n .ion-ios-paw:before, body.dashboard .page-content .header\n .ion-ios-paw-outline:before, body.dashboard .page-content .header\n .ion-ios-people:before, body.dashboard .page-content .header\n .ion-ios-people-outline:before, body.dashboard .page-content .header\n .ion-ios-person:before, body.dashboard .page-content .header\n .ion-ios-person-outline:before, body.dashboard .page-content .header\n .ion-ios-personadd:before, body.dashboard .page-content .header\n .ion-ios-personadd-outline:before, body.dashboard .page-content .header\n .ion-ios-photos:before, body.dashboard .page-content .header\n .ion-ios-photos-outline:before, body.dashboard .page-content .header\n .ion-ios-pie:before, body.dashboard .page-content .header\n .ion-ios-pie-outline:before, body.dashboard .page-content .header\n .ion-ios-pint:before, body.dashboard .page-content .header\n .ion-ios-pint-outline:before, body.dashboard .page-content .header\n .ion-ios-play:before, body.dashboard .page-content .header\n .ion-ios-play-outline:before, body.dashboard .page-content .header\n .ion-ios-plus:before, body.dashboard .page-content .header\n .ion-ios-plus-empty:before, body.dashboard .page-content .header\n .ion-ios-plus-outline:before, body.dashboard .page-content .header\n .ion-ios-pricetag:before, body.dashboard .page-content .header\n .ion-ios-pricetag-outline:before, body.dashboard .page-content .header\n .ion-ios-pricetags:before, body.dashboard .page-content .header\n .ion-ios-pricetags-outline:before, body.dashboard .page-content .header\n .ion-ios-printer:before, body.dashboard .page-content .header\n .ion-ios-printer-outline:before, body.dashboard .page-content .header\n .ion-ios-pulse:before, body.dashboard .page-content .header\n .ion-ios-pulse-strong:before, body.dashboard .page-content .header\n .ion-ios-rainy:before, body.dashboard .page-content .header\n .ion-ios-rainy-outline:before, body.dashboard .page-content .header\n .ion-ios-recording:before, body.dashboard .page-content .header\n .ion-ios-recording-outline:before, body.dashboard .page-content .header\n .ion-ios-redo:before, body.dashboard .page-content .header\n .ion-ios-redo-outline:before, body.dashboard .page-content .header\n .ion-ios-refresh:before, body.dashboard .page-content .header\n .ion-ios-refresh-empty:before, body.dashboard .page-content .header\n .ion-ios-refresh-outline:before, body.dashboard .page-content .header\n .ion-ios-reload:before, body.dashboard .page-content .header\n .ion-ios-reverse-camera:before, body.dashboard .page-content .header\n .ion-ios-reverse-camera-outline:before, body.dashboard .page-content .header\n .ion-ios-rewind:before, body.dashboard .page-content .header\n .ion-ios-rewind-outline:before, body.dashboard .page-content .header\n .ion-ios-rose:before, body.dashboard .page-content .header\n .ion-ios-rose-outline:before, body.dashboard .page-content .header\n .ion-ios-search:before, body.dashboard .page-content .header\n .ion-ios-search-strong:before, body.dashboard .page-content .header\n .ion-ios-settings:before, body.dashboard .page-content .header\n .ion-ios-settings-strong:before, body.dashboard .page-content .header\n .ion-ios-shuffle:before, body.dashboard .page-content .header\n .ion-ios-shuffle-strong:before, body.dashboard .page-content .header\n .ion-ios-skipbackward:before, body.dashboard .page-content .header\n .ion-ios-skipbackward-outline:before, body.dashboard .page-content .header\n .ion-ios-skipforward:before, body.dashboard .page-content .header\n .ion-ios-skipforward-outline:before, body.dashboard .page-content .header\n .ion-ios-snowy:before, body.dashboard .page-content .header\n .ion-ios-speedometer:before, body.dashboard .page-content .header\n .ion-ios-speedometer-outline:before, body.dashboard .page-content .header\n .ion-ios-star:before, body.dashboard .page-content .header\n .ion-ios-star-half:before, body.dashboard .page-content .header\n .ion-ios-star-outline:before, body.dashboard .page-content .header\n .ion-ios-stopwatch:before, body.dashboard .page-content .header\n .ion-ios-stopwatch-outline:before, body.dashboard .page-content .header\n .ion-ios-sunny:before, body.dashboard .page-content .header\n .ion-ios-sunny-outline:before, body.dashboard .page-content .header\n .ion-ios-telephone:before, body.dashboard .page-content .header\n .ion-ios-telephone-outline:before, body.dashboard .page-content .header\n .ion-ios-tennisball:before, body.dashboard .page-content .header\n .ion-ios-tennisball-outline:before, body.dashboard .page-content .header\n .ion-ios-thunderstorm:before, body.dashboard .page-content .header\n .ion-ios-thunderstorm-outline:before, body.dashboard .page-content .header\n .ion-ios-time:before, body.dashboard .page-content .header\n .ion-ios-time-outline:before, body.dashboard .page-content .header\n .ion-ios-timer:before, body.dashboard .page-content .header\n .ion-ios-timer-outline:before, body.dashboard .page-content .header\n .ion-ios-toggle:before, body.dashboard .page-content .header\n .ion-ios-toggle-outline:before, body.dashboard .page-content .header\n .ion-ios-trash:before, body.dashboard .page-content .header\n .ion-ios-trash-outline:before, body.dashboard .page-content .header\n .ion-ios-undo:before, body.dashboard .page-content .header\n .ion-ios-undo-outline:before, body.dashboard .page-content .header\n .ion-ios-unlocked:before, body.dashboard .page-content .header\n .ion-ios-unlocked-outline:before, body.dashboard .page-content .header\n .ion-ios-upload:before, body.dashboard .page-content .header\n .ion-ios-upload-outline:before, body.dashboard .page-content .header\n .ion-ios-videocam:before, body.dashboard .page-content .header\n .ion-ios-videocam-outline:before, body.dashboard .page-content .header\n .ion-ios-volume-high:before, body.dashboard .page-content .header\n .ion-ios-volume-low:before, body.dashboard .page-content .header\n .ion-ios-wineglass:before, body.dashboard .page-content .header\n .ion-ios-wineglass-outline:before, body.dashboard .page-content .header\n .ion-ios-world:before, body.dashboard .page-content .header\n .ion-ios-world-outline:before, body.dashboard .page-content .header\n .ion-ipad:before, body.dashboard .page-content .header\n .ion-iphone:before, body.dashboard .page-content .header\n .ion-ipod:before, body.dashboard .page-content .header\n .ion-jet:before, body.dashboard .page-content .header\n .ion-key:before, body.dashboard .page-content .header\n .ion-knife:before, body.dashboard .page-content .header\n .ion-laptop:before, body.dashboard .page-content .header\n .ion-leaf:before, body.dashboard .page-content .header\n .ion-levels:before, body.dashboard .page-content .header\n .ion-lightbulb:before, body.dashboard .page-content .header\n .ion-link:before, body.dashboard .page-content .header\n .ion-load-a:before, body.dashboard .page-content .header\n .ion-load-b:before, body.dashboard .page-content .header\n .ion-load-c:before, body.dashboard .page-content .header\n .ion-load-d:before, body.dashboard .page-content .header\n .ion-location:before, body.dashboard .page-content .header\n .ion-lock-combination:before, body.dashboard .page-content .header\n .ion-locked:before, body.dashboard .page-content .header\n .ion-log-in:before, body.dashboard .page-content .header\n .ion-log-out:before, body.dashboard .page-content .header\n .ion-loop:before, body.dashboard .page-content .header\n .ion-magnet:before, body.dashboard .page-content .header\n .ion-male:before, body.dashboard .page-content .header\n .ion-man:before, body.dashboard .page-content .header\n .ion-map:before, body.dashboard .page-content .header\n .ion-medkit:before, body.dashboard .page-content .header\n .ion-merge:before, body.dashboard .page-content .header\n .ion-mic-a:before, body.dashboard .page-content .header\n .ion-mic-b:before, body.dashboard .page-content .header\n .ion-mic-c:before, body.dashboard .page-content .header\n .ion-minus:before, body.dashboard .page-content .header\n .ion-minus-circled:before, body.dashboard .page-content .header\n .ion-minus-round:before, body.dashboard .page-content .header\n .ion-model-s:before, body.dashboard .page-content .header\n .ion-monitor:before, body.dashboard .page-content .header\n .ion-more:before, body.dashboard .page-content .header\n .ion-mouse:before, body.dashboard .page-content .header\n .ion-music-note:before, body.dashboard .page-content .header\n .ion-navicon:before, body.dashboard .page-content .header\n .ion-navicon-round:before, body.dashboard .page-content .header\n .ion-navigate:before, body.dashboard .page-content .header\n .ion-network:before, body.dashboard .page-content .header\n .ion-no-smoking:before, body.dashboard .page-content .header\n .ion-nuclear:before, body.dashboard .page-content .header\n .ion-outlet:before, body.dashboard .page-content .header\n .ion-paintbrush:before, body.dashboard .page-content .header\n .ion-paintbucket:before, body.dashboard .page-content .header\n .ion-paper-airplane:before, body.dashboard .page-content .header\n .ion-paperclip:before, body.dashboard .page-content .header\n .ion-pause:before, body.dashboard .page-content .header\n .ion-person:before, body.dashboard .page-content .header\n .ion-person-add:before, body.dashboard .page-content .header\n .ion-person-stalker:before, body.dashboard .page-content .header\n .ion-pie-graph:before, body.dashboard .page-content .header\n .ion-pin:before, body.dashboard .page-content .header\n .ion-pinpoint:before, body.dashboard .page-content .header\n .ion-pizza:before, body.dashboard .page-content .header\n .ion-plane:before, body.dashboard .page-content .header\n .ion-planet:before, body.dashboard .page-content .header\n .ion-play:before, body.dashboard .page-content .header\n .ion-playstation:before, body.dashboard .page-content .header\n .ion-plus:before, body.dashboard .page-content .header\n .ion-plus-circled:before, body.dashboard .page-content .header\n .ion-plus-round:before, body.dashboard .page-content .header\n .ion-podium:before, body.dashboard .page-content .header\n .ion-pound:before, body.dashboard .page-content .header\n .ion-power:before, body.dashboard .page-content .header\n .ion-pricetag:before, body.dashboard .page-content .header\n .ion-pricetags:before, body.dashboard .page-content .header\n .ion-printer:before, body.dashboard .page-content .header\n .ion-pull-request:before, body.dashboard .page-content .header\n .ion-qr-scanner:before, body.dashboard .page-content .header\n .ion-quote:before, body.dashboard .page-content .header\n .ion-radio-waves:before, body.dashboard .page-content .header\n .ion-record:before, body.dashboard .page-content .header\n .ion-refresh:before, body.dashboard .page-content .header\n .ion-reply:before, body.dashboard .page-content .header\n .ion-reply-all:before, body.dashboard .page-content .header\n .ion-ribbon-a:before, body.dashboard .page-content .header\n .ion-ribbon-b:before, body.dashboard .page-content .header\n .ion-sad:before, body.dashboard .page-content .header\n .ion-sad-outline:before, body.dashboard .page-content .header\n .ion-scissors:before, body.dashboard .page-content .header\n .ion-search:before, body.dashboard .page-content .header\n .ion-settings:before, body.dashboard .page-content .header\n .ion-share:before, body.dashboard .page-content .header\n .ion-shuffle:before, body.dashboard .page-content .header\n .ion-skip-backward:before, body.dashboard .page-content .header\n .ion-skip-forward:before, body.dashboard .page-content .header\n .ion-social-android:before, body.dashboard .page-content .header\n .ion-social-android-outline:before, body.dashboard .page-content .header\n .ion-social-angular:before, body.dashboard .page-content .header\n .ion-social-angular-outline:before, body.dashboard .page-content .header\n .ion-social-apple:before, body.dashboard .page-content .header\n .ion-social-apple-outline:before, body.dashboard .page-content .header\n .ion-social-bitcoin:before, body.dashboard .page-content .header\n .ion-social-bitcoin-outline:before, body.dashboard .page-content .header\n .ion-social-buffer:before, body.dashboard .page-content .header\n .ion-social-buffer-outline:before, body.dashboard .page-content .header\n .ion-social-chrome:before, body.dashboard .page-content .header\n .ion-social-chrome-outline:before, body.dashboard .page-content .header\n .ion-social-codepen:before, body.dashboard .page-content .header\n .ion-social-codepen-outline:before, body.dashboard .page-content .header\n .ion-social-css3:before, body.dashboard .page-content .header\n .ion-social-css3-outline:before, body.dashboard .page-content .header\n .ion-social-designernews:before, body.dashboard .page-content .header\n .ion-social-designernews-outline:before, body.dashboard .page-content .header\n .ion-social-dribbble:before, body.dashboard .page-content .header\n .ion-social-dribbble-outline:before, body.dashboard .page-content .header\n .ion-social-dropbox:before, body.dashboard .page-content .header\n .ion-social-dropbox-outline:before, body.dashboard .page-content .header\n .ion-social-euro:before, body.dashboard .page-content .header\n .ion-social-euro-outline:before, body.dashboard .page-content .header\n .ion-social-facebook:before, body.dashboard .page-content .header\n .ion-social-facebook-outline:before, body.dashboard .page-content .header\n .ion-social-foursquare:before, body.dashboard .page-content .header\n .ion-social-foursquare-outline:before, body.dashboard .page-content .header\n .ion-social-freebsd-devil:before, body.dashboard .page-content .header\n .ion-social-github:before, body.dashboard .page-content .header\n .ion-social-github-outline:before, body.dashboard .page-content .header\n .ion-social-google:before, body.dashboard .page-content .header\n .ion-social-google-outline:before, body.dashboard .page-content .header\n .ion-social-googleplus:before, body.dashboard .page-content .header\n .ion-social-googleplus-outline:before, body.dashboard .page-content .header\n .ion-social-hackernews:before, body.dashboard .page-content .header\n .ion-social-hackernews-outline:before, body.dashboard .page-content .header\n .ion-social-html5:before, body.dashboard .page-content .header\n .ion-social-html5-outline:before, body.dashboard .page-content .header\n .ion-social-instagram:before, body.dashboard .page-content .header\n .ion-social-instagram-outline:before, body.dashboard .page-content .header\n .ion-social-javascript:before, body.dashboard .page-content .header\n .ion-social-javascript-outline:before, body.dashboard .page-content .header\n .ion-social-linkedin:before, body.dashboard .page-content .header\n .ion-social-linkedin-outline:before, body.dashboard .page-content .header\n .ion-social-markdown:before, body.dashboard .page-content .header\n .ion-social-nodejs:before, body.dashboard .page-content .header\n .ion-social-octocat:before, body.dashboard .page-content .header\n .ion-social-pinterest:before, body.dashboard .page-content .header\n .ion-social-pinterest-outline:before, body.dashboard .page-content .header\n .ion-social-python:before, body.dashboard .page-content .header\n .ion-social-reddit:before, body.dashboard .page-content .header\n .ion-social-reddit-outline:before, body.dashboard .page-content .header\n .ion-social-rss:before, body.dashboard .page-content .header\n .ion-social-rss-outline:before, body.dashboard .page-content .header\n .ion-social-sass:before, body.dashboard .page-content .header\n .ion-social-skype:before, body.dashboard .page-content .header\n .ion-social-skype-outline:before, body.dashboard .page-content .header\n .ion-social-snapchat:before, body.dashboard .page-content .header\n .ion-social-snapchat-outline:before, body.dashboard .page-content .header\n .ion-social-tumblr:before, body.dashboard .page-content .header\n .ion-social-tumblr-outline:before, body.dashboard .page-content .header\n .ion-social-tux:before, body.dashboard .page-content .header\n .ion-social-twitch:before, body.dashboard .page-content .header\n .ion-social-twitch-outline:before, body.dashboard .page-content .header\n .ion-social-twitter:before, body.dashboard .page-content .header\n .ion-social-twitter-outline:before, body.dashboard .page-content .header\n .ion-social-usd:before, body.dashboard .page-content .header\n .ion-social-usd-outline:before, body.dashboard .page-content .header\n .ion-social-vimeo:before, body.dashboard .page-content .header\n .ion-social-vimeo-outline:before, body.dashboard .page-content .header\n .ion-social-whatsapp:before, body.dashboard .page-content .header\n .ion-social-whatsapp-outline:before, body.dashboard .page-content .header\n .ion-social-windows:before, body.dashboard .page-content .header\n .ion-social-windows-outline:before, body.dashboard .page-content .header\n .ion-social-wordpress:before, body.dashboard .page-content .header\n .ion-social-wordpress-outline:before, body.dashboard .page-content .header\n .ion-social-yahoo:before, body.dashboard .page-content .header\n .ion-social-yahoo-outline:before, body.dashboard .page-content .header\n .ion-social-yen:before, body.dashboard .page-content .header\n .ion-social-yen-outline:before, body.dashboard .page-content .header\n .ion-social-youtube:before, body.dashboard .page-content .header\n .ion-social-youtube-outline:before, body.dashboard .page-content .header\n .ion-soup-can:before, body.dashboard .page-content .header\n .ion-soup-can-outline:before, body.dashboard .page-content .header\n .ion-speakerphone:before, body.dashboard .page-content .header\n .ion-speedometer:before, body.dashboard .page-content .header\n .ion-spoon:before, body.dashboard .page-content .header\n .ion-star:before, body.dashboard .page-content .header\n .ion-stats-bars:before, body.dashboard .page-content .header\n .ion-steam:before, body.dashboard .page-content .header\n .ion-stop:before, body.dashboard .page-content .header\n .ion-thermometer:before, body.dashboard .page-content .header\n .ion-thumbsdown:before, body.dashboard .page-content .header\n .ion-thumbsup:before, body.dashboard .page-content .header\n .ion-toggle:before, body.dashboard .page-content .header\n .ion-toggle-filled:before, body.dashboard .page-content .header\n .ion-transgender:before, body.dashboard .page-content .header\n .ion-trash-a:before, body.dashboard .page-content .header\n .ion-trash-b:before, body.dashboard .page-content .header\n .ion-trophy:before, body.dashboard .page-content .header\n .ion-tshirt:before, body.dashboard .page-content .header\n .ion-tshirt-outline:before, body.dashboard .page-content .header\n .ion-umbrella:before, body.dashboard .page-content .header\n .ion-university:before, body.dashboard .page-content .header\n .ion-unlocked:before, body.dashboard .page-content .header\n .ion-upload:before, body.dashboard .page-content .header\n .ion-usb:before, body.dashboard .page-content .header\n .ion-videocamera:before, body.dashboard .page-content .header\n .ion-volume-high:before, body.dashboard .page-content .header\n .ion-volume-low:before, body.dashboard .page-content .header\n .ion-volume-medium:before, body.dashboard .page-content .header\n .ion-volume-mute:before, body.dashboard .page-content .header\n .ion-wand:before, body.dashboard .page-content .header\n .ion-waterdrop:before, body.dashboard .page-content .header\n .ion-wifi:before, body.dashboard .page-content .header\n .ion-wineglass:before, body.dashboard .page-content .header\n .ion-woman:before, body.dashboard .page-content .header\n .ion-wrench:before, body.dashboard .page-content .header\n .ion-xbox:before {\n margin-right: 2px; }\n body.dashboard .page-content .sub-header {\n font-weight: 300;\n text-transform: uppercase; }\n body.dashboard .page-content .sub-header a {\n text-transform: none; }\n body.dashboard .page-content .striped-list .striped-list-item {\n border-bottom: 1px solid #f0f0f0;\n padding: 8px 0; }\n body.dashboard .page-content .drag-handle {\n cursor: move; }\n body.dashboard .page-content .user-grid .user img {\n border-radius: 5px;\n margin-bottom: 15px;\n border: 0; }\n body.dashboard .page-content .user-grid .user .name {\n font-weight: 600; }\n body.dashboard .page-content .user-grid .user .email {\n color: #444;\n margin-top: 4px; }\n\n@media (max-width: 767px) {\n body.dashboard .page-content .content-wrapper {\n padding-left: 20px;\n padding-right: 20px; }\n body.dashboard .page-content .header {\n padding-left: 20px;\n padding-right: 20px; }\n body.dashboard .page-content .header.fixed {\n padding-left: 20px;\n padding-right: 20px; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .page-content .header.fixed {\n padding-left: 120px; } }\n\n#welcome-modal .modal-dialog {\n margin-top: 65px; }\n\n#welcome-modal .modal-content .modal-header {\n border-bottom: 0; }\n\n#welcome-modal .modal-content .modal-body {\n padding-bottom: 50px; }\n #welcome-modal .modal-content .modal-body header {\n text-align: center;\n font-weight: 600;\n font-size: 22px;\n color: #444;\n margin-bottom: 23px; }\n #welcome-modal .modal-content .modal-body p {\n font-size: 13px;\n color: #555;\n margin: 0 auto;\n width: 80%;\n text-align: center;\n line-height: 20px; }\n #welcome-modal .modal-content .modal-body .go-dashboard {\n text-align: center;\n display: block;\n margin-top: 10px; }\n #welcome-modal .modal-content .modal-body .get-started {\n margin-top: 40px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 {\n text-align: center;\n padding-bottom: 50px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a {\n color: #666;\n display: block;\n margin-top: 12px;\n font-size: 13px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a i {\n font-size: 38px;\n color: #6DB81C;\n display: block; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a:hover {\n text-decoration: none;\n color: #999; }\n\nbody.login .form-bg {\n border-radius: 10px;\n margin: auto;\n margin-top: 60px;\n padding: 30px;\n width: 320px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2);\n background-color: white; }\n\nbody.login .logo {\n margin-bottom: 30px; }\n body.login .logo img {\n margin: 0 auto; }\n\nbody.login .login-input {\n height: 45px; }\n\nbody.login i {\n font-size: 22px; }\n\nbody.login .btn.btn-white {\n background-color: white;\n -webkit-transition: background-color 0.5s ease;\n transition: background-color 0.5s ease; }\n body.login .btn.btn-white.btn-trans {\n background-color: transparent;\n border: 1px solid white;\n border-radius: 4px;\n color: white; }\n body.login .btn.btn-white.btn-trans:hover {\n background-color: white;\n color: #7ED321; }\n\n.setup-page {\n padding-top: 60px; }\n .setup-page .logo {\n display: block;\n margin: 0 auto 30px; }\n .setup-page .steps {\n margin: 0 auto;\n border-radius: 2px 2px 0 0;\n margin-bottom: 20px; }\n .setup-page .steps .step {\n padding: 20px 0;\n text-align: center;\n position: relative;\n font-size: 13px; }\n .setup-page .steps .step:not(:last-child):after {\n content: '';\n position: absolute;\n bottom: 31px;\n left: 55%;\n display: block;\n height: 1px;\n background: #94A1B8;\n width: 100%; }\n .setup-page .steps .step span {\n width: 23px;\n height: 23px;\n display: block;\n position: relative;\n margin: 0 auto;\n margin-top: 13px;\n border-radius: 25px;\n background: #f0f3f4;\n border: 1px solid #94A1B8;\n -webkit-transition: all 0.2s linear;\n transition: all 0.2s linear; }\n .setup-page .steps .step.active span {\n background: #7ED321; }\n .setup-page .setup-success {\n text-align: center; }\n .setup-page .setup-success i {\n font-size: 47px; }\n .setup-page .setup-success h3 {\n margin-top: 25px;\n font-size: 21px;\n color: #556579; }\n .setup-page .setup-success .btn {\n margin-top: 40px; }\n\n.component-inline-update {\n padding-top: 8px; }\n .component-inline-update label {\n display: initial;\n font-weight: normal; }\n\n.component-group-name {\n font-size: 18px;\n padding-left: 10px; }\n\n.component-group-other {\n font-size: 18px; }\n\n.stats-widget {\n text-align: center;\n margin-bottom: 30px;\n background-color: #fff;\n border: #eee 1px solid; }\n .stats-widget.full-stats-block .stats-bottom {\n border-top: 0 !important;\n color: #fff;\n position: relative;\n margin-top: -1px;\n z-index: 1000; }\n .stats-widget .stats-top {\n padding: 20px; }\n .stats-widget .stats-top > span {\n display: block;\n text-align: center; }\n .stats-widget .stats-top > span.stats-value {\n font-size: 24px;\n font-weight: 400; }\n .stats-widget .stats-top > span.stats-label {\n padding-top: 5px;\n font-size: 14px;\n font-weight: 300;\n color: #777; }\n .stats-widget .stats-chart {\n margin-top: -20px;\n padding-top: 10px; }\n .stats-widget .stats-body {\n margin-top: -20px;\n padding-top: 10px; }\n .stats-widget .stats-body .list-group {\n border: none;\n padding-bottom: 0;\n margin-bottom: 0; }\n .stats-widget .stats-body .list-group .list-group-item {\n border-right: none;\n border-left: none;\n border-color: #eee; }\n .stats-widget .stats-body .list-group .list-group-item:last-child {\n border-bottom: none; }\n .stats-widget .stats-bottom {\n border-top: #eee 1px solid;\n color: #777;\n padding: 12px 10px;\n text-align: center;\n background-color: #f9f9f9; }\n .stats-widget .stats-bottom.bg-green {\n background-color: #7ED321;\n color: white; }\n .stats-widget .stats-bottom.bg-blue {\n background-color: #3498db;\n color: white; }\n .stats-widget .stats-bottom.bg-red {\n background-color: #ff6f6f;\n color: white; }\n .stats-widget .stats-bottom.bg-teal {\n background-color: #0dccc0;\n color: white; }\n\nul.messenger {\n margin: 0;\n padding: 0; }\n\nul.messenger > li {\n list-style: none;\n margin: 0;\n padding: 0; }\n\nul.messenger.messenger-empty {\n display: none; }\n\nul.messenger .messenger-message {\n overflow: hidden;\n *zoom: 1; }\n\nul.messenger .messenger-message.messenger-hidden {\n display: none; }\n\nul.messenger .messenger-message .messenger-phrase, ul.messenger .messenger-message .messenger-actions a {\n padding-right: 5px; }\n\nul.messenger .messenger-message .messenger-actions {\n float: right; }\n\nul.messenger .messenger-message .messenger-actions a {\n cursor: pointer;\n text-decoration: underline; }\n\nul.messenger .messenger-message ul, ul.messenger .messenger-message ol {\n margin: 10px 18px 0; }\n\nul.messenger.messenger-fixed {\n position: fixed;\n z-index: 10000; }\n\nul.messenger.messenger-fixed .messenger-message {\n min-width: 0;\n box-sizing: border-box; }\n\nul.messenger.messenger-fixed .message .messenger-actions {\n float: left; }\n\nul.messenger.messenger-fixed.messenger-on-top {\n top: 20px; }\n\nul.messenger.messenger-fixed.messenger-on-bottom {\n bottom: 20px; }\n\nul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 50%;\n width: 600px;\n margin-left: -300px; }\n\n@media (max-width: 960px) {\n ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 10%;\n width: 80%;\n margin-left: 0px; } }\n\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right {\n right: 20px;\n left: auto; }\n\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-left, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left {\n left: 20px;\n margin-left: 0px; }\n\nul.messenger.messenger-fixed.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-left {\n width: 350px; }\n\nul.messenger.messenger-fixed.messenger-on-right .messenger-actions, ul.messenger.messenger-fixed.messenger-on-left .messenger-actions {\n float: left; }\n\nul.messenger .messenger-spinner {\n display: none; }\n\n@-webkit-keyframes ui-spinner-rotate-right {\n 0% {\n -webkit-transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(180deg); }\n 50% {\n -webkit-transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(360deg); }\n 100% {\n -webkit-transform: rotate(360deg); } }\n\n@-webkit-keyframes ui-spinner-rotate-left {\n 0% {\n -webkit-transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(0deg); }\n 50% {\n -webkit-transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(180deg); }\n 100% {\n -webkit-transform: rotate(360deg); } }\n\n@keyframes ui-spinner-rotate-right {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n 50% {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n@keyframes ui-spinner-rotate-left {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 50% {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n.messenger-spinner {\n position: relative;\n border-radius: 100%; }\n\nul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {\n display: block; }\n\n.messenger-spinner .messenger-spinner-side {\n width: 50%;\n height: 100%;\n overflow: hidden;\n position: absolute; }\n\n.messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n border-radius: 999px;\n position: absolute;\n width: 100%;\n height: 100%;\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n -webkit-animation-timing-function: linear;\n animation-timing-function: linear; }\n\n.messenger-spinner .messenger-spinner-side-left {\n left: 0; }\n\n.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill {\n left: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-left;\n animation-name: ui-spinner-rotate-left;\n -webkit-transform-origin: 0 50%;\n transform-origin: 0 50%; }\n\n.messenger-spinner .messenger-spinner-side-right {\n left: 50%; }\n\n.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill {\n left: -100%;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-right;\n animation-name: ui-spinner-rotate-right;\n -webkit-transform-origin: 100% 50%;\n transform-origin: 100% 50%; }\n\nul.messenger-theme-air {\n -moz-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none;\n font-family: \"Raleway\", sans-serif; }\n\nul.messenger-theme-air .messenger-message {\n -webkit-transition: background-color 0.4s;\n transition: background-color 0.4s;\n border-radius: 5px;\n box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n border: 0px;\n background-color: white;\n position: relative;\n margin-bottom: 1em;\n font-size: 13px;\n color: #666666;\n font-weight: 500;\n padding: 10px 30px 11px 46px; }\n\nul.messenger-theme-air .messenger-message:hover {\n background-color: white; }\n\nul.messenger-theme-air .messenger-message .messenger-close {\n position: absolute;\n top: 0px;\n right: 0px;\n color: #888888;\n opacity: 1;\n font-weight: bold;\n display: block;\n font-size: 20px;\n line-height: 20px;\n padding: 8px 10px 7px 7px;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\nul.messenger-theme-air .messenger-message .messenger-close:hover {\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-close:active {\n color: #222222; }\n\nul.messenger-theme-air .messenger-message .messenger-actions {\n float: none;\n margin-top: 10px; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a {\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n border-radius: 4px;\n text-decoration: none;\n display: inline-block;\n padding: 10px;\n color: #888888;\n margin-right: 10px;\n padding: 3px 10px 5px;\n text-transform: capitalize; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a:hover {\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a:active {\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n background: rgba(0, 0, 0, 0.04);\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-actions .messenger-phrase {\n display: none; }\n\nul.messenger-theme-air .messenger-message .messenger-message-inner:before {\n box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n border-radius: 50%;\n position: absolute;\n left: 17px;\n display: block;\n content: \" \";\n top: 50%;\n margin-top: -8px;\n height: 13px;\n width: 13px;\n z-index: 20; }\n\nul.messenger-theme-air .messenger-message.alert-success .messenger-message-inner:before {\n background-color: #5fca4a; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 20s;\n animation-duration: 20s;\n opacity: 1; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 600s;\n animation-duration: 600s;\n opacity: 1; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block; }\n\nul.messenger-theme-air .messenger-message.alert-error .messenger-message-inner:before {\n background-color: #dd6a45; }\n\nul.messenger-theme-air .messenger-message.alert-info .messenger-message-inner:before {\n background-color: #61c4b8; }\n\nul.messenger-theme-air .messenger-spinner {\n display: block;\n position: absolute;\n left: 12px;\n top: 50%;\n margin-top: -13px;\n z-index: 999;\n height: 24px;\n width: 24px;\n z-index: 10; }\n\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license - http://opensource.org/licenses/MIT\nCopyright (c) 2015 Daniel Eden\n*/\nbody {\n -webkit-backface-visibility: hidden; }\n\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both; }\n .animated.infinite {\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite; }\n .animated.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s; }\n .animated.bounceIn, .animated.bounceOut {\n -webkit-animation-duration: 0.75s;\n animation-duration: 0.75s; }\n .animated.flipOutX, .animated.flipOutY {\n -webkit-animation-duration: 0.75s;\n animation-duration: 0.75s; }\n\nbody {\n -webkit-backface-visibility: hidden; }\n\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both; }\n .animated.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s; }\n\n.bootstrap-datetimepicker-widget {\n list-style: none; }\n .bootstrap-datetimepicker-widget.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em; }\n @media (min-width: 768px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 992px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 1200px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {\n content: '';\n display: inline-block;\n position: absolute; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n top: -7px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n top: -6px;\n left: 8px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid #ccc;\n border-top-color: rgba(0, 0, 0, 0.2);\n bottom: -7px;\n left: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid white;\n bottom: -6px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {\n left: auto;\n right: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {\n left: auto;\n right: 7px; }\n .bootstrap-datetimepicker-widget .list-unstyled {\n margin: 0; }\n .bootstrap-datetimepicker-widget a[data-action] {\n padding: 6px 0; }\n .bootstrap-datetimepicker-widget a[data-action]:active {\n box-shadow: none; }\n .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: 1.2em;\n margin: 0; }\n .bootstrap-datetimepicker-widget button[data-action] {\n padding: 6px; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after {\n content: \"Increment Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after {\n content: \"Increment Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after {\n content: \"Decrement Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after {\n content: \"Decrement Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after {\n content: \"Show Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after {\n content: \"Show Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after {\n content: \"Toggle AM/PM\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after {\n content: \"Clear the picker\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after {\n content: \"Set the date to today\"; }\n .bootstrap-datetimepicker-widget .picker-switch {\n text-align: center; }\n .bootstrap-datetimepicker-widget .picker-switch::after {\n content: \"Toggle Date and Time Screens\"; }\n .bootstrap-datetimepicker-widget .picker-switch td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit; }\n .bootstrap-datetimepicker-widget .picker-switch td span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%; }\n .bootstrap-datetimepicker-widget table {\n width: 100%;\n margin: 0; }\n .bootstrap-datetimepicker-widget table td,\n .bootstrap-datetimepicker-widget table th {\n text-align: center;\n border-radius: 3px; }\n .bootstrap-datetimepicker-widget table th {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table th.picker-switch {\n width: 145px; }\n .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table th.prev::after {\n content: \"Previous Month\"; }\n .bootstrap-datetimepicker-widget table th.next::after {\n content: \"Next Month\"; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th {\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {\n background: #e8e8e8; }\n .bootstrap-datetimepicker-widget table td {\n height: 54px;\n line-height: 54px;\n width: 54px; }\n .bootstrap-datetimepicker-widget table td.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: #999; }\n .bootstrap-datetimepicker-widget table td.day {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {\n background: #e8e8e8;\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {\n color: #999; }\n .bootstrap-datetimepicker-widget table td.today {\n position: relative; }\n .bootstrap-datetimepicker-widget table td.today:before {\n content: '';\n display: inline-block;\n border: solid transparent;\n border-width: 0 0 7px 7px;\n border-bottom-color: #7ED321;\n border-top-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n bottom: 4px;\n right: 4px; }\n .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {\n background-color: #7ED321;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td.active.today:before {\n border-bottom-color: #fff; }\n .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table td span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: 3px; }\n .bootstrap-datetimepicker-widget table td span:hover {\n background: #e8e8e8; }\n .bootstrap-datetimepicker-widget table td span.active {\n background-color: #7ED321;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td span.old {\n color: #999; }\n .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget.usetwentyfour td.hour {\n height: 27px;\n line-height: 27px; }\n\n.input-group.date .input-group-addon {\n cursor: pointer; }\n\n.strengthify-wrapper > * {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n opacity: 0;\n -webkit-transition: all .5s ease-in-out;\n transition: all .5s ease-in-out; }\n\n.strengthify-wrapper {\n position: relative; }\n\n.strengthify-bg, .strengthify-container, .strengthify-wrapper, .strengthify-separator {\n height: 8px; }\n\n.strengthify-bg, .strengthify-container {\n display: block;\n position: absolute;\n width: 100%; }\n\n.strengthify-bg {\n background-color: #eeeeee; }\n\n.strengthify-separator {\n display: inline-block;\n position: absolute;\n background-color: #ffffff;\n width: 2px;\n z-index: 10; }\n\n.password-bad {\n background-color: #ff6f6f; }\n\n.password-medium {\n background-color: #F7CA18; }\n\n.password-good {\n background-color: #7ED321; }\n\n.sortable-chosen {\n border: 1px solid #e8e8e8 !important;\n background-color: #f0f3f4; }\n\nbody.status-page {\n padding-top: 40px;\n font-family: -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n background-color: #F0F3F4;\n color: #333333;\n font-size: 1.4em;\n font-weight: 400;\n -webkit-font-smoothing: antialiased; }\n body.status-page.no-padding {\n padding-top: 0 !important; }\n body.status-page hr {\n margin-top: 10px;\n margin-bottom: 10px; }\n body.status-page h1, body.status-page h2, body.status-page h3, body.status-page h4, body.status-page h5 {\n margin-bottom: 20px; }\n body.status-page img {\n box-sizing: border-box; }\n body.status-page img.emoji {\n height: 20px;\n width: 20px;\n vertical-align: middle;\n max-width: none; }\n body.status-page p, body.status-page strong {\n color: #333; }\n body.status-page .tooltip .tooltip-inner {\n padding: 8px 12px;\n font-size: 14px;\n word-wrap: break-word; }\n body.status-page .help-icon {\n cursor: help; }\n body.status-page .text-success, body.status-page .text-component-1 {\n color: #7ED321; }\n body.status-page .text-info, body.status-page .text-component-2 {\n color: #3498db; }\n body.status-page .text-alert, body.status-page .text-component-3 {\n color: #F7CA18; }\n body.status-page .text-danger, body.status-page .text-component-4 {\n color: #ff6f6f; }\n body.status-page .container {\n max-width: 960px; }\n body.status-page .page-header {\n margin-top: 10px; }\n body.status-page .app-banner {\n margin-bottom: 30px; }\n body.status-page .about-app {\n margin-bottom: 40px; }\n body.status-page .about-app p {\n font-size: 1.2em; }\n body.status-page .alert {\n font-size: 1.2em;\n font-weight: 600; }\n body.status-page .timeline .content-wrapper {\n margin-top: 40px;\n margin-bottom: 40px; }\n body.status-page .timeline h3 {\n margin-top: 30px;\n margin-bottom: 40px;\n font-size: 22px; }\n body.status-page .timeline h3 small {\n margin-left: 15px; }\n body.status-page .timeline .panel .panel-body h1, body.status-page .timeline .list-group.components .panel-body h1 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 2em; }\n body.status-page .timeline .panel .panel-body h2, body.status-page .timeline .list-group.components .panel-body h2 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.8em; }\n body.status-page .timeline .panel .panel-body h3, body.status-page .timeline .list-group.components .panel-body h3 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.6em; }\n body.status-page .timeline .panel .panel-body h4, body.status-page .timeline .list-group.components .panel-body h4 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.4em; }\n body.status-page .timeline .panel .panel-body h5, body.status-page .timeline .list-group.components .panel-body h5 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.2em; }\n body.status-page .timeline .panel .panel-body p, body.status-page .timeline .list-group.components .panel-body p {\n margin: 0; }\n body.status-page .timeline .moment {\n width: 100%;\n padding-bottom: 10px;\n position: relative; }\n body.status-page .timeline .moment.first:before {\n top: -5px; }\n body.status-page .timeline .moment:before {\n content: '';\n position: absolute;\n left: 26px;\n top: -5px;\n width: 2px;\n height: 100%;\n background: #7266BA; }\n body.status-page .timeline .moment .status-icon {\n background: #fff;\n width: 35px;\n height: 35px;\n border-radius: 50%;\n border: 1px solid #e8e8e8;\n position: absolute;\n left: 25px;\n top: 14px; }\n body.status-page .timeline .moment .status-icon .icon {\n position: absolute;\n top: 7px;\n left: 11px; }\n body.status-page .timeline .moment .status-icon .icon.ion-alert {\n left: 15px; }\n body.status-page .timeline .moment .status-icon.status-0 {\n color: #b23f73; }\n body.status-page .timeline .moment .status-icon.status-1 {\n color: #FF8800; }\n body.status-page .timeline .moment .status-icon.status-2 {\n color: #F7CA18; }\n body.status-page .timeline .moment .status-icon.status-3 {\n color: #3498db; }\n body.status-page .timeline .moment .status-icon.status-4 {\n color: #7ED321; }\n body.status-page .timeline .moment.last:before {\n background: #fff; }\n body.status-page .timeline .moment .panel, body.status-page .timeline .moment .list-group.components {\n margin: 0;\n border-radius: 2px; }\n body.status-page .timeline .moment .panel.panel-message, body.status-page .timeline .moment .panel-message.list-group.components {\n border: 1px solid #e8e8e8; }\n body.status-page .timeline .moment .panel.panel-message .date, body.status-page .timeline .moment .panel-message.list-group.components .date {\n color: #949494; }\n body.status-page .timeline .moment .panel.panel-message:before, body.status-page .timeline .moment .panel-message.list-group.components:before {\n position: absolute;\n top: 16px;\n left: 1px;\n display: inline-block;\n border-top: 15px solid transparent;\n border-left: 0 solid #e8e8e8;\n border-right: 15px solid #e8e8e8;\n border-bottom: 15px solid transparent;\n content: \" \"; }\n body.status-page .timeline .moment .panel.panel-message:after, body.status-page .timeline .moment .panel-message.list-group.components:after {\n position: absolute;\n top: 17px;\n left: 2px;\n display: inline-block;\n border-top: 14px solid transparent;\n border-left: 0 solid #fff;\n border-right: 14px solid #fff;\n border-bottom: 14px solid transparent;\n content: \" \"; }\n body.status-page .timeline .moment .panel .panel-heading strong, body.status-page .timeline .moment .list-group.components .panel-heading strong {\n font-size: 1.1em; }\n body.status-page .timeline .moment .panel .panel-body, body.status-page .timeline .moment .list-group.components .panel-body {\n border-top: 1px solid #eee; }\n body.status-page .timeline .moment .panel .panel-body p, body.status-page .timeline .moment .list-group.components .panel-body p {\n font-size: 1.1em; }\n body.status-page .timeline .moment .panel .panel-body p:not(:last-child), body.status-page .timeline .moment .list-group.components .panel-body p:not(:last-child) {\n margin-bottom: 10px; }\n @media (max-width: 767px) {\n body.status-page .timeline .moment .content {\n width: 100%; } }\n body.status-page .list-group {\n padding-left: 0; }\n body.status-page .list-group .list-group-item {\n border-radius: 0;\n background-color: #ffffff;\n border: 1px solid #e8e8e8;\n font-size: 1.1em;\n padding: 15px 15px; }\n body.status-page .list-group .list-group-item a {\n font-weight: 400; }\n body.status-page .list-group .list-group-item h4 {\n margin: 0;\n font-weight: 400;\n max-width: 90%; }\n body.status-page .list-group .list-group-item p, body.status-page .list-group .list-group-item time {\n margin-bottom: 0;\n line-height: 1.3em; }\n body.status-page .list-group .list-group-item.group-name {\n background-color: #e8e8e8;\n padding-top: 0.6em;\n padding-bottom: 0.6em;\n cursor: pointer;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n body.status-page .list-group .list-group-item.break {\n padding: 1px;\n background-color: #f0f3f4; }\n body.status-page .list-group.components {\n border-color: #e8e8e8; }\n body.status-page .list-group.components:last-child {\n margin-bottom: 30px; }\n body.status-page .list-group.components + .components {\n margin-top: 5px; }\n body.status-page .list-group.components p {\n margin-bottom: 10px; }\n body.status-page .list-group.components .badge {\n color: transparent; }\n body.status-page .list-group.components a {\n color: #333 !important; }\n body.status-page footer {\n position: absolute;\n width: 100%;\n bottom: 0;\n height: 60px;\n padding: 30px 0 60px 0;\n border-top: 1px solid #e8e8e8;\n color: #666;\n font-size: 13px;\n line-height: 30px;\n text-align: center;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }\n body.status-page footer .btn {\n text-shadow: none; }\n body.status-page footer .icons a.icon-link {\n display: inline-block;\n min-width: 30px;\n height: 30px;\n border-radius: 3px;\n background-color: #666;\n text-align: center;\n color: #e8e8e8;\n -webkit-transition: all 0.15s;\n transition: all 0.15s;\n padding: 0 10px 0 10px; }\n body.status-page footer .icons a.icon-link.rss {\n background-color: #FF8800; }\n body.status-page footer .icons a.icon-link:hover {\n text-decoration: none;\n background-color: #4d4d4d; }\n body.status-page footer .list-inline > li {\n padding-right: 0; }\n @media (min-width: 768px) {\n body.status-page footer {\n text-align: left; }\n body.status-page footer .list-inline {\n text-align: right; }\n body.status-page footer .list-inline > li {\n padding-right: 0; }\n body.status-page footer .icons {\n margin-top: 0;\n text-align: right; } }\n body.status-page .section-timeline, body.status-page .section-components, body.status-page .section-metrics, body.status-page .section-scheduled {\n margin-top: 40px; }\n body.status-page .navbar-custom {\n padding-top: 10px;\n padding-bottom: 10px;\n width: 100%;\n border-radius: 0px;\n margin-bottom: 10px; }\n body.status-page .navbar-custom a.navbar-brand {\n font-size: 30px;\n font-weight: 600; }\n body.status-page .navbar-custom .navbar-nav li a {\n color: #333;\n font-size: 1.7rem; }\n body.status-page .navbar-custom .navbar-nav li a:hover {\n background-color: transparent; }\n\nbody.error-page {\n background-color: #f3f3f4; }\n body.error-page .middle-box {\n height: 400px;\n width: 400px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -200px;\n z-index: 100; }\n body.error-page .middle-box h1 {\n font-size: 9em; }\n body.error-page h3.font-bold {\n font-weight: 600; }\n\n/*# sourceMappingURL=app.css.map */\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/public/build/dist/css/app-084a7775de.css b/public/build/dist/css/app-084a7775de.css deleted file mode 100644 index 144cd88137de..000000000000 --- a/public/build/dist/css/app-084a7775de.css +++ /dev/null @@ -1,11 +0,0 @@ -/*! - Ionicons, v2.0.1 - Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ - https://twitter.com/benjsperry https://twitter.com/ionicframework - MIT License: https://github.com/driftyco/ionicons - - Android-style icons originally built by Google’s - Material Design Icons: https://github.com/google/material-design-icons - used under CC BY http://creativecommons.org/licenses/by/4.0/ - Modified icons to fit ionicon’s grid from original. -*/.label,sub,sup{vertical-align:baseline}.swal2-icon,hr{box-sizing:content-box}pre,textarea{overflow:auto}hr,img{border:0}[class^=swal2],html{-webkit-tap-highlight-color:transparent}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.btn,.no-select,.swal2-icon{-webkit-user-select:none;-ms-user-select:none}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}@font-face{font-family:Ionicons;src:url(../../../fonts/ionicons.eot?v=2.0.1);src:url(../../../fonts/ionicons.eot?v=2.0.1#iefix) format("embedded-opentype"),url(../../../fonts/ionicons.ttf?v=2.0.1) format("truetype"),url(../../../fonts/ionicons.woff?v=2.0.1) format("woff"),url(../../../fonts/ionicons.svg?v=2.0.1#Ionicons) format("svg");font-weight:400;font-style:normal}.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-circle:before,.ion-android-add:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-cloud:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done-all:before,.ion-android-done:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite-outline:before,.ion-android-favorite:before,.ion-android-film:before,.ion-android-folder-open:before,.ion-android-folder:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone-off:before,.ion-android-microphone:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-notifications:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person-add:before,.ion-android-person:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove-circle:before,.ion-android-remove:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share-alt:before,.ion-android-share:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace-outline:before,.ion-backspace:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email-unread:before,.ion-email:before,.ion-erlenmeyer-flask-bubbles:before,.ion-erlenmeyer-flask:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy-outline:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios-alarm-outline:before,.ion-ios-alarm:before,.ion-ios-albums-outline:before,.ion-ios-albums:before,.ion-ios-americanfootball-outline:before,.ion-ios-americanfootball:before,.ion-ios-analytics-outline:before,.ion-ios-analytics:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at-outline:before,.ion-ios-at:before,.ion-ios-barcode-outline:before,.ion-ios-barcode:before,.ion-ios-baseball-outline:before,.ion-ios-baseball:before,.ion-ios-basketball-outline:before,.ion-ios-basketball:before,.ion-ios-bell-outline:before,.ion-ios-bell:before,.ion-ios-body-outline:before,.ion-ios-body:before,.ion-ios-bolt-outline:before,.ion-ios-bolt:before,.ion-ios-book-outline:before,.ion-ios-book:before,.ion-ios-bookmarks-outline:before,.ion-ios-bookmarks:before,.ion-ios-box-outline:before,.ion-ios-box:before,.ion-ios-briefcase-outline:before,.ion-ios-briefcase:before,.ion-ios-browsers-outline:before,.ion-ios-browsers:before,.ion-ios-calculator-outline:before,.ion-ios-calculator:before,.ion-ios-calendar-outline:before,.ion-ios-calendar:before,.ion-ios-camera-outline:before,.ion-ios-camera:before,.ion-ios-cart-outline:before,.ion-ios-cart:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatbubble-outline:before,.ion-ios-chatbubble:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-checkmark:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock-outline:before,.ion-ios-clock:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-close:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-outline:before,.ion-ios-cloudy:before,.ion-ios-cog-outline:before,.ion-ios-cog:before,.ion-ios-color-filter-outline:before,.ion-ios-color-filter:before,.ion-ios-color-wand-outline:before,.ion-ios-color-wand:before,.ion-ios-compose-outline:before,.ion-ios-compose:before,.ion-ios-contact-outline:before,.ion-ios-contact:before,.ion-ios-copy-outline:before,.ion-ios-copy:before,.ion-ios-crop-strong:before,.ion-ios-crop:before,.ion-ios-download-outline:before,.ion-ios-download:before,.ion-ios-drag:before,.ion-ios-email-outline:before,.ion-ios-email:before,.ion-ios-eye-outline:before,.ion-ios-eye:before,.ion-ios-fastforward-outline:before,.ion-ios-fastforward:before,.ion-ios-filing-outline:before,.ion-ios-filing:before,.ion-ios-film-outline:before,.ion-ios-film:before,.ion-ios-flag-outline:before,.ion-ios-flag:before,.ion-ios-flame-outline:before,.ion-ios-flame:before,.ion-ios-flask-outline:before,.ion-ios-flask:before,.ion-ios-flower-outline:before,.ion-ios-flower:before,.ion-ios-folder-outline:before,.ion-ios-folder:before,.ion-ios-football-outline:before,.ion-ios-football:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-b-outline:before,.ion-ios-game-controller-b:before,.ion-ios-gear-outline:before,.ion-ios-gear:before,.ion-ios-glasses-outline:before,.ion-ios-glasses:before,.ion-ios-grid-view-outline:before,.ion-ios-grid-view:before,.ion-ios-heart-outline:before,.ion-ios-heart:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-help:before,.ion-ios-home-outline:before,.ion-ios-home:before,.ion-ios-infinite-outline:before,.ion-ios-infinite:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-information:before,.ion-ios-ionic-outline:before,.ion-ios-keypad-outline:before,.ion-ios-keypad:before,.ion-ios-lightbulb-outline:before,.ion-ios-lightbulb:before,.ion-ios-list-outline:before,.ion-ios-list:before,.ion-ios-location-outline:before,.ion-ios-location:before,.ion-ios-locked-outline:before,.ion-ios-locked:before,.ion-ios-loop-strong:before,.ion-ios-loop:before,.ion-ios-medical-outline:before,.ion-ios-medical:before,.ion-ios-medkit-outline:before,.ion-ios-medkit:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-mic:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-minus:before,.ion-ios-monitor-outline:before,.ion-ios-monitor:before,.ion-ios-moon-outline:before,.ion-ios-moon:before,.ion-ios-more-outline:before,.ion-ios-more:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate-outline:before,.ion-ios-navigate:before,.ion-ios-nutrition-outline:before,.ion-ios-nutrition:before,.ion-ios-paper-outline:before,.ion-ios-paper:before,.ion-ios-paperplane-outline:before,.ion-ios-paperplane:before,.ion-ios-partlysunny-outline:before,.ion-ios-partlysunny:before,.ion-ios-pause-outline:before,.ion-ios-pause:before,.ion-ios-paw-outline:before,.ion-ios-paw:before,.ion-ios-people-outline:before,.ion-ios-people:before,.ion-ios-person-outline:before,.ion-ios-person:before,.ion-ios-personadd-outline:before,.ion-ios-personadd:before,.ion-ios-photos-outline:before,.ion-ios-photos:before,.ion-ios-pie-outline:before,.ion-ios-pie:before,.ion-ios-pint-outline:before,.ion-ios-pint:before,.ion-ios-play-outline:before,.ion-ios-play:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-plus:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetags-outline:before,.ion-ios-pricetags:before,.ion-ios-printer-outline:before,.ion-ios-printer:before,.ion-ios-pulse-strong:before,.ion-ios-pulse:before,.ion-ios-rainy-outline:before,.ion-ios-rainy:before,.ion-ios-recording-outline:before,.ion-ios-recording:before,.ion-ios-redo-outline:before,.ion-ios-redo:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-refresh:before,.ion-ios-reload:before,.ion-ios-reverse-camera-outline:before,.ion-ios-reverse-camera:before,.ion-ios-rewind-outline:before,.ion-ios-rewind:before,.ion-ios-rose-outline:before,.ion-ios-rose:before,.ion-ios-search-strong:before,.ion-ios-search:before,.ion-ios-settings-strong:before,.ion-ios-settings:before,.ion-ios-shuffle-strong:before,.ion-ios-shuffle:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipbackward:before,.ion-ios-skipforward-outline:before,.ion-ios-skipforward:before,.ion-ios-snowy:before,.ion-ios-speedometer-outline:before,.ion-ios-speedometer:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-star:before,.ion-ios-stopwatch-outline:before,.ion-ios-stopwatch:before,.ion-ios-sunny-outline:before,.ion-ios-sunny:before,.ion-ios-telephone-outline:before,.ion-ios-telephone:before,.ion-ios-tennisball-outline:before,.ion-ios-tennisball:before,.ion-ios-thunderstorm-outline:before,.ion-ios-thunderstorm:before,.ion-ios-time-outline:before,.ion-ios-time:before,.ion-ios-timer-outline:before,.ion-ios-timer:before,.ion-ios-toggle-outline:before,.ion-ios-toggle:before,.ion-ios-trash-outline:before,.ion-ios-trash:before,.ion-ios-undo-outline:before,.ion-ios-undo:before,.ion-ios-unlocked-outline:before,.ion-ios-unlocked:before,.ion-ios-upload-outline:before,.ion-ios-upload:before,.ion-ios-videocam-outline:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass-outline:before,.ion-ios-wineglass:before,.ion-ios-world-outline:before,.ion-ios-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad-outline:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-angular-outline:before,.ion-social-angular:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-chrome-outline:before,.ion-social-chrome:before,.ion-social-codepen-outline:before,.ion-social-codepen:before,.ion-social-css3-outline:before,.ion-social-css3:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-euro-outline:before,.ion-social-euro:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-html5-outline:before,.ion-social-html5:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-javascript-outline:before,.ion-social-javascript:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-python:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-sass:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-snapchat-outline:before,.ion-social-snapchat:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitch-outline:before,.ion-social-twitch:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-whatsapp-outline:before,.ion-social-whatsapp:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-yen-outline:before,.ion-social-yen:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-soup-can-outline:before,.ion-soup-can:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt-outline:before,.ion-tshirt:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:""}.ion-alert-circled:before{content:""}.ion-android-add:before{content:""}.ion-android-add-circle:before{content:""}.ion-android-alarm-clock:before{content:""}.ion-android-alert:before{content:""}.ion-android-apps:before{content:""}.ion-android-archive:before{content:""}.ion-android-arrow-back:before{content:""}.ion-android-arrow-down:before{content:""}.ion-android-arrow-dropdown:before{content:""}.ion-android-arrow-dropdown-circle:before{content:""}.ion-android-arrow-dropleft:before{content:""}.ion-android-arrow-dropleft-circle:before{content:""}.ion-android-arrow-dropright:before{content:""}.ion-android-arrow-dropright-circle:before{content:""}.ion-android-arrow-dropup:before{content:""}.ion-android-arrow-dropup-circle:before{content:""}.ion-android-arrow-forward:before{content:""}.ion-android-arrow-up:before{content:""}.ion-android-attach:before{content:""}.ion-android-bar:before{content:""}.ion-android-bicycle:before{content:""}.ion-android-boat:before{content:""}.ion-android-bookmark:before{content:""}.ion-android-bulb:before{content:""}.ion-android-bus:before{content:""}.ion-android-calendar:before{content:""}.ion-android-call:before{content:""}.ion-android-camera:before{content:""}.ion-android-cancel:before{content:""}.ion-android-car:before{content:""}.ion-android-cart:before{content:""}.ion-android-chat:before{content:""}.ion-android-checkbox:before{content:""}.ion-android-checkbox-blank:before{content:""}.ion-android-checkbox-outline:before{content:""}.ion-android-checkbox-outline-blank:before{content:""}.ion-android-checkmark-circle:before{content:""}.ion-android-clipboard:before{content:""}.ion-android-close:before{content:""}.ion-android-cloud:before{content:""}.ion-android-cloud-circle:before{content:""}.ion-android-cloud-done:before{content:""}.ion-android-cloud-outline:before{content:""}.ion-android-color-palette:before{content:""}.ion-android-compass:before{content:""}.ion-android-contact:before{content:""}.ion-android-contacts:before{content:""}.ion-android-contract:before{content:""}.ion-android-create:before{content:""}.ion-android-delete:before{content:""}.ion-android-desktop:before{content:""}.ion-android-document:before{content:""}.ion-android-done:before{content:""}.ion-android-done-all:before{content:""}.ion-android-download:before{content:""}.ion-android-drafts:before{content:""}.ion-android-exit:before{content:""}.ion-android-expand:before{content:""}.ion-android-favorite:before{content:""}.ion-android-favorite-outline:before{content:""}.ion-android-film:before{content:""}.ion-android-folder:before{content:""}.ion-android-folder-open:before{content:""}.ion-android-funnel:before{content:""}.ion-android-globe:before{content:""}.ion-android-hand:before{content:""}.ion-android-hangout:before{content:""}.ion-android-happy:before{content:""}.ion-android-home:before{content:""}.ion-android-image:before{content:""}.ion-android-laptop:before{content:""}.ion-android-list:before{content:""}.ion-android-locate:before{content:""}.ion-android-lock:before{content:""}.ion-android-mail:before{content:""}.ion-android-map:before{content:""}.ion-android-menu:before{content:""}.ion-android-microphone:before{content:""}.ion-android-microphone-off:before{content:""}.ion-android-more-horizontal:before{content:""}.ion-android-more-vertical:before{content:""}.ion-android-navigate:before{content:""}.ion-android-notifications:before{content:""}.ion-android-notifications-none:before{content:""}.ion-android-notifications-off:before{content:""}.ion-android-open:before{content:""}.ion-android-options:before{content:""}.ion-android-people:before{content:""}.ion-android-person:before{content:""}.ion-android-person-add:before{content:""}.ion-android-phone-landscape:before{content:""}.ion-android-phone-portrait:before{content:""}.ion-android-pin:before{content:""}.ion-android-plane:before{content:""}.ion-android-playstore:before{content:""}.ion-android-print:before{content:""}.ion-android-radio-button-off:before{content:""}.ion-android-radio-button-on:before{content:""}.ion-android-refresh:before{content:""}.ion-android-remove:before{content:""}.ion-android-remove-circle:before{content:""}.ion-android-restaurant:before{content:""}.ion-android-sad:before{content:""}.ion-android-search:before{content:""}.ion-android-send:before{content:""}.ion-android-settings:before{content:""}.ion-android-share:before{content:""}.ion-android-share-alt:before{content:""}.ion-android-star:before{content:""}.ion-android-star-half:before{content:""}.ion-android-star-outline:before{content:""}.ion-android-stopwatch:before{content:""}.ion-android-subway:before{content:""}.ion-android-sunny:before{content:""}.ion-android-sync:before{content:""}.ion-android-textsms:before{content:""}.ion-android-time:before{content:""}.ion-android-train:before{content:""}.ion-android-unlock:before{content:""}.ion-android-upload:before{content:""}.ion-android-volume-down:before{content:""}.ion-android-volume-mute:before{content:""}.ion-android-volume-off:before{content:""}.ion-android-volume-up:before{content:""}.ion-android-walk:before{content:""}.ion-android-warning:before{content:""}.ion-android-watch:before{content:""}.ion-android-wifi:before{content:""}.ion-aperture:before{content:""}.ion-archive:before{content:""}.ion-arrow-down-a:before{content:""}.ion-arrow-down-b:before{content:""}.ion-arrow-down-c:before{content:""}.ion-arrow-expand:before{content:""}.ion-arrow-graph-down-left:before{content:""}.ion-arrow-graph-down-right:before{content:""}.ion-arrow-graph-up-left:before{content:""}.ion-arrow-graph-up-right:before{content:""}.ion-arrow-left-a:before{content:""}.ion-arrow-left-b:before{content:""}.ion-arrow-left-c:before{content:""}.ion-arrow-move:before{content:""}.ion-arrow-resize:before{content:""}.ion-arrow-return-left:before{content:""}.ion-arrow-return-right:before{content:""}.ion-arrow-right-a:before{content:""}.ion-arrow-right-b:before{content:""}.ion-arrow-right-c:before{content:""}.ion-arrow-shrink:before{content:""}.ion-arrow-swap:before{content:""}.ion-arrow-up-a:before{content:""}.ion-arrow-up-b:before{content:""}.ion-arrow-up-c:before{content:""}.ion-asterisk:before{content:""}.ion-at:before{content:""}.ion-backspace:before{content:""}.ion-backspace-outline:before{content:""}.ion-bag:before{content:""}.ion-battery-charging:before{content:""}.ion-battery-empty:before{content:""}.ion-battery-full:before{content:""}.ion-battery-half:before{content:""}.ion-battery-low:before{content:""}.ion-beaker:before{content:""}.ion-beer:before{content:""}.ion-bluetooth:before{content:""}.ion-bonfire:before{content:""}.ion-bookmark:before{content:""}.ion-bowtie:before{content:""}.ion-briefcase:before{content:""}.ion-bug:before{content:""}.ion-calculator:before{content:""}.ion-calendar:before{content:""}.ion-camera:before{content:""}.ion-card:before{content:""}.ion-cash:before{content:""}.ion-chatbox:before{content:""}.ion-chatbox-working:before{content:""}.ion-chatboxes:before{content:""}.ion-chatbubble:before{content:""}.ion-chatbubble-working:before{content:""}.ion-chatbubbles:before{content:""}.ion-checkmark:before{content:""}.ion-checkmark-circled:before{content:""}.ion-checkmark-round:before{content:""}.ion-chevron-down:before{content:""}.ion-chevron-left:before{content:""}.ion-chevron-right:before{content:""}.ion-chevron-up:before{content:""}.ion-clipboard:before{content:""}.ion-clock:before{content:""}.ion-close:before{content:""}.ion-close-circled:before{content:""}.ion-close-round:before{content:""}.ion-closed-captioning:before{content:""}.ion-cloud:before{content:""}.ion-code:before{content:""}.ion-code-download:before{content:""}.ion-code-working:before{content:""}.ion-coffee:before{content:""}.ion-compass:before{content:""}.ion-compose:before{content:""}.ion-connection-bars:before{content:""}.ion-contrast:before{content:""}.ion-crop:before{content:""}.ion-cube:before{content:""}.ion-disc:before{content:""}.ion-document:before{content:""}.ion-document-text:before{content:""}.ion-drag:before{content:""}.ion-earth:before{content:""}.ion-easel:before{content:""}.ion-edit:before{content:""}.ion-egg:before{content:""}.ion-eject:before{content:""}.ion-email:before{content:""}.ion-email-unread:before{content:""}.ion-erlenmeyer-flask:before{content:""}.ion-erlenmeyer-flask-bubbles:before{content:""}.ion-eye:before{content:""}.ion-eye-disabled:before{content:""}.ion-female:before{content:""}.ion-filing:before{content:""}.ion-film-marker:before{content:""}.ion-fireball:before{content:""}.ion-flag:before{content:""}.ion-flame:before{content:""}.ion-flash:before{content:""}.ion-flash-off:before{content:""}.ion-folder:before{content:""}.ion-fork:before{content:""}.ion-fork-repo:before{content:""}.ion-forward:before{content:""}.ion-funnel:before{content:""}.ion-gear-a:before{content:""}.ion-gear-b:before{content:""}.ion-grid:before{content:""}.ion-hammer:before{content:""}.ion-happy:before{content:""}.ion-happy-outline:before{content:""}.ion-headphone:before{content:""}.ion-heart:before{content:""}.ion-heart-broken:before{content:""}.ion-help:before{content:""}.ion-help-buoy:before{content:""}.ion-help-circled:before{content:""}.ion-home:before{content:""}.ion-icecream:before{content:""}.ion-image:before{content:""}.ion-images:before{content:""}.ion-information:before{content:""}.ion-information-circled:before{content:""}.ion-ionic:before{content:""}.ion-ios-alarm:before{content:""}.ion-ios-alarm-outline:before{content:""}.ion-ios-albums:before{content:""}.ion-ios-albums-outline:before{content:""}.ion-ios-americanfootball:before{content:""}.ion-ios-americanfootball-outline:before{content:""}.ion-ios-analytics:before{content:""}.ion-ios-analytics-outline:before{content:""}.ion-ios-arrow-back:before{content:""}.ion-ios-arrow-down:before{content:""}.ion-ios-arrow-forward:before{content:""}.ion-ios-arrow-left:before{content:""}.ion-ios-arrow-right:before{content:""}.ion-ios-arrow-thin-down:before{content:""}.ion-ios-arrow-thin-left:before{content:""}.ion-ios-arrow-thin-right:before{content:""}.ion-ios-arrow-thin-up:before{content:""}.ion-ios-arrow-up:before{content:""}.ion-ios-at:before{content:""}.ion-ios-at-outline:before{content:""}.ion-ios-barcode:before{content:""}.ion-ios-barcode-outline:before{content:""}.ion-ios-baseball:before{content:""}.ion-ios-baseball-outline:before{content:""}.ion-ios-basketball:before{content:""}.ion-ios-basketball-outline:before{content:""}.ion-ios-bell:before{content:""}.ion-ios-bell-outline:before{content:""}.ion-ios-body:before{content:""}.ion-ios-body-outline:before{content:""}.ion-ios-bolt:before{content:""}.ion-ios-bolt-outline:before{content:""}.ion-ios-book:before{content:""}.ion-ios-book-outline:before{content:""}.ion-ios-bookmarks:before{content:""}.ion-ios-bookmarks-outline:before{content:""}.ion-ios-box:before{content:""}.ion-ios-box-outline:before{content:""}.ion-ios-briefcase:before{content:""}.ion-ios-briefcase-outline:before{content:""}.ion-ios-browsers:before{content:""}.ion-ios-browsers-outline:before{content:""}.ion-ios-calculator:before{content:""}.ion-ios-calculator-outline:before{content:""}.ion-ios-calendar:before{content:""}.ion-ios-calendar-outline:before{content:""}.ion-ios-camera:before{content:""}.ion-ios-camera-outline:before{content:""}.ion-ios-cart:before{content:""}.ion-ios-cart-outline:before{content:""}.ion-ios-chatboxes:before{content:""}.ion-ios-chatboxes-outline:before{content:""}.ion-ios-chatbubble:before{content:""}.ion-ios-chatbubble-outline:before{content:""}.ion-ios-checkmark:before{content:""}.ion-ios-checkmark-empty:before{content:""}.ion-ios-checkmark-outline:before{content:""}.ion-ios-circle-filled:before{content:""}.ion-ios-circle-outline:before{content:""}.ion-ios-clock:before{content:""}.ion-ios-clock-outline:before{content:""}.ion-ios-close:before{content:""}.ion-ios-close-empty:before{content:""}.ion-ios-close-outline:before{content:""}.ion-ios-cloud:before{content:""}.ion-ios-cloud-download:before{content:""}.ion-ios-cloud-download-outline:before{content:""}.ion-ios-cloud-outline:before{content:""}.ion-ios-cloud-upload:before{content:""}.ion-ios-cloud-upload-outline:before{content:""}.ion-ios-cloudy:before{content:""}.ion-ios-cloudy-night:before{content:""}.ion-ios-cloudy-night-outline:before{content:""}.ion-ios-cloudy-outline:before{content:""}.ion-ios-cog:before{content:""}.ion-ios-cog-outline:before{content:""}.ion-ios-color-filter:before{content:""}.ion-ios-color-filter-outline:before{content:""}.ion-ios-color-wand:before{content:""}.ion-ios-color-wand-outline:before{content:""}.ion-ios-compose:before{content:""}.ion-ios-compose-outline:before{content:""}.ion-ios-contact:before{content:""}.ion-ios-contact-outline:before{content:""}.ion-ios-copy:before{content:""}.ion-ios-copy-outline:before{content:""}.ion-ios-crop:before{content:""}.ion-ios-crop-strong:before{content:""}.ion-ios-download:before{content:""}.ion-ios-download-outline:before{content:""}.ion-ios-drag:before{content:""}.ion-ios-email:before{content:""}.ion-ios-email-outline:before{content:""}.ion-ios-eye:before{content:""}.ion-ios-eye-outline:before{content:""}.ion-ios-fastforward:before{content:""}.ion-ios-fastforward-outline:before{content:""}.ion-ios-filing:before{content:""}.ion-ios-filing-outline:before{content:""}.ion-ios-film:before{content:""}.ion-ios-film-outline:before{content:""}.ion-ios-flag:before{content:""}.ion-ios-flag-outline:before{content:""}.ion-ios-flame:before{content:""}.ion-ios-flame-outline:before{content:""}.ion-ios-flask:before{content:""}.ion-ios-flask-outline:before{content:""}.ion-ios-flower:before{content:""}.ion-ios-flower-outline:before{content:""}.ion-ios-folder:before{content:""}.ion-ios-folder-outline:before{content:""}.ion-ios-football:before{content:""}.ion-ios-football-outline:before{content:""}.ion-ios-game-controller-a:before{content:""}.ion-ios-game-controller-a-outline:before{content:""}.ion-ios-game-controller-b:before{content:""}.ion-ios-game-controller-b-outline:before{content:""}.ion-ios-gear:before{content:""}.ion-ios-gear-outline:before{content:""}.ion-ios-glasses:before{content:""}.ion-ios-glasses-outline:before{content:""}.ion-ios-grid-view:before{content:""}.ion-ios-grid-view-outline:before{content:""}.ion-ios-heart:before{content:""}.ion-ios-heart-outline:before{content:""}.ion-ios-help:before{content:""}.ion-ios-help-empty:before{content:""}.ion-ios-help-outline:before{content:""}.ion-ios-home:before{content:""}.ion-ios-home-outline:before{content:""}.ion-ios-infinite:before{content:""}.ion-ios-infinite-outline:before{content:""}.ion-ios-information:before{content:""}.ion-ios-information-empty:before{content:""}.ion-ios-information-outline:before{content:""}.ion-ios-ionic-outline:before{content:""}.ion-ios-keypad:before{content:""}.ion-ios-keypad-outline:before{content:""}.ion-ios-lightbulb:before{content:""}.ion-ios-lightbulb-outline:before{content:""}.ion-ios-list:before{content:""}.ion-ios-list-outline:before{content:""}.ion-ios-location:before{content:""}.ion-ios-location-outline:before{content:""}.ion-ios-locked:before{content:""}.ion-ios-locked-outline:before{content:""}.ion-ios-loop:before{content:""}.ion-ios-loop-strong:before{content:""}.ion-ios-medical:before{content:""}.ion-ios-medical-outline:before{content:""}.ion-ios-medkit:before{content:""}.ion-ios-medkit-outline:before{content:""}.ion-ios-mic:before{content:""}.ion-ios-mic-off:before{content:""}.ion-ios-mic-outline:before{content:""}.ion-ios-minus:before{content:""}.ion-ios-minus-empty:before{content:""}.ion-ios-minus-outline:before{content:""}.ion-ios-monitor:before{content:""}.ion-ios-monitor-outline:before{content:""}.ion-ios-moon:before{content:""}.ion-ios-moon-outline:before{content:""}.ion-ios-more:before{content:""}.ion-ios-more-outline:before{content:""}.ion-ios-musical-note:before{content:""}.ion-ios-musical-notes:before{content:""}.ion-ios-navigate:before{content:""}.ion-ios-navigate-outline:before{content:""}.ion-ios-nutrition:before{content:""}.ion-ios-nutrition-outline:before{content:""}.ion-ios-paper:before{content:""}.ion-ios-paper-outline:before{content:""}.ion-ios-paperplane:before{content:""}.ion-ios-paperplane-outline:before{content:""}.ion-ios-partlysunny:before{content:""}.ion-ios-partlysunny-outline:before{content:""}.ion-ios-pause:before{content:""}.ion-ios-pause-outline:before{content:""}.ion-ios-paw:before{content:""}.ion-ios-paw-outline:before{content:""}.ion-ios-people:before{content:""}.ion-ios-people-outline:before{content:""}.ion-ios-person:before{content:""}.ion-ios-person-outline:before{content:""}.ion-ios-personadd:before{content:""}.ion-ios-personadd-outline:before{content:""}.ion-ios-photos:before{content:""}.ion-ios-photos-outline:before{content:""}.ion-ios-pie:before{content:""}.ion-ios-pie-outline:before{content:""}.ion-ios-pint:before{content:""}.ion-ios-pint-outline:before{content:""}.ion-ios-play:before{content:""}.ion-ios-play-outline:before{content:""}.ion-ios-plus:before{content:""}.ion-ios-plus-empty:before{content:""}.ion-ios-plus-outline:before{content:""}.ion-ios-pricetag:before{content:""}.ion-ios-pricetag-outline:before{content:""}.ion-ios-pricetags:before{content:""}.ion-ios-pricetags-outline:before{content:""}.ion-ios-printer:before{content:""}.ion-ios-printer-outline:before{content:""}.ion-ios-pulse:before{content:""}.ion-ios-pulse-strong:before{content:""}.ion-ios-rainy:before{content:""}.ion-ios-rainy-outline:before{content:""}.ion-ios-recording:before{content:""}.ion-ios-recording-outline:before{content:""}.ion-ios-redo:before{content:""}.ion-ios-redo-outline:before{content:""}.ion-ios-refresh:before{content:""}.ion-ios-refresh-empty:before{content:""}.ion-ios-refresh-outline:before{content:""}.ion-ios-reload:before{content:""}.ion-ios-reverse-camera:before{content:""}.ion-ios-reverse-camera-outline:before{content:""}.ion-ios-rewind:before{content:""}.ion-ios-rewind-outline:before{content:""}.ion-ios-rose:before{content:""}.ion-ios-rose-outline:before{content:""}.ion-ios-search:before{content:""}.ion-ios-search-strong:before{content:""}.ion-ios-settings:before{content:""}.ion-ios-settings-strong:before{content:""}.ion-ios-shuffle:before{content:""}.ion-ios-shuffle-strong:before{content:""}.ion-ios-skipbackward:before{content:""}.ion-ios-skipbackward-outline:before{content:""}.ion-ios-skipforward:before{content:""}.ion-ios-skipforward-outline:before{content:""}.ion-ios-snowy:before{content:""}.ion-ios-speedometer:before{content:""}.ion-ios-speedometer-outline:before{content:""}.ion-ios-star:before{content:""}.ion-ios-star-half:before{content:""}.ion-ios-star-outline:before{content:""}.ion-ios-stopwatch:before{content:""}.ion-ios-stopwatch-outline:before{content:""}.ion-ios-sunny:before{content:""}.ion-ios-sunny-outline:before{content:""}.ion-ios-telephone:before{content:""}.ion-ios-telephone-outline:before{content:""}.ion-ios-tennisball:before{content:""}.ion-ios-tennisball-outline:before{content:""}.ion-ios-thunderstorm:before{content:""}.ion-ios-thunderstorm-outline:before{content:""}.ion-ios-time:before{content:""}.ion-ios-time-outline:before{content:""}.ion-ios-timer:before{content:""}.ion-ios-timer-outline:before{content:""}.ion-ios-toggle:before{content:""}.ion-ios-toggle-outline:before{content:""}.ion-ios-trash:before{content:""}.ion-ios-trash-outline:before{content:""}.ion-ios-undo:before{content:""}.ion-ios-undo-outline:before{content:""}.ion-ios-unlocked:before{content:""}.ion-ios-unlocked-outline:before{content:""}.ion-ios-upload:before{content:""}.ion-ios-upload-outline:before{content:""}.ion-ios-videocam:before{content:""}.ion-ios-videocam-outline:before{content:""}.ion-ios-volume-high:before{content:""}.ion-ios-volume-low:before{content:""}.ion-ios-wineglass:before{content:""}.ion-ios-wineglass-outline:before{content:""}.ion-ios-world:before{content:""}.ion-ios-world-outline:before{content:""}.ion-ipad:before{content:""}.ion-iphone:before{content:""}.ion-ipod:before{content:""}.ion-jet:before{content:""}.ion-key:before{content:""}.ion-knife:before{content:""}.ion-laptop:before{content:""}.ion-leaf:before{content:""}.ion-levels:before{content:""}.ion-lightbulb:before{content:""}.ion-link:before{content:""}.ion-load-a:before{content:""}.ion-load-b:before{content:""}.ion-load-c:before{content:""}.ion-load-d:before{content:""}.ion-location:before{content:""}.ion-lock-combination:before{content:""}.ion-locked:before{content:""}.ion-log-in:before{content:""}.ion-log-out:before{content:""}.ion-loop:before{content:""}.ion-magnet:before{content:""}.ion-male:before{content:""}.ion-man:before{content:""}.ion-map:before{content:""}.ion-medkit:before{content:""}.ion-merge:before{content:""}.ion-mic-a:before{content:""}.ion-mic-b:before{content:""}.ion-mic-c:before{content:""}.ion-minus:before{content:""}.ion-minus-circled:before{content:""}.ion-minus-round:before{content:""}.ion-model-s:before{content:""}.ion-monitor:before{content:""}.ion-more:before{content:""}.ion-mouse:before{content:""}.ion-music-note:before{content:""}.ion-navicon:before{content:""}.ion-navicon-round:before{content:""}.ion-navigate:before{content:""}.ion-network:before{content:""}.ion-no-smoking:before{content:""}.ion-nuclear:before{content:""}.ion-outlet:before{content:""}.ion-paintbrush:before{content:""}.ion-paintbucket:before{content:""}.ion-paper-airplane:before{content:""}.ion-paperclip:before{content:""}.ion-pause:before{content:""}.ion-person:before{content:""}.ion-person-add:before{content:""}.ion-person-stalker:before{content:""}.ion-pie-graph:before{content:""}.ion-pin:before{content:""}.ion-pinpoint:before{content:""}.ion-pizza:before{content:""}.ion-plane:before{content:""}.ion-planet:before{content:""}.ion-play:before{content:""}.ion-playstation:before{content:""}.ion-plus:before{content:""}.ion-plus-circled:before{content:""}.ion-plus-round:before{content:""}.ion-podium:before{content:""}.ion-pound:before{content:""}.ion-power:before{content:""}.ion-pricetag:before{content:""}.ion-pricetags:before{content:""}.ion-printer:before{content:""}.ion-pull-request:before{content:""}.ion-qr-scanner:before{content:""}.ion-quote:before{content:""}.ion-radio-waves:before{content:""}.ion-record:before{content:""}.ion-refresh:before{content:""}.ion-reply:before{content:""}.ion-reply-all:before{content:""}.ion-ribbon-a:before{content:""}.ion-ribbon-b:before{content:""}.ion-sad:before{content:""}.ion-sad-outline:before{content:""}.ion-scissors:before{content:""}.ion-search:before{content:""}.ion-settings:before{content:""}.ion-share:before{content:""}.ion-shuffle:before{content:""}.ion-skip-backward:before{content:""}.ion-skip-forward:before{content:""}.ion-social-android:before{content:""}.ion-social-android-outline:before{content:""}.ion-social-angular:before{content:""}.ion-social-angular-outline:before{content:""}.ion-social-apple:before{content:""}.ion-social-apple-outline:before{content:""}.ion-social-bitcoin:before{content:""}.ion-social-bitcoin-outline:before{content:""}.ion-social-buffer:before{content:""}.ion-social-buffer-outline:before{content:""}.ion-social-chrome:before{content:""}.ion-social-chrome-outline:before{content:""}.ion-social-codepen:before{content:""}.ion-social-codepen-outline:before{content:""}.ion-social-css3:before{content:""}.ion-social-css3-outline:before{content:""}.ion-social-designernews:before{content:""}.ion-social-designernews-outline:before{content:""}.ion-social-dribbble:before{content:""}.ion-social-dribbble-outline:before{content:""}.ion-social-dropbox:before{content:""}.ion-social-dropbox-outline:before{content:""}.ion-social-euro:before{content:""}.ion-social-euro-outline:before{content:""}.ion-social-facebook:before{content:""}.ion-social-facebook-outline:before{content:""}.ion-social-foursquare:before{content:""}.ion-social-foursquare-outline:before{content:""}.ion-social-freebsd-devil:before{content:""}.ion-social-github:before{content:""}.ion-social-github-outline:before{content:""}.ion-social-google:before{content:""}.ion-social-google-outline:before{content:""}.ion-social-googleplus:before{content:""}.ion-social-googleplus-outline:before{content:""}.ion-social-hackernews:before{content:""}.ion-social-hackernews-outline:before{content:""}.ion-social-html5:before{content:""}.ion-social-html5-outline:before{content:""}.ion-social-instagram:before{content:""}.ion-social-instagram-outline:before{content:""}.ion-social-javascript:before{content:""}.ion-social-javascript-outline:before{content:""}.ion-social-linkedin:before{content:""}.ion-social-linkedin-outline:before{content:""}.ion-social-markdown:before{content:""}.ion-social-nodejs:before{content:""}.ion-social-octocat:before{content:""}.ion-social-pinterest:before{content:""}.ion-social-pinterest-outline:before{content:""}.ion-social-python:before{content:""}.ion-social-reddit:before{content:""}.ion-social-reddit-outline:before{content:""}.ion-social-rss:before{content:""}.ion-social-rss-outline:before{content:""}.ion-social-sass:before{content:""}.ion-social-skype:before{content:""}.ion-social-skype-outline:before{content:""}.ion-social-snapchat:before{content:""}.ion-social-snapchat-outline:before{content:""}.ion-social-tumblr:before{content:""}.ion-social-tumblr-outline:before{content:""}.ion-social-tux:before{content:""}.ion-social-twitch:before{content:""}.ion-social-twitch-outline:before{content:""}.ion-social-twitter:before{content:""}.ion-social-twitter-outline:before{content:""}.ion-social-usd:before{content:""}.ion-social-usd-outline:before{content:""}.ion-social-vimeo:before{content:""}.ion-social-vimeo-outline:before{content:""}.ion-social-whatsapp:before{content:""}.ion-social-whatsapp-outline:before{content:""}.ion-social-windows:before{content:""}.ion-social-windows-outline:before{content:""}.ion-social-wordpress:before{content:""}.ion-social-wordpress-outline:before{content:""}.ion-social-yahoo:before{content:""}.ion-social-yahoo-outline:before{content:""}.ion-social-yen:before{content:""}.ion-social-yen-outline:before{content:""}.ion-social-youtube:before{content:""}.ion-social-youtube-outline:before{content:""}.ion-soup-can:before{content:""}.ion-soup-can-outline:before{content:""}.ion-speakerphone:before{content:""}.ion-speedometer:before{content:""}.ion-spoon:before{content:""}.ion-star:before{content:""}.ion-stats-bars:before{content:""}.ion-steam:before{content:""}.ion-stop:before{content:""}.ion-thermometer:before{content:""}.ion-thumbsdown:before{content:""}.ion-thumbsup:before{content:""}.ion-toggle:before{content:""}.ion-toggle-filled:before{content:""}.ion-transgender:before{content:""}.ion-trash-a:before{content:""}.ion-trash-b:before{content:""}.ion-trophy:before{content:""}.ion-tshirt:before{content:""}.ion-tshirt-outline:before{content:""}.ion-umbrella:before{content:""}.ion-university:before{content:""}.ion-unlocked:before{content:""}.ion-upload:before{content:""}.ion-usb:before{content:""}.ion-videocamera:before{content:""}.ion-volume-high:before{content:""}.ion-volume-low:before{content:""}.ion-volume-medium:before{content:""}.ion-volume-mute:before{content:""}.ion-wand:before{content:""}.ion-waterdrop:before{content:""}.ion-wifi:before{content:""}.ion-wineglass:before{content:""}.ion-woman:before{content:""}.ion-wrench:before{content:""}.ion-xbox:before{content:""}/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{height:0}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{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 #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#67808c;text-decoration:none}a:focus,a:hover{color:#465760;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto}.img-rounded{border-radius:4px}.img-thumbnail{padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:3px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}select[multiple],select[size],textarea.form-control{height:auto}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,output,pre{line-height:1.428571429}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#67808c}a.text-primary:focus,a.text-primary:hover{color:#51656f}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#67808c}a.bg-primary:focus,a.bg-primary:hover{background-color:#51656f}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:3px}kbd{color:#fff;background-color:#333;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:" "}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}.checkbox,.radio,input[type=file],output{display:block}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=range]{display:block;width:100%}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px;font-size:14px;color:#555}.form-control{border-radius:3px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:3px;-moz-user-select:none;user-select:none}.no-select,.swal2-icon{-moz-user-select:none;-webkit-touch-callout:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#67808c;border-color:#5c727d}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#51656f;border-color:#262f34}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#51656f;border-color:#42525a}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#42525a;border-color:#262f34}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#67808c;border-color:#5c727d}.btn-primary .badge{color:#67808c;background-color:#fff}.btn-success{color:#fff;background-color:#7ED321;border-color:#71bd1e}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#64a71a;border-color:#2f4f0c}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#64a71a;border-color:#518815}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#518815;border-color:#2f4f0c}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#7ED321;border-color:#71bd1e}.btn-success .badge{color:#7ED321;background-color:#fff}.btn-info{color:#fff;background-color:#3498db;border-color:#258cd1}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#217dbb;border-color:#124364}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#217dbb;border-color:#1c699d}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#1c699d;border-color:#124364}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3498db;border-color:#258cd1}.btn-info .badge{color:#3498db;background-color:#fff}.btn-warning{color:#fff;background-color:#f80;border-color:#e67a00}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#cc6d00;border-color:#663600}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#cc6d00;border-color:#a85a00}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#a85a00;border-color:#663600}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f80;border-color:#e67a00}.btn-warning .badge{color:#f80;background-color:#fff}.btn-danger{color:#fff;background-color:#ff6f6f;border-color:#ff5656}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#ff3c3c;border-color:#d50000}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#ff3c3c;border-color:#ff1818}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ff1818;border-color:#d50000}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#ff6f6f;border-color:#ff5656}.btn-danger .badge{color:#ff6f6f;background-color:#fff}.btn-link{color:#67808c;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#465760;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.428571429;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#67808c}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.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:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 3px 3px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:3px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav:after{clear:both}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#67808c}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:3px 3px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:3px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#67808c}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:3px 3px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:after,.navbar:before{content:" ";display:table}.navbar-header:after,.navbar-header:before{content:" ";display:table}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:" ";display:table}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:3px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:3px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:3px 3px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:3px}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:3px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#67808c;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#465760;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#67808c;border-color:#67808c;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:" ";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#67808c}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#51656f}.label-success{background-color:#7ED321}.label-success[href]:focus,.label-success[href]:hover{background-color:#64a71a}.label-info{background-color:#3498db}.label-info[href]:focus,.label-info[href]:hover{background-color:#217dbb}.label-warning{background-color:#f80}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#cc6d00}.label-danger{background-color:#ff6f6f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#ff3c3c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#67808c;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:4px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:3px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#67808c}.alert{padding:15px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:3px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#67808c;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7ED321}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#3498db}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f80}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#ff6f6f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#67808c;border-color:#67808c}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#dbe1e4}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel,body.status-page .list-group.components{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table,body.status-page .list-group.components>.list-group,body.status-page .list-group.components>.panel-collapse>.list-group,body.status-page .list-group.components>.panel-collapse>.table,body.status-page .list-group.components>.table,body.status-page .list-group.components>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item,body.status-page .list-group.components>.list-group .list-group-item,body.status-page .list-group.components>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,body.status-page .list-group.components>.table-bordered>tbody>tr:first-child>td,body.status-page .list-group.components>.table-bordered>tbody>tr:first-child>th,body.status-page .list-group.components>.table-bordered>tbody>tr:last-child>td,body.status-page .list-group.components>.table-bordered>tbody>tr:last-child>th,body.status-page .list-group.components>.table-bordered>tfoot>tr:last-child>td,body.status-page .list-group.components>.table-bordered>tfoot>tr:last-child>th,body.status-page .list-group.components>.table-bordered>thead>tr:first-child>td,body.status-page .list-group.components>.table-bordered>thead>tr:first-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:first-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:first-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:last-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr:last-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr:last-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr:last-child>th,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr:first-child>td,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,body.status-page .list-group.components>.table:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child,body.status-page .list-group.components>.list-group:first-child .list-group-item:first-child,body.status-page .list-group.components>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child,body.status-page .list-group.components>.list-group:last-child .list-group-item:last-child,body.status-page .list-group.components>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child,body.status-page .list-group.components>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,body.status-page .list-group.components>.table:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption,body.status-page .list-group.components>.panel-collapse>.table caption,body.status-page .list-group.components>.table caption,body.status-page .list-group.components>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child th:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child td:first-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table:first-child>tbody:first-child>tr:first-child th:last-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child td:last-child,body.status-page .list-group.components>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child th:first-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child td:first-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table:last-child>tbody:last-child>tr:last-child th:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child td:last-child,body.status-page .list-group.components>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:2px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body,body.status-page .list-group.components>.panel-body+.table,body.status-page .list-group.components>.panel-body+.table-responsive,body.status-page .list-group.components>.table+.panel-body,body.status-page .list-group.components>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th,body.status-page .list-group.components>.table>tbody:first-child>tr:first-child td,body.status-page .list-group.components>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered,body.status-page .list-group.components>.table-bordered,body.status-page .list-group.components>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,body.status-page .list-group.components>.table-bordered>tbody>tr>td:first-child,body.status-page .list-group.components>.table-bordered>tbody>tr>th:first-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>td:first-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>th:first-child,body.status-page .list-group.components>.table-bordered>thead>tr>td:first-child,body.status-page .list-group.components>.table-bordered>thead>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>th:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>td:first-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,body.status-page .list-group.components>.table-bordered>tbody>tr>td:last-child,body.status-page .list-group.components>.table-bordered>tbody>tr>th:last-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>td:last-child,body.status-page .list-group.components>.table-bordered>tfoot>tr>th:last-child,body.status-page .list-group.components>.table-bordered>thead>tr>td:last-child,body.status-page .list-group.components>.table-bordered>thead>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tbody>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>tfoot>tr>th:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>td:last-child,body.status-page .list-group.components>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive,body.status-page .list-group.components>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel,.panel-group body.status-page .list-group.components,body.status-page .panel-group .list-group.components{margin-bottom:0;border-radius:3px}.panel-group .panel+.panel,.panel-group body.status-page .list-group.components+.list-group.components,.panel-group body.status-page .list-group.components+.panel,.panel-group body.status-page .panel+.list-group.components,body.status-page .panel-group .list-group.components+.list-group.components,body.status-page .panel-group .list-group.components+.panel,body.status-page .panel-group .panel+.list-group.components{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#67808c}.panel-primary>.panel-heading{color:#fff;background-color:#67808c;border-color:#67808c}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#67808c}.panel-primary>.panel-heading .badge{color:#67808c;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#67808c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:4px}.well-sm{padding:9px;border-radius:2px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:" "}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-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}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#333}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:3px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:3px 3px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-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;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:" ";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}body.status-page,html{-webkit-font-smoothing:antialiased}div[role=tabpanel] .tab-content,div[role=tabpanel] ul.nav-tabs{border-bottom:1px solid #d5d8d7}.affix{position:fixed}.markdown-control,html{position:relative}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}html{min-height:100%;overflow-y:scroll}body{margin-bottom:60px;padding-bottom:60px}.uppercase{text-transform:uppercase}.margin-top{margin-top:20px}.margin-bottom{margin-bottom:20px}.no-select{user-select:none}div[role=tabpanel] ul.nav-tabs li a{font-weight:400;display:inline-block;padding:10px 25px;border-radius:0;font-size:.9em;letter-spacing:.01em}div[role=tabpanel] .tab-content{border-left:1px solid #d5d8d7;border-right:1px solid #d5d8d7;background-color:#fff}div[role=tabpanel] .tab-content .tab-pane{padding:10px}label{font-size:14px}textarea{resize:none}.markdown-control:before{position:absolute;display:block;right:0;bottom:0;width:40px;height:40px;font-size:2em;font-family:Ionicons;content:"\f4e6"}.form-control{display:block;width:100%;height:45px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;border:1px solid #ccc;box-shadow:none!important;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9}@media (max-width:767px){.component-inline .radio-items{text-align:left}.component-inline .radio-items .radio-inline{margin-left:0;width:100%}}.minicolors-theme-bootstrap .minicolors-swatch{top:9px;left:9px}.well{border-radius:0}.alert{border-radius:4px;background:#F7CA18;border:2px solid #d5ab07}.alert.alert-success{background-color:#7ED321;border:2px solid #64a71a;color:#fff}.alert.alert-success a{color:#fff;font-weight:700}.alert.alert-info{background:#3498db;border:2px solid #217dbb;color:#fff}.alert.alert-info a{color:#fff;font-weight:700}.alert.alert-danger{background:#ff6f6f;border:2px solid #ff3c3c;color:#fff}.alert.alert-danger a{color:#fff;font-weight:700}.swal2-modal h2,body.error-page h3.font-bold{font-weight:600}.panel-danger{border-color:#ff3c3c}.panel-danger>.panel-heading{color:#fff;background-color:#ff6f6f;border-color:#ff3c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff3c3c}.panel-danger>.panel-heading .badge{color:#ff6f6f;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff3c3c}.panel-success{border-color:#64a71a}.panel-success>.panel-heading{color:#fff;background-color:#7ED321;border-color:#64a71a}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#64a71a}.panel-success>.panel-heading .badge{color:#7ED321;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#64a71a}.panel-info{border-color:#217dbb}.panel-info>.panel-heading{color:#fff;background-color:#3498db;border-color:#217dbb}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#217dbb}.panel-info>.panel-heading .badge{color:#3498db;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#217dbb}.panel-warning{border-color:#d5ab07}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#F7CA18;border-color:#d5ab07}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d5ab07}.panel-warning>.panel-heading .badge{color:#F7CA18;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d5ab07}.btn.btn-default{color:#333;background:#fff;border:1px solid #e6e6e6}.btn.btn-default.active,.btn.btn-default:active,.btn.btn-default:focus,.btn.btn-default:hover{background:#f2f2f2;border-color:#e6e6e6;color:#333;outline:0;outline-offset:0}.btn.btn-default.disabled,.btn.btn-default.disabled.active,.btn.btn-default.disabled:active,.btn.btn-default.disabled:focus,.btn.btn-default.disabled:hover,.btn.btn-default[disabled],.btn.btn-default[disabled].active,.btn.btn-default[disabled]:active,.btn.btn-default[disabled]:focus,.btn.btn-default[disabled]:hover,fieldset[disabled] .btn.btn-default,fieldset[disabled] .btn.btn-default.active,fieldset[disabled] .btn.btn-default:active,fieldset[disabled] .btn.btn-default:focus,fieldset[disabled] .btn.btn-default:hover{background-color:#fff;border-color:#e6e6e6}.btn.btn-primary{color:#fff;background:#67808c;border:1px solid #51656f}.btn.btn-primary.active,.btn.btn-primary:active,.btn.btn-primary:focus,.btn.btn-primary:hover{background:#5c727d;border-color:#51656f;color:#fff;outline:0;outline-offset:0}.btn.btn-primary.disabled,.btn.btn-primary.disabled.active,.btn.btn-primary.disabled:active,.btn.btn-primary.disabled:focus,.btn.btn-primary.disabled:hover,.btn.btn-primary[disabled],.btn.btn-primary[disabled].active,.btn.btn-primary[disabled]:active,.btn.btn-primary[disabled]:focus,.btn.btn-primary[disabled]:hover,fieldset[disabled] .btn.btn-primary,fieldset[disabled] .btn.btn-primary.active,fieldset[disabled] .btn.btn-primary:active,fieldset[disabled] .btn.btn-primary:focus,fieldset[disabled] .btn.btn-primary:hover{background-color:#748c99;border-color:#51656f}.btn.btn-success{color:#fff;background:#7ED321;border:1px solid #64a71a}.btn.btn-success.active,.btn.btn-success:active,.btn.btn-success:focus,.btn.btn-success:hover{background:#71bd1e;border-color:#64a71a;color:#fff;outline:0;outline-offset:0}.btn.btn-success.disabled,.btn.btn-success.disabled.active,.btn.btn-success.disabled:active,.btn.btn-success.disabled:focus,.btn.btn-success.disabled:hover,.btn.btn-success[disabled],.btn.btn-success[disabled].active,.btn.btn-success[disabled]:active,.btn.btn-success[disabled]:focus,.btn.btn-success[disabled]:hover,fieldset[disabled] .btn.btn-success,fieldset[disabled] .btn.btn-success.active,fieldset[disabled] .btn.btn-success:active,fieldset[disabled] .btn.btn-success:focus,fieldset[disabled] .btn.btn-success:hover{background-color:#8bde2f;border-color:#64a71a}.btn.btn-info{color:#fff;background:#3498db;border:1px solid #217dbb}.btn.btn-info.active,.btn.btn-info:active,.btn.btn-info:focus,.btn.btn-info:hover{background:#258cd1;border-color:#217dbb;color:#fff;outline:0;outline-offset:0}.btn.btn-info.disabled,.btn.btn-info.disabled.active,.btn.btn-info.disabled:active,.btn.btn-info.disabled:focus,.btn.btn-info.disabled:hover,.btn.btn-info[disabled],.btn.btn-info[disabled].active,.btn.btn-info[disabled]:active,.btn.btn-info[disabled]:focus,.btn.btn-info[disabled]:hover,fieldset[disabled] .btn.btn-info,fieldset[disabled] .btn.btn-info.active,fieldset[disabled] .btn.btn-info:active,fieldset[disabled] .btn.btn-info:focus,fieldset[disabled] .btn.btn-info:hover{background-color:#4aa3df;border-color:#217dbb}.btn.btn-warning{color:#fff;background:#f80;border:1px solid #cc6d00}.btn.btn-warning.active,.btn.btn-warning:active,.btn.btn-warning:focus,.btn.btn-warning:hover{background:#e67a00;border-color:#cc6d00;color:#fff;outline:0;outline-offset:0}.btn.btn-warning.disabled,.btn.btn-warning.disabled.active,.btn.btn-warning.disabled:active,.btn.btn-warning.disabled:focus,.btn.btn-warning.disabled:hover,.btn.btn-warning[disabled],.btn.btn-warning[disabled].active,.btn.btn-warning[disabled]:active,.btn.btn-warning[disabled]:focus,.btn.btn-warning[disabled]:hover,fieldset[disabled] .btn.btn-warning,fieldset[disabled] .btn.btn-warning.active,fieldset[disabled] .btn.btn-warning:active,fieldset[disabled] .btn.btn-warning:focus,fieldset[disabled] .btn.btn-warning:hover{background-color:#ff941a;border-color:#cc6d00}.btn.btn-danger{color:#fff;background:#ff6f6f;border:1px solid #ff3c3c}.btn.btn-danger.active,.btn.btn-danger:active,.btn.btn-danger:focus,.btn.btn-danger:hover{background:#ff5656;border-color:#ff3c3c;color:#fff;outline:0;outline-offset:0}.btn.btn-danger.disabled,.btn.btn-danger.disabled.active,.btn.btn-danger.disabled:active,.btn.btn-danger.disabled:focus,.btn.btn-danger.disabled:hover,.btn.btn-danger[disabled],.btn.btn-danger[disabled].active,.btn.btn-danger[disabled]:active,.btn.btn-danger[disabled]:focus,.btn.btn-danger[disabled]:hover,fieldset[disabled] .btn.btn-danger,fieldset[disabled] .btn.btn-danger.active,fieldset[disabled] .btn.btn-danger:active,fieldset[disabled] .btn.btn-danger:focus,fieldset[disabled] .btn.btn-danger:hover{background-color:#ff8989;border-color:#ff3c3c}.btn.btn-inverse{color:#fff;background:#474949;border:1px solid #2e2f2f}.btn.btn-inverse.active,.btn.btn-inverse:active,.btn.btn-inverse:focus,.btn.btn-inverse:hover{background:#3a3c3c;border-color:#2e2f2f;color:#fff;outline:0;outline-offset:0}.btn.btn-inverse.disabled,.btn.btn-inverse.disabled.active,.btn.btn-inverse.disabled:active,.btn.btn-inverse.disabled:focus,.btn.btn-inverse.disabled:hover,.btn.btn-inverse[disabled],.btn.btn-inverse[disabled].active,.btn.btn-inverse[disabled]:active,.btn.btn-inverse[disabled]:focus,.btn.btn-inverse[disabled]:hover,fieldset[disabled] .btn.btn-inverse,fieldset[disabled] .btn.btn-inverse.active,fieldset[disabled] .btn.btn-inverse:active,fieldset[disabled] .btn.btn-inverse:focus,fieldset[disabled] .btn.btn-inverse:hover{background-color:#545656;border-color:#2e2f2f}.btn-outline{background-color:transparent;background-image:none!important;color:inherit;-webkit-transition:all .5s;transition:all .5s}.btn-default.btn-outline{color:#999}.btn-primary.btn-outline{color:#428bca}.btn-success.btn-outline{color:#5cb85c}.btn-info.btn-outline{color:#5bc0de}.btn-warning.btn-outline{color:#f0ad4e}.btn-danger.btn-outline{color:#d9534f}.btn-danger.btn-outline:hover,.btn-info.btn-outline:hover,.btn-primary.btn-outline:hover,.btn-success.btn-outline:hover,.btn-warning.btn-outline:hover{color:#fff}.pager li>a,.pager li>span{border-radius:3px}body.error-page{background-color:#f3f3f4}body.error-page .middle-box{height:400px;width:400px;position:absolute;top:50%;left:50%;margin-top:-250px;margin-left:-200px;z-index:100}.swal2-modal,.swal2-overlay{position:fixed;display:none}body.error-page .middle-box h1{font-size:9em}.swal2-overlay{background-color:rgba(0,0,0,.4);left:0;right:0;top:0;bottom:0;z-index:1000}.swal2-modal{background-color:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;border-radius:5px;box-sizing:border-box;text-align:center;left:50%;top:50%;margin-top:-200px;max-height:90%;overflow-x:hidden;overflow-y:auto;z-index:2000}.swal2-modal:focus{outline:0}.swal2-modal.loading{overflow-y:hidden}.swal2-modal h2{color:#575757;font-size:30px;text-align:center;text-transform:none;position:relative;margin:0;padding:0;line-height:60px;display:block}.swal2-modal .swal2-spacer{height:10px;color:transparent;border:0}.swal2-modal button.styled{border:0;border-radius:3px;box-shadow:none;color:#fff;cursor:pointer;font-size:17px;font-weight:500;margin:0 5px;padding:10px 32px}.swal2-modal button.styled:not(.loading)[disabled]{opacity:.4;cursor:no-drop}.swal2-modal button.styled.loading{box-sizing:border-box;border:4px solid transparent;width:40px;height:40px;padding:0;margin:-2px 30px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal button:not(.styled).loading:after{display:inline-block;content:"";margin-left:5px;vertical-align:-1px;height:6px;width:6px;border:3px solid #999;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal .swal2-checkbox input,.swal2-modal .swal2-checkbox span,.swal2-modal .swal2-radio input,.swal2-modal .swal2-radio span,body.status-page img.emoji{vertical-align:middle}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{font-size:36px;line-height:36px;font-family:serif;position:absolute;top:5px;right:13px;cursor:pointer;color:#cfcfcf;-webkit-transition:all .1s ease;transition:all .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-modal .swal2-content{font-size:18px;text-align:center;font-weight:300;position:relative;float:none;margin:0;padding:0;line-height:normal;color:#555}.swal2-modal .swal2-checkbox,.swal2-modal .swal2-input,.swal2-modal .swal2-radio,.swal2-modal .swal2-range input,.swal2-modal .swal2-range output,.swal2-modal .swal2-select,.swal2-modal .swal2-textarea{margin:20px auto}.swal2-modal .swal2-input:not([type=file]),.swal2-modal .swal2-textarea{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:all .3s;transition:all .3s}.swal2-modal .swal2-input:not([type=file]).error,.swal2-modal .swal2-textarea.error{border-color:#f06e57!important}.swal2-modal .swal2-input:not([type=file]):focus,.swal2-modal .swal2-textarea:focus{outline:0;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.swal2-modal .swal2-input:not([type=file]):focus::-moz-placeholder,.swal2-modal .swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file]):focus:-ms-input-placeholder,.swal2-modal .swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file]):focus::-webkit-input-placeholder,.swal2-modal .swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file])::-moz-placeholder,.swal2-modal .swal2-textarea::-moz-placeholder{color:#bdbdbd}.swal2-modal .swal2-input:not([type=file]):-ms-input-placeholder,.swal2-modal .swal2-textarea:-ms-input-placeholder{color:#bdbdbd}.swal2-modal .swal2-input:not([type=file])::-webkit-input-placeholder,.swal2-modal .swal2-textarea::-webkit-input-placeholder{color:#bdbdbd}.swal2-modal .swal2-range input{float:left;padding:0!important;width:80%!important}.swal2-modal .swal2-range output{float:right;font-size:20px;font-weight:600}.swal2-modal .swal2-input:not([type=file]),.swal2-modal .swal2-range input,.swal2-modal .swal2-range output{height:43px;line-height:43px;vertical-align:middle;padding:0 12px}.swal2-modal .swal2-input[type=file]{font-size:20px}.swal2-modal .swal2-input[type=number]{max-width:150px}.swal2-modal .swal2-textarea{height:108px;padding:12px}.swal2-modal .swal2-select{color:#555;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-modal .swal2-radio{border:0}.swal2-modal .swal2-radio label:not(:first-child){margin-left:20px}.swal2-modal .swal2-radio input{margin:0 3px 0 0}.swal2-modal .swal2-checkbox{color:#555}.swal2-modal .swal2-validationerror{background-color:#f1f1f1;margin:0 -20px;overflow:hidden;padding:10px;color:#797979;font-size:16px;font-weight:300;display:none}.swal2-modal .swal2-validationerror::before{content:"!";display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}.swal2-icon.swal2-info,.swal2-icon.swal2-question,.swal2-icon.swal2-warning{font-size:60px;line-height:80px;text-align:center}.swal2-icon{width:80px;height:80px;border:4px solid grey;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;cursor:default;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .x-mark{position:relative;display:block}.swal2-icon.swal2-error .line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error .line.left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error .line.right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#f8bb86}.swal2-icon.swal2-info{font-family:"Open Sans",sans-serif;color:#3fc3ee;border-color:#3fc3ee}.swal2-icon.swal2-question{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#c9dae1;border-color:#c9dae1}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success::after,.swal2-icon.swal2-success::before{content:'';position:absolute;width:60px;height:120px;background:#fff}.swal2-icon.swal2-success::before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success::after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .placeholder{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .fix{width:7px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success .line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success .line.tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success .line.long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{font-weight:600;margin:0 0 20px;padding:0}.swal2-progresssteps li{display:inline-block;position:relative}.swal2-progresssteps .swal2-progresscircle{background:#3085d6;border-radius:2em;color:#fff;height:2em;line-height:2em;text-align:center;width:2em;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle,.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{background:#3085d6;height:.4em;margin:0 -1px;z-index:10}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.show-swal2{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.show-swal2.no-animation{-webkit-animation:none;animation:none}.hide-swal2{-webkit-animation:hideSweetAlert .15s forwards;animation:hideSweetAlert .15s forwards}.hide-swal2.no-animation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.animate-success-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.animate-success-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-icon.swal2-success.animate::after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}@keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}.pulse-warning{-webkit-animation:pulse-warning .75s infinite alternate;animation:pulse-warning .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swal2-modal button{margin-right:8px}body.status-page{padding-top:40px;font-family:-apple-system,BlinkMacSystemFont,"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;background-color:#F0F3F4;color:#333;font-size:1.4em;font-weight:400}body.status-page.no-padding{padding-top:0!important}body.status-page hr{margin-top:10px;margin-bottom:10px}body.status-page h1,body.status-page h2,body.status-page h3,body.status-page h4,body.status-page h5{margin-bottom:20px}body.status-page img{box-sizing:border-box}body.status-page img.emoji{height:20px;width:20px;max-width:none}body.status-page p,body.status-page strong{color:#333}body.status-page .tooltip .tooltip-inner{padding:8px 12px;font-size:14px;word-wrap:break-word}body.status-page .help-icon{cursor:help}body.status-page .text-component-1,body.status-page .text-success{color:#7ED321}body.status-page .text-component-2,body.status-page .text-info{color:#3498db}body.status-page .text-alert,body.status-page .text-component-3{color:#F7CA18}body.status-page .text-component-4,body.status-page .text-danger{color:#ff6f6f}body.status-page .container{max-width:960px}body.status-page .page-header{margin-top:10px}body.status-page .app-banner{margin-bottom:30px}body.status-page .about-app{margin-bottom:40px}body.status-page .about-app p{font-size:1.2em}body.status-page .alert{font-size:1.2em;font-weight:600}body.status-page .timeline .content-wrapper{margin-top:40px;margin-bottom:40px}body.status-page .timeline h3{margin-top:30px;margin-bottom:40px;font-size:22px}body.status-page .timeline h3 small{margin-left:15px}body.status-page .timeline .list-group.components .panel-body h1,body.status-page .timeline .panel .panel-body h1{margin-top:0;margin-bottom:4px;font-size:2em}body.status-page .timeline .list-group.components .panel-body h2,body.status-page .timeline .panel .panel-body h2{margin-top:0;margin-bottom:4px;font-size:1.8em}body.status-page .timeline .list-group.components .panel-body h3,body.status-page .timeline .panel .panel-body h3{margin-top:0;margin-bottom:4px;font-size:1.6em}body.status-page .timeline .list-group.components .panel-body h4,body.status-page .timeline .panel .panel-body h4{margin-top:0;margin-bottom:4px;font-size:1.4em}body.status-page .timeline .list-group.components .panel-body h5,body.status-page .timeline .panel .panel-body h5{margin-top:0;margin-bottom:4px;font-size:1.2em}body.status-page .timeline .moment .list-group.components .panel-body p,body.status-page .timeline .moment .list-group.components .panel-heading strong,body.status-page .timeline .moment .panel .panel-body p,body.status-page .timeline .moment .panel .panel-heading strong{font-size:1.1em}body.status-page .timeline .list-group.components .panel-body p,body.status-page .timeline .panel .panel-body p{margin:0}body.status-page .timeline .moment{width:100%;padding-bottom:10px;position:relative}body.status-page .timeline .moment.first:before{top:-5px}body.status-page .timeline .moment:before{content:'';position:absolute;left:26px;top:-5px;width:2px;height:100%;background:#7266BA}body.status-page .timeline .moment .status-icon{background:#fff;width:35px;height:35px;border-radius:50%;border:1px solid #e8e8e8;position:absolute;left:25px;top:14px}body.status-page .timeline .moment .status-icon .icon{position:absolute;top:7px;left:11px}body.status-page .timeline .moment .status-icon .icon.ion-alert{left:15px}body.status-page .timeline .moment .status-icon.status-0{color:#b23f73}body.status-page .timeline .moment .status-icon.status-1{color:#f80}body.status-page .timeline .moment .status-icon.status-2{color:#F7CA18}body.status-page .timeline .moment .status-icon.status-3{color:#3498db}body.status-page .timeline .moment .status-icon.status-4{color:#7ED321}body.status-page .timeline .moment.last:before{background:#fff}body.status-page .timeline .moment .list-group.components,body.status-page .timeline .moment .panel{margin:0;border-radius:2px}body.status-page .timeline .moment .panel-message.list-group.components,body.status-page .timeline .moment .panel.panel-message{border:1px solid #e8e8e8}body.status-page .timeline .moment .panel-message.list-group.components .date,body.status-page .timeline .moment .panel.panel-message .date{color:#949494}body.status-page .timeline .moment .panel-message.list-group.components:before,body.status-page .timeline .moment .panel.panel-message:before{position:absolute;top:16px;left:1px;display:inline-block;border-top:15px solid transparent;border-left:0 solid #e8e8e8;border-right:15px solid #e8e8e8;border-bottom:15px solid transparent;content:" "}body.status-page .timeline .moment .panel-message.list-group.components:after,body.status-page .timeline .moment .panel.panel-message:after{position:absolute;top:17px;left:2px;display:inline-block;border-top:14px solid transparent;border-left:0 solid #fff;border-right:14px solid #fff;border-bottom:14px solid transparent;content:" "}body.status-page .timeline .moment .list-group.components .panel-body,body.status-page .timeline .moment .panel .panel-body{border-top:1px solid #eee}body.status-page .timeline .moment .list-group.components .panel-body p:not(:last-child),body.status-page .timeline .moment .panel .panel-body p:not(:last-child){margin-bottom:10px}@media (max-width:767px){body.status-page .timeline .moment .content{width:100%}}body.status-page .list-group{padding-left:0}body.status-page .list-group .list-group-item{border-radius:0;background-color:#fff;border:1px solid #e8e8e8;font-size:1.1em;padding:15px}body.status-page .list-group .list-group-item a{font-weight:400}body.status-page .list-group .list-group-item h4{margin:0;font-weight:400;max-width:90%}body.status-page .list-group .list-group-item p:not(:last-child),body.status-page .list-group .list-group-item time:not(:last-child){margin-bottom:10px}body.status-page .list-group .list-group-item time{margin-bottom:0}body.status-page .list-group .list-group-item i.icon{font-size:21px;line-height:24px;text-align:center;display:inline-block;min-width:20px}body.status-page .list-group .list-group-item.group-name{background-color:#e8e8e8;padding-top:.6em;padding-bottom:.6em;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.status-page .list-group .list-group-item.break{padding:1px;background-color:#f0f3f4}body.status-page .list-group.components{border-color:#e8e8e8}body.status-page .list-group.components:last-child{margin-bottom:30px}body.status-page .list-group.components+.components{margin-top:5px}body.status-page .list-group.components p{margin-bottom:10px}body.status-page .list-group.components .badge{color:transparent}body.status-page .list-group.components a{color:#333!important}body.status-page footer{position:absolute;width:100%;bottom:0;height:60px;padding:30px 0 60px;border-top:1px solid #e8e8e8;color:#666;font-size:13px;line-height:30px;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,.5)}body.status-page footer .btn{text-shadow:none}body.status-page footer .icons a.icon-link{display:inline-block;min-width:30px;height:30px;border-radius:3px;background-color:#666;text-align:center;color:#e8e8e8;-webkit-transition:all .15s;transition:all .15s;padding:0 10px}body.status-page footer .icons a.icon-link.rss{background-color:#f80}body.status-page footer .icons a.icon-link:hover{text-decoration:none;background-color:#4d4d4d}body.status-page footer .list-inline>li{padding-right:0}@media (min-width:768px){body.status-page footer{text-align:left}body.status-page footer .list-inline{text-align:right}body.status-page footer .list-inline>li{padding-right:0}body.status-page footer .icons{margin-top:0;text-align:right}}body.status-page .section-components,body.status-page .section-metrics,body.status-page .section-scheduled,body.status-page .section-timeline{margin-top:40px}body.status-page .navbar-custom{padding-top:10px;padding-bottom:10px;width:100%;border-radius:0;margin-bottom:10px}body.status-page .navbar-custom a.navbar-brand{font-size:30px;font-weight:600}body.status-page .navbar-custom .navbar-nav li a{color:#333;font-size:1.7rem}body.status-page .navbar-custom .navbar-nav li a:hover{background-color:transparent} \ No newline at end of file diff --git a/public/build/dist/css/app.css.map b/public/build/dist/css/app.css.map deleted file mode 100644 index ab7e6414a27d..000000000000 --- a/public/build/dist/css/app.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["app.css","../../../node_modules/ionicons/scss/ionicons.scss","../../../node_modules/ionicons/scss/_ionicons-font.scss","../../../node_modules/ionicons/scss/_ionicons-variables.scss","../../../node_modules/ionicons/scss/_ionicons-icons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss","modules/_variables.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss","_palette.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-text.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss","_vendors.scss","_helpers.scss","modules/_tabs.scss","modules/_forms.scss","modules/_well.scss","modules/_alerts.scss","modules/_panels.scss","modules/_btns.scss","modules/_pager.scss","_errors.scss","../../../node_modules/sweetalert2/src/sweetalert2.scss","plugins/_sweetalert.scss","status-page/_status-page.scss"],"names":[],"mappings":"AAAA,iBAAiB;ACCjB;;;;;;;;;;EAUE;ACRF;EACC,wBCAgC;EDChC,gDAAO;EACP,gRAGkF;EAClF,oBAAoB;EACpB,mBAAmB,EAAA;;AAGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EACE,sBAAsB;EACtB,wBCZ+B;EDa/B,YAAY;EACZ,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,eAAe;EACf,oCAAoC;EACpC,mCAAmC,EACpC;;AEpBD;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2C,EAAO;;ACDpD;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEwC,EAAO;;ACDjD;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE2C,EAAO;;ACDpD;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEe,EAAO;;ACDxB;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEyC,EAAO;;ACDlD;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwC,EAAO;;ACDjD;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aD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B+HiC;IkB9HjC,0BAAwB;IACpB,sBAAoB,EASzB;IDgCH;;;;MCpCM,YlBwH+B;MkBvH/B,0BAAwB;MACpB,sBAAoB,EACzB;EDiCL;;IC5BI,uBAAuB,EACxB;ED2BH;;;;ICpBM,uBlByG+B;IkBxG3B,mBlByG2B,EkBxGhC;EAGH;IACE,YlBmGiC;IkBlGjC,uBlBiGiC,EkBhGlC;;ADeH;EChEE,YlBqJmC;EkBpJnC,0BjBNgC;EiBOhC,sBlBqJqC,EiBrFtC;EAFD;IC1DI,YlB+IiC;IkB9IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuDH;ICrDI,YlB0IiC;IkBzIjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkDH;;IC9CI,YlBmIiC;IkBlIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmCH;;;;MCvCM,YlB4H+B;MkB3H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoCL;;IC/BI,uBAAuB,EACxB;ED8BH;;;;ICvBM,0BjB9C4B;IiB+CxB,sBlB6G6B,EkB5GlC;EAGH;IACE,ejBpD8B;IiBqD9B,uBlBqGiC,EkBpGlC;;ADmBH;ECpEE,YlByJmC;EkBxJnC,0BEFsB;EFGtB,sBlByJqC,EiBrFtC;EAFD;IC9DI,YlBmJiC;IkBlJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED2DH;ICzDI,YlB8IiC;IkB7IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDsDH;;IClDI,YlBuIiC;IkBtIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDuCH;;;;MC3CM,YlBgI+B;MkB/H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDwCL;;ICnCI,uBAAuB,EACxB;EDkCH;;;;IC3BM,0BE1CkB;IF2Cd,sBlBiH6B,EkBhHlC;EAGH;IACE,eEhDoB;IFiDpB,uBlByGiC,EkBxGlC;;ADuBH;ECxEE,YlB6JmC;EkB5JnC,0BEcmB;EFbnB,sBlB6JqC,EiBrFtC;EAFD;IClEI,YlBuJiC;IkBtJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED+DH;IC7DI,YlBkJiC;IkBjJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED0DH;;ICtDI,YlB2IiC;IkB1IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID2CH;;;;MC/CM,YlBoI+B;MkBnI/B,0BAAwB;MACpB,sBAAoB,EACzB;ED4CL;;ICvCI,uBAAuB,EACxB;EDsCH;;;;IC/BM,0BE1Be;IF2BX,sBlBqH6B,EkBpHlC;EAGH;IACE,eEhCiB;IFiCjB,uBlB6GiC,EkB5GlC;;AD2BH;EC5EE,YlBiKmC;EkBhKnC,0BEgCqB;EF/BrB,sBlBiKqC,EiBrFtC;EAFD;ICtEI,YlB2JiC;IkB1JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDmEH;ICjEI,YlBsJiC;IkBrJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED8DH;;IC1DI,YlB+IiC;IkB9IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID+CH;;;;MCnDM,YlBwI+B;MkBvI/B,0BAAwB;MACpB,sBAAoB,EACzB;EDgDL;;IC3CI,uBAAuB,EACxB;ED0CH;;;;ICnCM,0BERiB;IFSb,sBlByH6B,EkBxHlC;EAGH;IACE,eEdmB;IFenB,uBlBiHiC,EkBhHlC;;AD+BH;EChFE,YlBqKmC;EkBpKnC,0BEiBkB;EFhBlB,sBlBqKqC,EiBrFtC;EAFD;IC1EI,YlB+JiC;IkB9JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuEH;ICrEI,YlB0JiC;IkBzJjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkEH;;IC9DI,YlBmJiC;IkBlJjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmDH;;;;MCvDM,YlB4I+B;MkB3I/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoDL;;IC/CI,uBAAuB,EACxB;ED8CH;;;;ICvCM,0BEvBc;IFwBV,sBlB6H6B,EkB5HlC;EAGH;IACE,eE7BgB;IF8BhB,uBlBqHiC,EkBpHlC;;ADwCH;EACE,ehB/FgC;EgBgGhC,oBAAoB;EACpB,iBAAiB,EA8BlB;EAjCD;;IAUI,8BAA8B;IlBpCxB,iBkBqCkB,EACzB;EAZH;IAiBI,0BAA0B,EAC3B;EAlBH;IAqBI,ejBhF0B;IiBiF1B,2BjB/E6B;IiBgF7B,8BAA8B,EAC/B;EAxBH;;;IA6BM,ejB9G0B;IiB+G1B,sBAAsB,EACvB;;AAQ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A4B;EAC5B,oBAA+B,EDuWhC;EALC;IAHF;MAII,YAAY;MACZ,kB7BIoC;M6BHpC,mB7BGoC,E6BDvC,EAAA;;AAWD;EACE;IACE,uBAAuB,EACxB;EACD;IACE,wBAAwB;IAC1B,oB7BhBsC,E6BqBrC;IAPD;MAKI,gBAAgB,EACjB,EAAA;;AASL;EACE,0B7BzBwC;E6B0BxC,sB7BzBuC,E6ByJxC;EAlID;IAKI,Y7BzB2C,E6B+B5C;IAXH;MAQM,e7BlB2C;M6BmB3C,8B7BlBgD,E6BmBjD;EAVL;IAcI,Y7BvCmC,E6BwCpC;EAfH;IAmBM,Y7BvCyC,E6B8C1C;IA1BL;MAuBQ,Y7B1CuC;M6B2CvC,8B7B1C8C,E6B2C/C;EAzBP;IA+BQ,Y7BhDuC;I6BiDvC,0B7BhDyC,E6BiD1C;EAjCP;IAuCQ,Y7BtDuC;I6BuDvC,8B7BtD8C,E6BuD/C;EAzCP;IA8CI,mB7BlD2C,E6B0D5C;IAtDH;MAiDM,uB7BvDyC,E6BwD1C;IAlDL;MAoDM,uB7BzDyC,E6B0D1C;EArDL;;IA0DI,sB7BjFqC,E6BkFtC;EA3DH;IAoEQ,0B7BpFyC;I6BqFzC,Y7BtFuC,E6BuFxC;EAGH;IAzEJ;MA6EU,Y7BjGqC,E6BuGtC;MAnFT;QAgFY,Y7BnGmC;Q6BoGnC,8B7BnG0C,E6BoG3C;IAlFX;MAwFY,Y7BzGmC;M6B0GnC,0B7BzGqC,E6B0GtC;IA1FX;MAgGY,Y7B/GmC;M6BgHnC,8B7B/G0C,E6BgH3C,EAAA;EAlGX;IA8GI,Y7BlI2C,E6BsI5C;IAlHH;MAgHM,Y7BnIyC,E6BoI1C;EAjHL;IAqHI,Y7BzI2C,E6BqJ5C;IAjIH;MAwHM,Y7B3IyC,E6B4I1C;IAzHL;;;MA8HQ,Y7B7IuC,E6B8IxC;;AAOP;EACE,uB7BrI8C;E6BsI9C,sB7BrIgD,E6BsQjD;EAnID;IAKI,e7BrI+C,E6B2IhD;IAXH;MAQM,Y7B9H0C;M6B+H1C,8B7B9HiD,E6B+HlD;EAVL;IAcI,e7BnJ+C,E6BoJhD;EAfH;IAmBM,e7BnJ6C,E6B0J9C;IA1BL;MAuBQ,Y7BtJwC;M6BuJxC,8B7BtJ+C,E6BuJhD;EAzBP;IA+BQ,Y7B9JwC;I6B+JxC,0B7B5J0C,E6B6J3C;EAjCP;IAuCQ,Y7BlKwC;I6BmKxC,8B7BlK+C,E6BmKhD;EAzCP;IA+CI,mB7B/J4C,E6BuK7C;IAvDH;MAkDM,uB7BpK0C,E6BqK3C;IAnDL;MAqDM,uB7BtK0C,E6BuK3C;EAtDL;;IA2DI,sBAAoB,EACrB;EA5DH;IAoEQ,0B7BhM0C;I6BiM1C,Y7BpMwC,E6BqMzC;EAGH;IAzEJ;MA6EU,sB7BhNwC,E6BiNzC;IA9ET;MAgFU,0B7BnNwC,E6BoNzC;IAjFT;MAmFU,e7BnNyC,E6ByN1C;MAzFT;QAsFY,Y7BrNoC;Q6BsNpC,8B7BrN2C,E6BsN5C;IAxFX;MA8FY,Y7B7NoC;M6B8NpC,0B7B3NsC,E6B4NvC;IAhGX;MAsGY,Y7BjOoC;M6BkOpC,8B7BjO2C,E6BkO5C,EAAA;EAxGX;IA+GI,e7B/O+C,E6BmPhD;IAnHH;MAiHM,Y7BhP0C,E6BiP3C;EAlHL;IAsHI,e7BtP+C,E6BkQhD;IAlIH;MAyHM,Y7BxP0C,E6ByP3C;IA1HL;;;MA+HQ,Y7B1PwC,E6B2PzC;;AE7oBP;EACE,kB/BqxBkC;E+BpxBlC,oB/B0D6B;E+BzD7B,iBAAiB;EACjB,0B/BoxBqC;E+BnxBrC,mB9BF6B,E8BmB9B;EAtBD;IAQI,sBAAsB,EASvB;IAjBH;MAaM,cAA2C;MAC3C,eAAe;MACf,Y/B2wB8B,E+B1wB/B;EAhBL;IAoBI,e/BX4B,E+BY7B;;ACvBH;EACE,sBAAsB;EACtB,gBAAgB;EAChB,eAA+B;EAC/B,mB/BC6B,E+BmE9B;EAxED;IAOI,gBAAgB,EA0BjB;IAjCH;;MAUM,mBAAmB;MACnB,YAAY;MACZ,kBhCgF0B;MgC/E1B,yBhC+C+B;MgC9C/B,sBAAsB;MACtB,e/BjB4B;M+BkB5B,uBhCobqC;MgCnbrC,uBhCobqC;MgCnbrC,kBAAkB,EACnB;IAnBL;;MAuBQ,eAAe;MNXrB,+BzBP6B;MyBQ1B,4BzBR0B,E+BoBxB;IAzBP;;MNIE,gCzBC6B;MyBA1B,6BzBA0B,E+B0BxB;EA/BP;;;IAuCM,WAAW;IACX,ehCPwB;IgCQxB,0BhC7B0B;IgC8B1B,mBhC+ZqC,EgC9ZtC;E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AClB;;AAjGT;EAsGI,UAAU;EACV,iBAAiB,EAClB;;AASH;EACE,oBhD7J6B,EgDwL9B;EA5BD;IAKI,iBAAiB;IACjB,mB/C3N2B,E+CgO5B;IAXH;MASM,gBAAgB,EACjB;EAVL;IAcI,iBAAiB,EAMlB;IApBH;;MAkBM,2BhD6d4B,EgD5d7B;EAnBL;IAuBI,cAAc,EAIf;IA3BH;MAyBM,8BhDsd4B,EgDrd7B;;AAML;EC1PE,mBjD6sBgC,EgDjdjC;EC1PK;IACF,ejDM4B;IiDL5B,0BjD0sBiC;IiDzsBjC,mBjDwsB8B,EiD/rB/B;IAPqB;MAClB,uBjDqsB4B,EiDpsB7B;IACD;MACE,ejDmsB+B;MiDlsB/B,0BjDH0B,EiDI3B;EAGmB;IAClB,0BjD4rB4B,EiD3rB7B;;AD2OL;EC7PE,sBhDFgC,E+CiQjC;EC7PK;IACF,YjD6sB8B;IiD5sB9B,0BhDN8B;IgDO9B,sBhDP8B,EgDgB/B;IAPqB;MAClB,0BhDV4B,EgDW7B;IACD;MACE,ehDb4B;MgDc5B,uBjDosB4B,EiDnsB7B;EAGmB;IAClB,6BhDnB4B,EgDoB7B;;AD8OL;EChQE,sBjDsfqC,EgDpPtC;EChQK;IACF,ejDifoC;IiDhfpC,0BjDifoC;IiDhfpC,sBjDifmC,EiDxepC;IAPqB;MAClB,0BjD8eiC,EiD7elC;IACD;MACE,ejD0ekC;MiDzelC,0BjDwekC,EiDvenC;EAGmB;IAClB,6BjDqeiC,EiDpelC;;ADiPL;ECnQE,sBjD0fqC,EgDrPtC;ECnQK;IACF,ejDqfoC;IiDpfpC,0BjDqfoC;IiDpfpC,sBjDqfmC,EiD5epC;IAPqB;MAClB,0BjDkfiC,EiDjflC;IACD;MACE,ejD8ekC;MiD7elC,0BjD4ekC,EiD3enC;EAGmB;IAClB,6BjDyeiC,EiDxelC;;ADoPL;ECtQE,sBjD8fqC,EgDtPtC;ECtQK;IACF,ejDyfoC;IiDxfpC,0BjDyfoC;IiDxfpC,sBjDyfmC,EiDhfpC;IAPqB;MAClB,0BjDsfiC,EiDrflC;IACD;MACE,ejDkfkC;MiDjflC,0BjDgfkC,EiD/enC;EAGmB;IAClB,6BjD6eiC,EiD5elC;;ADuPL;ECzQE,sBjDkgBqC,EgDvPtC;ECzQK;IACF,ejD6foC;IiD5fpC,0BjD6foC;IiD5fpC,sBjD6fmC,EiDpfpC;IAPqB;MAClB,0BjD0fiC,EiDzflC;IACD;MACE,ejDsfkC;MiDrflC,0BjDofkC,EiDnfnC;EAGmB;IAClB,6BjDifiC,EiDhflC;;ACjBL;EACE,mBAAmB;EACnB,eAAe;EACf,UAAU;EACV,WAAW;EACX,iBAAiB,EAelB;EApBD;;;;;IAYI,mBAAmB;IACnB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,aAAa;IACb,YAAY;IACZ,UAAU,EACX;;AAIH;EACE,uBAAuB,EACxB;;AAGD;EACE,oBAAoB,EACrB;;AC5BD;EACE,iBAAiB;EACjB,cAAc;EACd,oBAAoB;EACpB,0BnDqvBmC;EmDpvBnC,0BnDqvBkC;EmDpvBlC,mBlDJ6B;EF6DrB,gDoDxDgC,EAKzC;EAZD;IASI,mBAAmB;IACnB,kCAAkB,EACnB;;AAIH;EACE,cAAc;EACd,mBlDd6B,EkDe9B;;AACD;EACE,aAAa;EACb,mBlDjB6B,EkDkB9B;;ACvBD;EACE,aAAa;EACb,gBAA2B;EAC3B,kBpDmzBgC;EoDlzBhC,eAAe;EACf,YpDkzBgC;EoDjzBhC,0BpDkzBwC;EmB1zBxC,aiCSmB;EjCNnB,0BAAa,EiCiBd;EAlBD;IAWI,YpD4yB8B;IoD3yB9B,sBAAsB;IACtB,gBAAgB;IjCflB,aiCgBqB;IjCbrB,0BAAa,EiCcZ;;AASH;EACE,WAAW;EACX,gBAAgB;EAChB,wBAAwB;EACxB,UAAU;EACV,yBAAyB,EAC1B;;ACzBD;EACE,iBAAiB,EAClB;;AAGD;EACE,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,OAAO;EACP,SAAS;EACT,UAAU;EACV,QAAQ;EACR,crDmQ6B;EqDlQ7B,kCAAkC;EAIlC,WAAW,EAQZ;EArBD;ItD0HE,sCAA4B;IAGpB,8BAAoB;IAkE5B,oDsD7K6C;ItDgLrC,4CsDhLqC;ItDgLrC,oCsDhLqC;ItDgLrC,qEsDhLqC,EAC5C;EAnBH;ItD0HE,mCAA4B;IAGpB,2BAAoB,EsDzGoB;;AAElD;EACE,mBAAmB;EACnB,iBAAiB,EAClB;;AAGD;EACE,mBAAmB;EACnB,YAAY;EACZ,aAAa,EACd;;AAGD;EACE,mBAAmB;EACnB,uBrDuiBiD;EqDtiBjD,uBrD0iBiD;EqDziBjD,qCrDuiBiD;EqDtiBjD,mBpD9C6B;EF4DrB,yCsDb0B;EAClC,6BAA6B;EAE7B,WAAW,EACZ;;AAGD;EACE,gBAAgB;EAChB,OAAO;EACP,SAAS;EACT,UAAU;EACV,QAAQ;EACR,crDoN6B;EqDnN7B,uBrD4hBgC,EqDxhBjC;EAXD;IlC5DE,WkCqE2B;IlClE3B,yBAAa,EkCkEmB;EATlC;IlC5DE,anBimB8B;ImB9lB9B,0BAAa,EkCmEuC;;AAKtD;EACE,crDugBgC;EqDtgBhC,iCrDshBmC,EqDphBpC;EAJD;I9C/DI,aAAa;IACb,eAAe,EAChB;E8C6DH;I9C3DI,YAAY,EACb;;A8CgEH;EACE,iBAAiB,EAClB;;AAGD;EACE,UAAU;EACV,yBrD5BmC,EqD6BpC;;AAID;EACE,mBAAmB;EACnB,crDifgC,EqDhfjC;;AAGD;EACE,crD4egC;EqD3ehC,kBAAkB;EAClB,8BrD6fmC,EqD7epC;EAnBD;I9CvFI,aAAa;IACb,eAAe,EAChB;E8CqFH;I9CnFI,YAAY,EACb;E8CkFH;IAQI,iBAAiB;IACjB,iBAAiB,EAClB;EAVH;IAaI,kBAAkB,EACnB;EAdH;IAiBI,eAAe,EAChB;;AAIH;EACE,mBAAmB;EACnB,aAAa;EACb,YAAY;EACZ,aAAa;EACb,iBAAiB,EAClB;;AAGD;EAEE;IACE,arDme+B;IqDle/B,kBAAkB,EACnB;EACD;ItDtEQ,0CsDuE6B,EACpC;EAGD;IAAY,arD4dqB,EqD5dD,EAAA;;AAGlC;EACE;IAAY,arDsdqB,EqDtdD,EAAA;;AC9IlC;EACE,mBAAmB;EACnB,ctD+Q6B;EsD9Q7B,eAAe;ECRf,4DvD4CsE;EuD1CtE,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,iBAAiB;EACjB,yBvDwDmC;EuDvDnC,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,kBAAkB;EAClB,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,qBAAqB;EACrB,kBAAkB;EDHlB,gBtDwC4B;EmBlD5B,WmCYkB;EnCTlB,yBAAa,EmCgBd;EAhBD;InCHE,alBW4B;IkBR5B,0BAAa,EmCWoC;EAXnD;IAYa,iBAAkB;IAAE,eAA+B,EAAI;EAZpE;IAaa,iBAAkB;IAAE,etDkgBA,EsDlgBmC;EAbpE;IAca,gBAAkB;IAAE,eAA+B,EAAI;EAdpE;IAea,kBAAkB;IAAE,etDggBA,EsDhgBmC;;AAIpE;EACE,iBtDmfiC;EsDlfjC,iBAAiB;EACjB,YtDmfgC;EsDlfhC,mBAAmB;EACnB,uBrDjB8B;EqDkB9B,mBrDvB6B,EqDwB9B;;AAGD;EACE,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,0BAA0B;EAC1B,oBAAoB,EACrB;;AAED;EAEI,UAAU;EACV,UAAU;EACV,kBtDse6B;EsDre7B,wBAAyD;EACzD,uBrDpC4B,EqDqC7B;;AAPH;EASI,UAAU;EACV,WtDge6B;EsD/d7B,oBtD+d6B;EsD9d7B,wBAAyD;EACzD,uBrD3C4B,EqD4C7B;;AAdH;EAgBI,UAAU;EACV,UtDyd6B;EsDxd7B,oBtDwd6B;EsDvd7B,wBAAyD;EACzD,uBrDlD4B,EqDmD7B;;AArBH;EAuBI,SAAS;EACT,QAAQ;EACR,iBtDid6B;EsDhd7B,4BAA8E;EAC9E,yBrDzD4B,EqD0D7B;;AA5BH;EA8BI,SAAS;EACT,SAAS;EACT,iBtD0c6B;EsDzc7B,4BtDyc6B;EsDxc7B,wBrDhE4B,EqDiE7B;;AAnCH;EAqCI,OAAO;EACP,UAAU;EACV,kBtDmc6B;EsDlc7B,wBtDkc6B;EsDjc7B,0BrDvE4B,EqDwE7B;;AA1CH;EA4CI,OAAO;EACP,WtD6b6B;EsD5b7B,iBtD4b6B;EsD3b7B,wBtD2b6B;EsD1b7B,0BrD9E4B,EqD+E7B;;AAjDH;EAmDI,OAAO;EACP,UtDsb6B;EsDrb7B,iBtDqb6B;EsDpb7B,wBtDob6B;EsDnb7B,0BrDrF4B,EqDsF7B;;AE9FH;EACE,mBAAmB;EACnB,OAAO;EACP,QAAQ;EACR,cxD6Q6B;EwD5Q7B,cAAc;EACd,iBxDshByC;EwDrhBzC,aAAa;EDXb,4DvD4CsE;EuD1CtE,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,iBAAiB;EACjB,yBvDwDmC;EuDvDnC,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,kBAAkB;EAClB,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,qBAAqB;EACrB,kBAAkB;ECAlB,gBxDmC4B;EwDjC5B,uBxD6gBwC;EwD5gBxC,6BAA6B;EAC7B,uBxDihBwC;EwDhhBxC,qCxD8gBwC;EwD7gBxC,mBvDb6B;EF4DrB,0CyD9C2B,EAOpC;EAzBD;IAqBc,kBxDihB4B,EwDjhBS;EArBnD;IAsBc,kBxDghB4B,EwDhhBS;EAtBnD;IAuBc,iBxD+gB4B,EwD/gBQ;EAvBlD;IAwBc,mBxD8gB4B,EwD9gBU;;AAGpD;EACE,UAAU;EACV,kBAAkB;EAClB,gBxDgB4B;EwDf5B,0BxDogB0C;EwDngB1C,iCAA+B;EAC/B,2BAAwE,EACzE;;AAED;EACE,kBAAkB,EACnB;;AAMD;EAGI,mBAAmB;EACnB,eAAe;EACf,SAAS;EACT,UAAU;EACV,0BAA0B;EAC1B,oBAAoB,EACrB;;AAEH;EACE,mBxDmfyD,EwDlf1D;;AACD;EACE,mBxD2ewC;EwD1exC,YAAY,EACb;;AAED;EAEI,UAAU;EACV,mBxDyeuD;EwDxevD,uBAAuB;EACvB,0BxD2ewC;EwD1exC,sCxDweyC;EwDvezC,cxDqeuD,EwD7dxD;EAfH;IASM,aAAa;IACb,YAAY;IACZ,mBxD4doC;IwD3dpC,uBAAuB;IACvB,uBxD8coC,EwD7crC;;AAdL;EAiBI,SAAS;EACT,YxD0duD;EwDzdvD,kBxDyduD;EwDxdvD,qBAAqB;EACrB,4BxD2dwC;EwD1dxC,wCxDwdyC,EwDhd1C;EA9BH;IAwBM,aAAa;IACb,UAAU;IACV,cxD6coC;IwD5cpC,qBAAqB;IACrB,yBxD+boC,EwD9brC;;AA7BL;EAgCI,UAAU;EACV,mBxD2cuD;EwD1cvD,oBAAoB;EACpB,6BxD6cwC;EwD5cxC,yCxD0cyC;EwDzczC,WxDucuD,EwD/bxD;EA7CH;IAuCM,aAAa;IACb,SAAS;IACT,mBxD8boC;IwD7bpC,oBAAoB;IACpB,0BxDgboC,EwD/arC;;AA5CL;EAgDI,SAAS;EACT,axD2buD;EwD1bvD,kBxD0buD;EwDzbvD,sBAAsB;EACtB,2BxD4bwC;EwD3bxC,uCxDybyC,EwDjb1C;EA7DH;IAuDM,aAAa;IACb,WAAW;IACX,sBAAsB;IACtB,wBxDiaoC;IwDhapC,cxD4aoC,EwD3arC;;AC1HL;EACE,mBAAmB,EACpB;;AAED;EACE,mBAAmB;EACnB,iBAAiB;EACjB,YAAY,EA0Eb;EA7ED;IAMI,cAAc;IACd,mBAAmB;I1DwKrB,0C0DvK0C;I1DyKlC,kC0DzKkC,EAgCzC;IAxCH;;MtDDE,eADmC;MAEnC,gBAAgB;MAChB,aAAa;MsDaT,eAAe,EAChB;IAGD;MAlBJ;Q1DoME,uD0DjLkD;Q1DoL1C,+C0DpL0C;Q1DoL1C,uC0DpL0C;Q1DoL1C,2E0DpL0C;Q1D4BlD,oC0D3BuC;Q1D6B/B,4B0D7B+B;Q1DuIvC,4B0DtI+B;Q1DwIvB,oB0DxIuB,EAmB9B;QAxCH;U1DqIE,2CAA8B;UACtB,mCAAsB;U0D5GxB,QAAQ,EACT;QA3BP;U1DqIE,4CAA8B;UACtB,oCAAsB;U0DvGxB,QAAQ,EACT;QAhCP;U1DqIE,wCAA8B;UACtB,gCAAsB;U0DjGxB,QAAQ,EACT,EAAA;EAtCP;;;IA6CI,eAAe,EAChB;EA9CH;IAiDI,QAAQ,EACT;EAlDH;;IAsDI,mBAAmB;IACnB,OAAO;IACP,YAAY,EACb;EAzDH;IA4DI,WAAW,EACZ;EA7DH;IA+DI,YAAY,EACb;EAhEH;;IAmEI,QAAQ,EACT;EApEH;IAuEI,YAAY,EACb;EAxEH;IA0EI,WAAW,EACZ;;AAOH;EACE,mBAAmB;EACnB,OAAO;EACP,QAAQ;EACR,UAAU;EACV,WzD4sB+C;EmB1yB/C,anB2yB8C;EmBxyB9C,0BAAa;EsC6Fb,gBzD4sBgD;EyD3sBhD,YzDwsBgD;EyDvsBhD,mBAAmB;EACnB,0CzDosB0D;EyDnsB1D,8BAAsB,EA+DvB;EA1ED;IdnFE,mGAAyC;IAEzC,+FAAiC;IACjC,4BAA4B;IAC5B,uHAAwJ,EciGvJ;EAlBH;IAoBI,WAAW;IACX,SAAS;IdxGX,mGAAyC;IAEzC,+FAAiC;IACjC,4BAA4B;IAC5B,uHAAwJ,EcsGvJ;EAvBH;IA4BI,WAAW;IACX,YzDmrB8C;IyDlrB9C,sBAAsB;ItCvHxB,asCwHqB;ItCrHrB,0BAAa,EsCsHZ;EAhCH;;;;IAuCI,mBAAmB;IACnB,SAAS;IACT,kBAAkB;IAClB,WAAW;IACX,sBAAsB,EACvB;EA5CH;;IA+CI,UAAU;IACV,mBAAmB,EACpB;EAjDH;;IAoDI,WAAW;IACX,oBAAoB,EACrB;EAtDH;;IAyDI,YAAa;IACb,aAAa;IACb,eAAe;IACf,mBAAmB,EACpB;EA7DH;IAkEM,iBAAiB,EAClB;EAnEL;IAuEM,iBAAiB,EAClB;;AASL;EACE,mBAAmB;EACnB,aAAa;EACb,UAAU;EACV,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,mBAAmB,EA8BpB;EAvCD;IAYI,sBAAsB;IACtB,YAAa;IACb,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,uBzDonB8C;IyDnnB9C,oBAAoB;IACpB,gBAAgB;IAWhB,0BAA0B;IAC1B,8BAAsB,EACvB;EAhCH;IAkCI,UAAU;IACV,YAAa;IACb,aAAa;IACb,uBzD+lB8C,EyD9lB/C;;AAMH;EACE,mBAAmB;EACnB,UAAU;EACV,WAAW;EACX,aAAa;EACb,YAAY;EACZ,kBAAkB;EAClB,qBAAqB;EACrB,YzDmlBgD;EyDllBhD,mBAAmB;EACnB,0CzDukB0D,EyDnkB3D;EAdD;IAYI,kBAAkB,EACnB;;AAKH;EAGE;;;;IAKI,YAAmC;IACnC,aAAoC;IACpC,kBAAwC;IACxC,gBAAuC,EACxC;EATH;;IAYI,mBAAyC,EAC1C;EAbH;;IAgBI,oBAA0C,EAC3C;EAIH;IACE,UAAU;IACV,WAAW;IACX,qBAAqB,EACtB;EAGD;IACE,aAAa,EACd,EAAA;;ACpQH;EnDOI,aAAa;EACb,eAAe,EAChB;;AmDTH;EnDWI,YAAY,EACb;;AmDTH;ECRE,eAAe;EACf,kBAAkB;EAClB,mBAAmB,EDQpB;;AACD;EACE,wBAAwB,EACzB;;AACD;EACE,uBAAuB,EACxB;;AAOD;EACE,yBAAyB,EAC1B;;AACD;EACE,0BAA0B,EAC3B;;AACD;EACE,mBAAmB,EACpB;;AACD;EEzBE,YAAY;EACZ,mBAAmB;EACnB,kBAAkB;EAClB,8BAA8B;EAC9B,UAAU,EFuBX;;AAOD;EACE,yBAAyB,EAC1B;;AAMD;EACE,gBAAgB,EACjB;;AGjCC;EACE,oBAAoB,EAAA;;ACNtB;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;ADiBH;;;;;;;;;;;;EAYE,yBAAyB,EAC1B;;AAED;EC5CE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD2CrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EC/DE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD8DrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EClFE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;ADiFrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;ECrGE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;ADoGrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EC9GE;IACE,yBAAyB,EAC1B,EAAA;;ADgHH;EClHE;IACE,yBAAyB,EAC1B,EAAA;;ADoHH;ECtHE;IACE,yBAAyB,EAC1B,EAAA;;ADwHH;EC1HE;IACE,yBAAyB,EAC1B,EAAA;;AAFD;EACE,yBAAyB,EAC1B;;ADqIH;ECjJE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD+IvC;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,0BAA0B,EAE7B,EAAA;;AACD;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,2BAA2B,EAE9B,EAAA;;AACD;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,iCAAiC,EAEpC,EAAA;;AAED;EChKE;IACE,yBAAyB,EAC1B,EAAA;;ACXH;EACI,mBAAmB;EACnB,iBAAiB;EACjB,oCAAoC;EAGpC,mBAAmB,EACtB;;AAED;EACI,oBAAoB;EACpB,qBAAqB,EACxB;;ACnBD;EACI,0BAA0B,EAC7B;;AAED;EACI,iBAAiB,EACpB;;AAED;EACI,oBAAoB,EACvB;;AAED;EACI,4BAA4B;EAC5B,0BAA0B;EAE1B,uBAAuB;EACvB,sBAAsB;EACtB,kBAAkB,EACrB;;ACnBD;EAEQ,iCAAiC,EAWpC;EAbL;IAKgB,iBAAiB;IACjB,sBAAsB;IACtB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,uBAAuB,EAC1B;;AAXb;EAgBQ,+BAC4B;EAD5B,iCAE8B;EAF9B,gCAG6B;EAE7B,wBAAwB,EAI3B;EAzBL;IAuBY,cAAc,EACjB;;ACxBT;EACI,gBAAgB,EACnB;;AAED;EACI,aAAa;EACb,eAAe,EAClB;;AAED;EACI,mBAAmB,EAatB;EAdD;IAIQ,mBAAkB;IAClB,eAAc;IACd,UAAS;IACT,WAAU;IACV,YAAW;IACX,aAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,iBAAiB,EACpB;;AAGL;EACI,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,gBAAgB;EAChB,wBAAwB;EACxB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EnEkCjB,4BmEjC6B;EnEqJrC,iFmEpJgF;EnEsJxE,yEmEtJwE,EAKjF;EAjBD;IAeQ,sBAAsB,EACzB;;AAID;EADJ;IAGY,iBAAiB,EAKpB;IART;MAKgB,eAAe;MACf,YAAY,EACf,EAAA;;AAKb;EACI,SAAS;EACT,UAAU,EACb;;AC3DD;EACI,iBAAiB,EACpB;;ACFD;EACI,mBAAmB;EACnB,oBhD4BmB;EgD3BnB,0BhD4BuB,EgDM1B;EArCD;IAMQ,0BhDDgB;IgDEhB,0BhDYkB;IgDXlB,aAAa,EAMhB;IAdL;MAWY,aAAa;MACb,kBAAkB,EACrB;EAbT;IAiBQ,oBhDIa;IgDHb,0BhDIiB;IgDHjB,aAAa,EAMhB;IAzBL;MAsBY,aAAa;MACb,kBAAkB,EACrB;EAxBT;IA4BQ,oBhDJY;IgDKZ,0BhDJgB;IgDKhB,aAAa,EAMhB;IApCL;MAiCY,aAAa;MACb,kBAAkB,EACrB;;ACnCT;EpBGE,sB7BsBsB,EiDvBvB;EpBGK;IACF,aoBL4C;IpBM5C,0B7BiBgB;I6BhBhB,sB7BiBoB,E6BRrB;IAPqB;MAClB,0B7BckB,E6BbnB;IACD;MACE,e7BUc;M6BTd,wBoBd0C,EpBe3C;EAGmB;IAClB,6B7BKkB,E6BJnB;;AoBjBL;EpBDE,sB7BgBwB,EiDbzB;EpBDK;IACF,aoBD8C;IpBE9C,0B7BFoB;I6BGpB,sB7BWsB,E6BFvB;IAPqB;MAClB,0B7BQoB,E6BPrB;IACD;MACE,e7BTkB;M6BUlB,wBoBV4C,EpBW7C;EAGmB;IAClB,6B7BDoB,E6BErB;;AoBbL;EpBLE,sB7BmBuB,EiDZxB;EpBLK;IACF,aoBG6C;IpBF7C,0B7BciB;I6BbjB,sB7BcqB,E6BLtB;IAPqB;MAClB,0B7BWmB,E6BVpB;IACD;MACE,e7BOe;M6BNf,wBoBN2C,EpBO5C;EAGmB;IAClB,6B7BEmB,E6BDpB;;AoBTL;EpBTE,sB7B4ByB,EiDjB1B;EpBTK;IACF,ejDyfoC;IiDxfpC,0B7BuBmB;I6BtBnB,sB7BuBuB,E6BdxB;IAPqB;MAClB,0B7BoBqB,E6BnBtB;IACD;MACE,e7BgBiB;M6BfjB,0BjDgfkC,EiD/enC;EAGmB;IAClB,6B7BWqB,E6BVtB;;AqBSL;EA7BI,YtEsJiC;EsErJjC,iBtEsJiC;EsErJjC,0BAAwB,EA8BvB;EAHL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtE4I6B;IsE3I7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,wBAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,YtE0JiC;EsEzJjC,oBrED8B;EqEE9B,0BAAwB,EAiCvB;EANL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtEgJ6B;IsE/I7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,YtE8JiC;EsE7JjC,oBlDGoB;EkDFpB,0BAAwB,EAoCvB;EATL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtEoJ6B;IsEnJ7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,YtEkKiC;EsEjKjC,oBlDmBiB;EkDlBjB,0BAAwB,EAuCvB;EAZL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtEwJ6B;IsEvJ7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,YtEsKiC;EsErKjC,oBlDqCmB;EkDpCnB,0BAAwB,EA0CvB;EAfL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtE4J6B;IsE3J7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,YtE0KiC;EsEzKjC,oBlDsBgB;EkDrBhB,0BAAwB,EA6CvB;EAlBL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,YtEgK6B;IsE/J7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AAIT;EA7BI,aAiDiC;EAhDjC,oBAgD0C;EA/C1C,0BAAwB,EAgDvB;EArBL;IArBQ,oBAAkB;IAClB,sBAAoB;IACpB,aAuC6B;IAtC7B,cAAc;IACd,kBAAkB,EACrB;EAgBL;;;;;;IANY,0BAAyB;IACzB,sBAAoB,EACvB;;AA4BT;EACI,8BAA8B;EAC9B,kCAAkC;EAClC,eAAe;EACf,4BAAoB;EAApB,oBAAoB,EACvB;;AAED;EACI,YAAY,EACf;;AAED;EACI,eAAe,EAClB;;AAED;EACI,eAAe,EAClB;;AAED;EACI,eAAe,EAClB;;AAED;EACI,eAAe,EAClB;;AAED;EACI,eAAe,EAClB;;AAED;;;;;EAKI,YAAY,EACf;;ACtFD;EAGY,mBAAmB,EACtB;;ACTT;EACI,0BAA0B,EAsB7B;EAvBD;IAIQ,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,UAAU;IACV,mBAAmB;IACnB,oBAAoB;IACpB,aAAa,EAKhB;IAhBL;MAcY,eAAe,EAClB;EAfT;IAoBY,iBAAiB,EACpB;;AChBT;EACE,qCAA2B;EAE3B,gBAAgB;EAChB,QAAQ;EACR,SAAS;EACT,OAAO;EACP,UAAU;EAEV,cAAc;EACd,cAAc,EACf;;AAED;EACE,uBAhBU;EAiBV,4DAA4D;EAC5D,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EAEnB,gBAAgB;EAChB,UAAU;EACV,SAAS;EACT,mBAAmB;EAEnB,gBAAgB;EAChB,mBAAmB;EACnB,iBAAiB;EACjB,cAAc;EACd,cAAc,EAiQf;EAjRD;IAmBI,cAAc,EACf;EApBH;IAuBI,mBAAmB,EACpB;EAxBH;IA2BI,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,eAAe,EAChB;EArCH;IAwCI,aAAa;IACb,mBAAmB;IACnB,UAAU,EACX;EA3CH;IA8CI,UAAU;IACV,mBAAmB;IACnB,iBAAiB;IACjB,YAhEQ;IAiER,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,mBAAmB,EAsBpB;IA5EH;MAyDM,YAAY;MACZ,gBAAgB,EACjB;IA3DL;MA8DM,uBAAuB;MACvB,8BAA8B;MAC9B,0BAA0B;MAC1B,YAAY;MACZ,aAAa;MACb,WAAW;MACX,kBAAkB;MAClB,oBAAoB;MACpB,yCAAyC;MACzC,mBAAmB;MACnB,gBAAgB;MAChB,oBAAoB;MACpB,iEAAyD;MAAzD,yDAAyD,EAC1D;EA3EL;IAgFM,sBAAsB;IACtB,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,YAAY;IACZ,WAAW;IACX,uBAAuB;IACvB,gCAAgC;IAChC,mBAAmB;IACnB,iEAAyD;IAAzD,yDAAyD,EAC1D;EA1FL;IA8FI,kBAAkB;IAClB,gBAAgB,EACjB;EAhGH;IAmGI,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,kCAA0B;IAA1B,0BAA0B,EAK3B;IAhHH;MA8GM,YAAY,EACb;EA/GL;;;;;IAuHI,cAAc,EACf;EAxHH;IA2HI,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,YAAY;IACZ,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,YAAY,EACb;EApIH;;;;;;;IA6II,kBAAkB,EACnB;EA9IH;IAiJI,YAAY;IACZ,uBAAuB;IACvB,mBAAmB;IACnB,0BAAqB;IACrB,gBAAgB;IAChB,kDAAwC;IACxC,6BAAqB;IAArB,qBAAqB,EA8BtB;IArLH;MAyJM,iCAAiC,EAClC;IA1JL;MA4JM,cAAc;MACd,gCAA2B;MAC3B,0BAAqB,EAatB;MA3KL;QAgKQ,4CAAoC;QAApC,oCAAoC;QACpC,aAAa,EACd;MAlKP;QAoKQ,4CAAoC;QAApC,oCAAoC;QACpC,aAAa,EACd;MAtKP;QAwKQ,4CAAoC;QAApC,oCAAoC;QACpC,aAAa,EACd;IA1KP;MA6KM,eAAc,EACf;IA9KL;MAgLM,eAAc,EACf;IAjLL;MAmLM,eAAc,EACf;EApLL;IAyLM,YAAY;IACZ,sBAAsB;IACtB,sBAAsB,EACvB;EA5LL;IA+LM,aAAa;IACb,gBAAgB;IAChB,iBAAiB,EAClB;EAlML;;;IAwMI,aAAa;IACb,kBAAkB;IAClB,uBAAuB;IACvB,gBAAgB,EACjB;EA5MH;IA+MI,gBAAgB,EACjB;EAhNH;IAmNI,iBAAiB,EAClB;EApNH;IAuNI,cAAc;IACd,cAAc,EACf;EAzNH;IA4NI,YAAY;IACZ,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,gBAAgB,EACjB;EAjOH;IAoOI,UAAU,EAaX;IAjPH;MAuOM,kBAAkB,EACnB;IAxOL;MA2OM,uBAAuB,EACxB;IA5OL;MA+OM,kBAAkB,EACnB;EAhPL;IAoPI,YAAY,EAIb;IAxPH;MAsPM,uBAAuB,EACxB;EAvPL;IA2PI,0BAA0B;IAC1B,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,cAAc,EAcf;IAhRH;MAqQM,aAAa;MACb,sBAAsB;MACtB,YAAY;MACZ,aAAa;MACb,mBAAmB;MACnB,0BAAqB;MACrB,aAAa;MACb,kBAAkB;MAClB,mBAAmB;MACnB,mBAAmB,EACpB;;AAIL;EAOE,YAAY;EACZ,aAAa;EACb,0BAA0B;EAC1B,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,mBAAmB;EACnB,wBAAwB;EACxB,gBAAgB;EAEhB,gDAAgD;EAChD,4BAA4B;EAC5B,0BAA0B;EAE1B,uBAAuB;EACvB,sBAAsB;EACtB,kBAAkB,EAgJnB;EAvKD;IA0BI,sBAzBc,EAmDf;IApDH;MA6BM,mBAAmB;MACnB,eAAe,EAChB;IA/BL;MAkCM,mBAAmB;MACnB,YAAY;MACZ,YAAY;MACZ,0BApCY;MAqCZ,eAAe;MACf,UAAU;MACV,mBAAmB,EAWpB;MAnDL;QA2CQ,iCAAiB;QAAjB,yBAAiB;QACjB,WAAW,EACZ;MA7CP;QAgDQ,kCAAiB;QAAjB,0BAAiB;QACjB,YAAY,EACb;EAlDP;IAuDI,4DAA4D;IAC5D,eAtDc;IAuDd,sBAvDc;IAwDd,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB,EACpB;EA7DH;IAgEI,qCAAqC;IACrC,eA9Dc;IA+Dd,sBA/Dc;IAgEd,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB,EACpB;EAtEH;IAyEI,4DAA4D;IAC5D,eAtEc;IAuEd,sBAvEc;IAwEd,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB,EACpB;EA/EH;IAkFI,sBA7Ec,EAiKf;IAtKH;MAsFM,YAAY;MACZ,mBAAmB;MACnB,mBAAmB;MACnB,YAAY;MACZ,cAAc;MACd,iBA7XM;MA8XN,iCAAiB;MAAjB,yBAAiB,EAClB;IA7FL;MAgGM,+BAA+B;MAC/B,UAAU;MACV,YAAY;MAEZ,kCAAiB;MAAjB,0BAAiB;MACjB,oCAA4B;MAA5B,4BAA4B,EAC7B;IAtGL;MAyGM,+BAA+B;MAC/B,WAAW;MACX,WAAW;MAEX,kCAAiB;MAAjB,0BAAiB;MACjB,iCAAyB;MAAzB,yBAAyB,EAC1B;IA/GL;MAkHM,YAAY;MACZ,aAAa;MACb,2CA/GY;MAgHZ,mBAAmB;MACnB,wBAAwB;MAExB,mBAAmB;MACnB,WAAW;MACX,UAAU;MACV,WAAW,EACZ;IA5HL;MA+HM,WAAW;MACX,aAAa;MACb,uBAnaM;MAqaN,mBAAmB;MACnB,WAAW;MACX,SAAS;MACT,WAAW;MAEX,kCAAiB;MAAjB,0BAAiB,EAClB;IAzIL;MA4IM,YAAY;MACZ,0BAxIY;MAyIZ,eAAe;MACf,mBAAmB;MAEnB,mBAAmB;MACnB,WAAW,EAmBZ;MArKL;QAqJQ,YAAY;QAEZ,WAAW;QACX,UAAU;QAEV,iCAAiB;QAAjB,yBAAiB,EAClB;MA3JP;QA8JQ,YAAY;QAEZ,WAAW;QACX,UAAU;QAEV,kCAAiB;QAAjB,0BAAiB,EAClB;;AAKP;EAIE,iBAAiB;EACjB,iBAAiB;EACjB,WAAW,EA4CZ;EAlDD;IASI,sBAAsB;IACtB,mBAAmB,EACpB;EAXH;IAcI,oBAZY;IAaZ,mBAAmB;IACnB,YA3dQ;IA4dR,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;IACnB,WAAW;IACX,YAAY,EAqBb;IA1CH;MAwBM,eAAe,EAChB;IAzBL;MA4BM,gBAAgB,EACjB;IA7BL;MAgCM,oBA9BU,EAuCX;MAzCL;QAmCQ,oBAlCa,EAmCd;MApCP;QAuCQ,oBAtCa,EAuCd;EAxCP;IA6CI,oBA3CY;IA4CZ,cAAc;IACd,eAAe;IACf,YAAY,EACb;;AAIH,+CAA+C;AlFm/P/C;EkFj/PE,yCAAiC,EAClC;;AAKC;EAaA;IACE,8BAAgB;IAAhB,sBAAgB,EAAA;EAGlB;IACE,+BAAgB;IAAhB,uBAAgB,EAAA;EAGlB;IACE,+BAAgB;IAAhB,uBAAgB,EAAA;EAGlB;IACE,4BAAgB;IAAhB,oBAAgB,EAAA,EAAA;;AA1BlB;EAaA;IACE,8BAAgB;IAAhB,sBAAgB,EAAA;EAGlB;IACE,+BAAgB;IAAhB,uBAAgB,EAAA;EAGlB;IACE,+BAAgB;IAAhB,uBAAgB,EAAA;EAGlB;IACE,4BAAgB;IAAhB,oBAAgB,EAAA,EAAA;;AA1BlB;EA+BA;IACE,4BAAgB;IAAhB,oBAAgB;IAChB,WAAW,EAAA;EAGb;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,WAAW,EAAA,EAAA;;AAtCb;EA+BA;IACE,4BAAgB;IAAhB,oBAAgB;IAChB,WAAW,EAAA;EAGb;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,WAAW,EAAA,EAAA;;AAIf;EApCE,uCAAW;EAAX,+BAAW,EA0CZ;EAND;IApCE,wBAAW;IAAX,gBAAW,EAyCV;;AAGH;EA5CE,iDAAW;EAAX,yCAAW,EAkDZ;EAND;IA5CE,wBAAW;IAAX,gBAAW,EAiDV;;AAvDD;EA+DA;IACE,SAAS;IACT,UAAU;IACV,UAAU,EAAA;EAGZ;IACE,SAAS;IACT,UAAU;IACV,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA,EAAA;;AA1FZ;EA+DA;IACE,SAAS;IACT,UAAU;IACV,UAAU,EAAA;EAGZ;IACE,SAAS;IACT,UAAU;IACV,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA,EAAA;;AA1FZ;EA+FA;IACE,SAAS;IACT,YAAY;IACZ,UAAU,EAAA;EAGZ;IACE,SAAS;IACT,YAAY;IACZ,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,SAAS;IACT,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA,EAAA;;AApHZ;EA+FA;IACE,SAAS;IACT,YAAY;IACZ,UAAU,EAAA;EAGZ;IACE,SAAS;IACT,YAAY;IACZ,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,SAAS;IACT,UAAU,EAAA;EAGZ;IACE,YAAY;IACZ,WAAW;IACX,UAAU,EAAA,EAAA;;AApHZ;EAyHA;IACE,kCAAiB;IAAjB,0BAAiB,EAAA;EAGnB;IACE,kCAAiB;IAAjB,0BAAiB,EAAA;EAGnB;IACE,mCAAiB;IAAjB,2BAAiB,EAAA;EAGnB;IACE,mCAAiB;IAAjB,2BAAiB,EAAA,EAAA;;AAtInB;EAyHA;IACE,kCAAiB;IAAjB,0BAAiB,EAAA;EAGnB;IACE,kCAAiB;IAAjB,0BAAiB,EAAA;EAGnB;IACE,mCAAiB;IAAjB,2BAAiB,EAAA;EAGnB;IACE,mCAAiB;IAAjB,2BAAiB,EAAA,EAAA;;AAIrB;EApIE,6CAAW;EAAX,qCAAW,EAsIZ;;AAED;EAxIE,8CAAW;EAAX,sCAAW,EA0IZ;;AAED;EA5IE,mDAAW;EAAX,2CAAW,EA8IZ;;AApJC;EA0JA;IACE,mCAAkB;IAAlB,2BAAkB;IAClB,WAAW,EAAA;EAGb;IACE,iCAAkB;IAAlB,yBAAkB;IAClB,WAAW,EAAA,EAAA;;AAjKb;EA0JA;IACE,mCAAkB;IAAlB,2BAAkB;IAClB,WAAW,EAAA;EAGb;IACE,iCAAkB;IAAlB,yBAAkB;IAClB,WAAW,EAAA,EAAA;;AAIf;EA/JE,2CAAW;EAAX,mCAAW,EAiKZ;;AAvKC;EA0KA;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,iBAAiB;IACjB,WAAW,EAAA;EAGb;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,iBAAiB;IACjB,WAAW,EAAA;EAGb;IACE,+BAAgB;IAAhB,uBAAgB;IAChB,iBAAiB,EAAA;EAGnB;IACE,4BAAgB;IAAhB,oBAAgB;IAChB,cAAc;IACd,WAAW,EAAA,EAAA;;AA9Lb;EA0KA;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,iBAAiB;IACjB,WAAW,EAAA;EAGb;IACE,8BAAgB;IAAhB,sBAAgB;IAChB,iBAAiB;IACjB,WAAW,EAAA;EAGb;IACE,+BAAgB;IAAhB,uBAAgB;IAChB,iBAAiB,EAAA;EAGnB;IACE,4BAAgB;IAAhB,oBAAgB;IAChB,cAAc;IACd,WAAW,EAAA,EAAA;;AAIf;EA5LE,uCAAW;EAAX,+BAAW,EA8LZ;;AApMC;EAuMA;IACE,sBAAsB,EAAA;EAGxB;IACE,sBAAsB,EAAA,EAAA;;AA5MxB;EAuMA;IACE,sBAAsB,EAAA;EAGxB;IACE,sBAAsB,EAAA,EAAA;;AAI1B;EA1ME,0DAAW;EAAX,kDAAW,EA4MZ;;AAlNC;EAqNA;IACE,gCAAiB;IAAjB,wBAAiB,EAAA;EAGnB;IACE,kCAAiB;IAAjB,0BAAiB,EAAA,EAAA;;AA1NnB;EAqNA;IACE,gCAAiB;IAAjB,wBAAiB,EAAA;EAGnB;IACE,kCAAiB;IAAjB,0BAAiB,EAAA,EAAA;;ACnuBrB;EACI,kBAAkB,EACrB;;ACJD;EACI,kBAAkB;EAClB,gH1Ee0H;E0Ed1H,0BAA0B;EAC1B,eAAe;EACf,iBAAiB;EACjB,iB1EY2B;E0EX3B,oCAAoC,EAkavC;EAzaD;IAUQ,0BAA0B,EAC7B;EAXL;IAcQ,iBAAiB;IACjB,oBAAoB,EACvB;EAhBL;IAmBQ,oBAAoB,EACvB;EApBL;IAuBQ,uBAAuB,EAQ1B;IA/BL;MA0BY,aAAa;MACb,YAAY;MACZ,uBAAuB;MACvB,gBAAgB,EACnB;EA9BT;IAkCQ,YvD/Be,EuDgClB;EAnCL;IAuCY,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB,EACzB;EA1CT;IA8CQ,aAAa,EAChB;EA/CL;IAkDQ,evD7CgB,EuD8CnB;EAnDL;IAsDQ,evDjCa,EuDkChB;EAvDL;IA0DQ,evD5Be,EuD6BlB;EA3DL;IA8DQ,evDtCY,EuDuCf;EA/DL;IAkEQ,iBAAiB,EACpB;EAnEL;IAsEQ,iBAAiB,EACpB;EAvEL;IA0EQ,oBAAoB,EACvB;EA3EL;IA8EQ,oBAAoB,EAIvB;IAlFL;MAgFY,iBAAiB,EACpB;EAjFT;IAqFQ,iBAAiB;IACjB,iBAAiB,EACpB;EAvFL;IA2FY,iBAAiB;IACjB,oBAAoB,EACvB;EA7FT;IA+FY,iBAAiB;IACjB,oBAAoB;IACpB,gBAAgB,EAInB;IArGT;MAmGgB,kBAAkB,EACrB;EApGb;IA0GoB,cAAc;IACd,mBAAmB;IACnB,eAAe,EAClB;EA7GjB;IA+GoB,cAAc;IACd,mBAAmB;IACnB,iBAAiB,EACpB;EAlHjB;IAoHoB,cAAc;IACd,mBAAmB;IACnB,iBAAiB,EACpB;EAvHjB;IAyHoB,cAAc;IACd,mBAAmB;IACnB,iBAAiB,EACpB;EA5HjB;IA8HoB,cAAc;IACd,mBAAmB;IACnB,iBAAiB,EACpB;EAjIjB;IAmIoB,UAAU,EACb;EApIjB;IAyIY,YAAY;IACZ,qBAAqB;IACrB,mBAAmB,EAwGtB;IAnPT;MA+IoB,UAAU,EACb;IAhJjB;MAmJgB,YAAY;MACZ,mBAAmB;MACnB,WAAW;MACX,UAAU;MACV,WAAW;MACX,aAAa;MACb,oBAAoB,EACvB;IA1Jb;MA4JgB,iBAAiB;MACjB,YAAY;MACZ,aAAa;MACb,mBAAmB;MACnB,0BAA0B;MAC1B,mBAAmB;MACnB,WAAW;MACX,UAAU,EAyBb;MA5Lb;QAqKoB,mBAAmB;QACnB,SAAS;QACT,WAAW,EAKd;QA5KjB;UA0KwB,WAAW,EACd;MA3KrB;QA8KoB,evD7IC,EuD8IJ;MA/KjB;QAiLoB,evD1IG,EuD2IN;MAlLjB;QAoLoB,evDtJG,EuDuJN;MArLjB;QAuLoB,evDlKC,EuDmKJ;MAxLjB;QA0LoB,evDrLI,EuDsLP;IA3LjB;MA8LgB,iBAAiB,EACpB;IA/Lb;MAiMgB,UAAU;MACV,mBAAmB,EAgDtB;MAlPb;QAqMoB,0BAA0B,EA4B7B;QAjOjB;UAuMwB,eAAa,EAChB;QAxMrB;UA2MwB,mBAAmB;UACnB,UAAU;UACV,UAAU;UACV,sBAAsB;UACtB,mCAAmC;UACnC,6BAA6B;UAC7B,iCAAiC;UACjC,sCAAsC;UACtC,aAAa,EAChB;QApNrB;UAuNwB,mBAAmB;UACnB,UAAU;UACV,UAAU;UACV,sBAAsB;UACtB,mCAAmC;UACnC,0BAA0B;UAC1B,8BAA8B;UAC9B,sCAAsC;UACtC,aAAa,EAChB;MAhOrB;QAqOwB,iBAAiB,EACpB;MAtOrB;QA0OoB,2BAA2B,EAO9B;QAjPjB;UA+OwB,iBAAiB,EACpB;UAhPrB;YA6O4B,oBAAoB,EACvB;EAOrB;IArPJ;MAuPY,YAAY,EACf,EAAA;EAxPT;IA6PQ,gBAAgB,EAmFnB;IAhVL;MAiQY,iBAAiB;MACjB,0BAA0B;MAC1B,0BvDxPe;MuDyPf,iBAAiB;MACjB,mBAAmB,EAiDtB;MAtTT;QAwQgB,iBAAiB,EACpB;MAzQb;QA4QgB,UAAU;QACV,iBAAiB;QACjB,eAAe,EAClB;MA/Qb;QAmRoB,oBAAoB,EACvB;MApRjB;QAwRgB,iBAAiB,EACpB;MAzRb;QA4RgB,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,sBAAsB;QACtB,gBAAgB,EACnB;MAjSb;QAoSgB,0BvDzRW;QuD0RX,mBACe;QADf,sBAEkB;QAElB,gBAAgB;QAChB,4BAA4B;QAC5B,0BAA0B;QAE1B,uBAAuB;QACvB,sBAAsB;QACtB,kBAAkB,EACrB;MAhTb;QAmTgB,aAAa;QACb,0BvDlTY,EuDmTf;IArTb;MA0TY,sBvD/Se,EuDoUlB;MA/UT;QA6TgB,oBAAoB,EACvB;MA9Tb;QAiUgB,gBAAgB,EACnB;MAlUb;QAqUgB,oBAAoB,EACvB;MAtUb;QAwUgB,mBAAmB,EACtB;MAzUb;QA4UgB,uBAAmC,EACtC;EA7Ub;IAmVQ,mBAAmB;IACnB,YAAY;IACZ,UAAU;IACV,aAAa;IACb,uBAAuB;IACvB,8BvD7UmB;IuD8UnB,YvD5UiB;IuD6UjB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,8CAAyB,EAgD5B;IA7YL;MAgWY,kBAAkB,EACrB;IAjWT;MAqWgB,sBAAsB;MACtB,gBAAgB;MAChB,aAAa;MACb,mBAAmB;MACnB,uBvD5VS;MuD6VT,mBAAmB;MACnB,evDhWW;MuDiWX,8BAAsB;MAAtB,sBAAsB;MACtB,uBAAuB,EAU1B;MAvXb;QAgXoB,0BvDzUG,EuD0UN;MAjXjB;QAoXoB,sBAAsB;QACtB,0BAAwB,EAC3B;IAtXjB;MA2XY,iBAAiB,EACpB;IAED;MA9XR;QA+XY,iBAAiB,EAcxB;QA7YL;UAkYgB,kBAAkB,EAIrB;UAtYb;YAoYoB,iBAAiB,EACpB;QArYjB;UAyYgB,cAAc;UACd,kBAAkB,EACrB,EAAA;EA3Yb;IAiZQ,iBAAiB,EACpB;EAlZL;IAqZQ,kBAAkB;IAClB,qBAAqB;IACrB,YAAY;IACZ,mBAAmB;IACnB,oBAAoB,EAevB;IAxaL;MA4ZY,gBAAgB;MAChB,iBAAiB,EACpB;IA9ZT;MAiaY,YvD9ZW;MuD+ZX,kBAAkB,EAKrB;MAvaT;QAqagB,8BAA8B,EACjC","file":"app.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n Ionicons, v2.0.1\n Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n https://twitter.com/benjsperry https://twitter.com/ionicframework\n MIT License: https://github.com/driftyco/ionicons\n\n Android-style icons originally built by Google’s\n Material Design Icons: https://github.com/google/material-design-icons\n used under CC BY http://creativecommons.org/licenses/by/4.0/\n Modified icons to fit ionicon’s grid from original.\n*/\n@font-face {\n font-family: \"Ionicons\";\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1\");\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1#iefix\") format(\"embedded-opentype\"), url(\"../../../fonts/ionicons.ttf?v=2.0.1\") format(\"truetype\"), url(\"../../../fonts/ionicons.woff?v=2.0.1\") format(\"woff\"), url(\"../../../fonts/ionicons.svg?v=2.0.1#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal; }\n\n.ion, .ionicons,\n.ion-alert:before,\n.ion-alert-circled:before,\n.ion-android-add:before,\n.ion-android-add-circle:before,\n.ion-android-alarm-clock:before,\n.ion-android-alert:before,\n.ion-android-apps:before,\n.ion-android-archive:before,\n.ion-android-arrow-back:before,\n.ion-android-arrow-down:before,\n.ion-android-arrow-dropdown:before,\n.ion-android-arrow-dropdown-circle:before,\n.ion-android-arrow-dropleft:before,\n.ion-android-arrow-dropleft-circle:before,\n.ion-android-arrow-dropright:before,\n.ion-android-arrow-dropright-circle:before,\n.ion-android-arrow-dropup:before,\n.ion-android-arrow-dropup-circle:before,\n.ion-android-arrow-forward:before,\n.ion-android-arrow-up:before,\n.ion-android-attach:before,\n.ion-android-bar:before,\n.ion-android-bicycle:before,\n.ion-android-boat:before,\n.ion-android-bookmark:before,\n.ion-android-bulb:before,\n.ion-android-bus:before,\n.ion-android-calendar:before,\n.ion-android-call:before,\n.ion-android-camera:before,\n.ion-android-cancel:before,\n.ion-android-car:before,\n.ion-android-cart:before,\n.ion-android-chat:before,\n.ion-android-checkbox:before,\n.ion-android-checkbox-blank:before,\n.ion-android-checkbox-outline:before,\n.ion-android-checkbox-outline-blank:before,\n.ion-android-checkmark-circle:before,\n.ion-android-clipboard:before,\n.ion-android-close:before,\n.ion-android-cloud:before,\n.ion-android-cloud-circle:before,\n.ion-android-cloud-done:before,\n.ion-android-cloud-outline:before,\n.ion-android-color-palette:before,\n.ion-android-compass:before,\n.ion-android-contact:before,\n.ion-android-contacts:before,\n.ion-android-contract:before,\n.ion-android-create:before,\n.ion-android-delete:before,\n.ion-android-desktop:before,\n.ion-android-document:before,\n.ion-android-done:before,\n.ion-android-done-all:before,\n.ion-android-download:before,\n.ion-android-drafts:before,\n.ion-android-exit:before,\n.ion-android-expand:before,\n.ion-android-favorite:before,\n.ion-android-favorite-outline:before,\n.ion-android-film:before,\n.ion-android-folder:before,\n.ion-android-folder-open:before,\n.ion-android-funnel:before,\n.ion-android-globe:before,\n.ion-android-hand:before,\n.ion-android-hangout:before,\n.ion-android-happy:before,\n.ion-android-home:before,\n.ion-android-image:before,\n.ion-android-laptop:before,\n.ion-android-list:before,\n.ion-android-locate:before,\n.ion-android-lock:before,\n.ion-android-mail:before,\n.ion-android-map:before,\n.ion-android-menu:before,\n.ion-android-microphone:before,\n.ion-android-microphone-off:before,\n.ion-android-more-horizontal:before,\n.ion-android-more-vertical:before,\n.ion-android-navigate:before,\n.ion-android-notifications:before,\n.ion-android-notifications-none:before,\n.ion-android-notifications-off:before,\n.ion-android-open:before,\n.ion-android-options:before,\n.ion-android-people:before,\n.ion-android-person:before,\n.ion-android-person-add:before,\n.ion-android-phone-landscape:before,\n.ion-android-phone-portrait:before,\n.ion-android-pin:before,\n.ion-android-plane:before,\n.ion-android-playstore:before,\n.ion-android-print:before,\n.ion-android-radio-button-off:before,\n.ion-android-radio-button-on:before,\n.ion-android-refresh:before,\n.ion-android-remove:before,\n.ion-android-remove-circle:before,\n.ion-android-restaurant:before,\n.ion-android-sad:before,\n.ion-android-search:before,\n.ion-android-send:before,\n.ion-android-settings:before,\n.ion-android-share:before,\n.ion-android-share-alt:before,\n.ion-android-star:before,\n.ion-android-star-half:before,\n.ion-android-star-outline:before,\n.ion-android-stopwatch:before,\n.ion-android-subway:before,\n.ion-android-sunny:before,\n.ion-android-sync:before,\n.ion-android-textsms:before,\n.ion-android-time:before,\n.ion-android-train:before,\n.ion-android-unlock:before,\n.ion-android-upload:before,\n.ion-android-volume-down:before,\n.ion-android-volume-mute:before,\n.ion-android-volume-off:before,\n.ion-android-volume-up:before,\n.ion-android-walk:before,\n.ion-android-warning:before,\n.ion-android-watch:before,\n.ion-android-wifi:before,\n.ion-aperture:before,\n.ion-archive:before,\n.ion-arrow-down-a:before,\n.ion-arrow-down-b:before,\n.ion-arrow-down-c:before,\n.ion-arrow-expand:before,\n.ion-arrow-graph-down-left:before,\n.ion-arrow-graph-down-right:before,\n.ion-arrow-graph-up-left:before,\n.ion-arrow-graph-up-right:before,\n.ion-arrow-left-a:before,\n.ion-arrow-left-b:before,\n.ion-arrow-left-c:before,\n.ion-arrow-move:before,\n.ion-arrow-resize:before,\n.ion-arrow-return-left:before,\n.ion-arrow-return-right:before,\n.ion-arrow-right-a:before,\n.ion-arrow-right-b:before,\n.ion-arrow-right-c:before,\n.ion-arrow-shrink:before,\n.ion-arrow-swap:before,\n.ion-arrow-up-a:before,\n.ion-arrow-up-b:before,\n.ion-arrow-up-c:before,\n.ion-asterisk:before,\n.ion-at:before,\n.ion-backspace:before,\n.ion-backspace-outline:before,\n.ion-bag:before,\n.ion-battery-charging:before,\n.ion-battery-empty:before,\n.ion-battery-full:before,\n.ion-battery-half:before,\n.ion-battery-low:before,\n.ion-beaker:before,\n.ion-beer:before,\n.ion-bluetooth:before,\n.ion-bonfire:before,\n.ion-bookmark:before,\n.ion-bowtie:before,\n.ion-briefcase:before,\n.ion-bug:before,\n.ion-calculator:before,\n.ion-calendar:before,\n.ion-camera:before,\n.ion-card:before,\n.ion-cash:before,\n.ion-chatbox:before,\n.ion-chatbox-working:before,\n.ion-chatboxes:before,\n.ion-chatbubble:before,\n.ion-chatbubble-working:before,\n.ion-chatbubbles:before,\n.ion-checkmark:before,\n.ion-checkmark-circled:before,\n.ion-checkmark-round:before,\n.ion-chevron-down:before,\n.ion-chevron-left:before,\n.ion-chevron-right:before,\n.ion-chevron-up:before,\n.ion-clipboard:before,\n.ion-clock:before,\n.ion-close:before,\n.ion-close-circled:before,\n.ion-close-round:before,\n.ion-closed-captioning:before,\n.ion-cloud:before,\n.ion-code:before,\n.ion-code-download:before,\n.ion-code-working:before,\n.ion-coffee:before,\n.ion-compass:before,\n.ion-compose:before,\n.ion-connection-bars:before,\n.ion-contrast:before,\n.ion-crop:before,\n.ion-cube:before,\n.ion-disc:before,\n.ion-document:before,\n.ion-document-text:before,\n.ion-drag:before,\n.ion-earth:before,\n.ion-easel:before,\n.ion-edit:before,\n.ion-egg:before,\n.ion-eject:before,\n.ion-email:before,\n.ion-email-unread:before,\n.ion-erlenmeyer-flask:before,\n.ion-erlenmeyer-flask-bubbles:before,\n.ion-eye:before,\n.ion-eye-disabled:before,\n.ion-female:before,\n.ion-filing:before,\n.ion-film-marker:before,\n.ion-fireball:before,\n.ion-flag:before,\n.ion-flame:before,\n.ion-flash:before,\n.ion-flash-off:before,\n.ion-folder:before,\n.ion-fork:before,\n.ion-fork-repo:before,\n.ion-forward:before,\n.ion-funnel:before,\n.ion-gear-a:before,\n.ion-gear-b:before,\n.ion-grid:before,\n.ion-hammer:before,\n.ion-happy:before,\n.ion-happy-outline:before,\n.ion-headphone:before,\n.ion-heart:before,\n.ion-heart-broken:before,\n.ion-help:before,\n.ion-help-buoy:before,\n.ion-help-circled:before,\n.ion-home:before,\n.ion-icecream:before,\n.ion-image:before,\n.ion-images:before,\n.ion-information:before,\n.ion-information-circled:before,\n.ion-ionic:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-americanfootball:before,\n.ion-ios-americanfootball-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-left:before,\n.ion-ios-arrow-right:before,\n.ion-ios-arrow-thin-down:before,\n.ion-ios-arrow-thin-left:before,\n.ion-ios-arrow-thin-right:before,\n.ion-ios-arrow-thin-up:before,\n.ion-ios-arrow-up:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-bell:before,\n.ion-ios-bell-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bolt:before,\n.ion-ios-bolt-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-box:before,\n.ion-ios-box-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubble:before,\n.ion-ios-chatbubble-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-empty:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-circle-filled:before,\n.ion-ios-circle-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-empty:before,\n.ion-ios-close-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compose:before,\n.ion-ios-compose-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-strong:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-drag:before,\n.ion-ios-email:before,\n.ion-ios-email-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-gear:before,\n.ion-ios-gear-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-grid-view:before,\n.ion-ios-grid-view-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-empty:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-empty:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-lightbulb:before,\n.ion-ios-lightbulb-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-outline:before,\n.ion-ios-location:before,\n.ion-ios-location-outline:before,\n.ion-ios-locked:before,\n.ion-ios-locked-outline:before,\n.ion-ios-loop:before,\n.ion-ios-loop-strong:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-outline:before,\n.ion-ios-minus:before,\n.ion-ios-minus-empty:before,\n.ion-ios-minus-outline:before,\n.ion-ios-monitor:before,\n.ion-ios-monitor-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-notes:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paperplane:before,\n.ion-ios-paperplane-outline:before,\n.ion-ios-partlysunny:before,\n.ion-ios-partlysunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-outline:before,\n.ion-ios-personadd:before,\n.ion-ios-personadd-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-plus:before,\n.ion-ios-plus-empty:before,\n.ion-ios-plus-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-printer:before,\n.ion-ios-printer-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-strong:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-empty:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-reload:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-strong:before,\n.ion-ios-settings:before,\n.ion-ios-settings-strong:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-strong:before,\n.ion-ios-skipbackward:before,\n.ion-ios-skipbackward-outline:before,\n.ion-ios-skipforward:before,\n.ion-ios-skipforward-outline:before,\n.ion-ios-snowy:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-telephone:before,\n.ion-ios-telephone-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-toggle:before,\n.ion-ios-toggle-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlocked:before,\n.ion-ios-unlocked-outline:before,\n.ion-ios-upload:before,\n.ion-ios-upload-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-high:before,\n.ion-ios-volume-low:before,\n.ion-ios-wineglass:before,\n.ion-ios-wineglass-outline:before,\n.ion-ios-world:before,\n.ion-ios-world-outline:before,\n.ion-ipad:before,\n.ion-iphone:before,\n.ion-ipod:before,\n.ion-jet:before,\n.ion-key:before,\n.ion-knife:before,\n.ion-laptop:before,\n.ion-leaf:before,\n.ion-levels:before,\n.ion-lightbulb:before,\n.ion-link:before,\n.ion-load-a:before,\n.ion-load-b:before,\n.ion-load-c:before,\n.ion-load-d:before,\n.ion-location:before,\n.ion-lock-combination:before,\n.ion-locked:before,\n.ion-log-in:before,\n.ion-log-out:before,\n.ion-loop:before,\n.ion-magnet:before,\n.ion-male:before,\n.ion-man:before,\n.ion-map:before,\n.ion-medkit:before,\n.ion-merge:before,\n.ion-mic-a:before,\n.ion-mic-b:before,\n.ion-mic-c:before,\n.ion-minus:before,\n.ion-minus-circled:before,\n.ion-minus-round:before,\n.ion-model-s:before,\n.ion-monitor:before,\n.ion-more:before,\n.ion-mouse:before,\n.ion-music-note:before,\n.ion-navicon:before,\n.ion-navicon-round:before,\n.ion-navigate:before,\n.ion-network:before,\n.ion-no-smoking:before,\n.ion-nuclear:before,\n.ion-outlet:before,\n.ion-paintbrush:before,\n.ion-paintbucket:before,\n.ion-paper-airplane:before,\n.ion-paperclip:before,\n.ion-pause:before,\n.ion-person:before,\n.ion-person-add:before,\n.ion-person-stalker:before,\n.ion-pie-graph:before,\n.ion-pin:before,\n.ion-pinpoint:before,\n.ion-pizza:before,\n.ion-plane:before,\n.ion-planet:before,\n.ion-play:before,\n.ion-playstation:before,\n.ion-plus:before,\n.ion-plus-circled:before,\n.ion-plus-round:before,\n.ion-podium:before,\n.ion-pound:before,\n.ion-power:before,\n.ion-pricetag:before,\n.ion-pricetags:before,\n.ion-printer:before,\n.ion-pull-request:before,\n.ion-qr-scanner:before,\n.ion-quote:before,\n.ion-radio-waves:before,\n.ion-record:before,\n.ion-refresh:before,\n.ion-reply:before,\n.ion-reply-all:before,\n.ion-ribbon-a:before,\n.ion-ribbon-b:before,\n.ion-sad:before,\n.ion-sad-outline:before,\n.ion-scissors:before,\n.ion-search:before,\n.ion-settings:before,\n.ion-share:before,\n.ion-shuffle:before,\n.ion-skip-backward:before,\n.ion-skip-forward:before,\n.ion-social-android:before,\n.ion-social-android-outline:before,\n.ion-social-angular:before,\n.ion-social-angular-outline:before,\n.ion-social-apple:before,\n.ion-social-apple-outline:before,\n.ion-social-bitcoin:before,\n.ion-social-bitcoin-outline:before,\n.ion-social-buffer:before,\n.ion-social-buffer-outline:before,\n.ion-social-chrome:before,\n.ion-social-chrome-outline:before,\n.ion-social-codepen:before,\n.ion-social-codepen-outline:before,\n.ion-social-css3:before,\n.ion-social-css3-outline:before,\n.ion-social-designernews:before,\n.ion-social-designernews-outline:before,\n.ion-social-dribbble:before,\n.ion-social-dribbble-outline:before,\n.ion-social-dropbox:before,\n.ion-social-dropbox-outline:before,\n.ion-social-euro:before,\n.ion-social-euro-outline:before,\n.ion-social-facebook:before,\n.ion-social-facebook-outline:before,\n.ion-social-foursquare:before,\n.ion-social-foursquare-outline:before,\n.ion-social-freebsd-devil:before,\n.ion-social-github:before,\n.ion-social-github-outline:before,\n.ion-social-google:before,\n.ion-social-google-outline:before,\n.ion-social-googleplus:before,\n.ion-social-googleplus-outline:before,\n.ion-social-hackernews:before,\n.ion-social-hackernews-outline:before,\n.ion-social-html5:before,\n.ion-social-html5-outline:before,\n.ion-social-instagram:before,\n.ion-social-instagram-outline:before,\n.ion-social-javascript:before,\n.ion-social-javascript-outline:before,\n.ion-social-linkedin:before,\n.ion-social-linkedin-outline:before,\n.ion-social-markdown:before,\n.ion-social-nodejs:before,\n.ion-social-octocat:before,\n.ion-social-pinterest:before,\n.ion-social-pinterest-outline:before,\n.ion-social-python:before,\n.ion-social-reddit:before,\n.ion-social-reddit-outline:before,\n.ion-social-rss:before,\n.ion-social-rss-outline:before,\n.ion-social-sass:before,\n.ion-social-skype:before,\n.ion-social-skype-outline:before,\n.ion-social-snapchat:before,\n.ion-social-snapchat-outline:before,\n.ion-social-tumblr:before,\n.ion-social-tumblr-outline:before,\n.ion-social-tux:before,\n.ion-social-twitch:before,\n.ion-social-twitch-outline:before,\n.ion-social-twitter:before,\n.ion-social-twitter-outline:before,\n.ion-social-usd:before,\n.ion-social-usd-outline:before,\n.ion-social-vimeo:before,\n.ion-social-vimeo-outline:before,\n.ion-social-whatsapp:before,\n.ion-social-whatsapp-outline:before,\n.ion-social-windows:before,\n.ion-social-windows-outline:before,\n.ion-social-wordpress:before,\n.ion-social-wordpress-outline:before,\n.ion-social-yahoo:before,\n.ion-social-yahoo-outline:before,\n.ion-social-yen:before,\n.ion-social-yen-outline:before,\n.ion-social-youtube:before,\n.ion-social-youtube-outline:before,\n.ion-soup-can:before,\n.ion-soup-can-outline:before,\n.ion-speakerphone:before,\n.ion-speedometer:before,\n.ion-spoon:before,\n.ion-star:before,\n.ion-stats-bars:before,\n.ion-steam:before,\n.ion-stop:before,\n.ion-thermometer:before,\n.ion-thumbsdown:before,\n.ion-thumbsup:before,\n.ion-toggle:before,\n.ion-toggle-filled:before,\n.ion-transgender:before,\n.ion-trash-a:before,\n.ion-trash-b:before,\n.ion-trophy:before,\n.ion-tshirt:before,\n.ion-tshirt-outline:before,\n.ion-umbrella:before,\n.ion-university:before,\n.ion-unlocked:before,\n.ion-upload:before,\n.ion-usb:before,\n.ion-videocamera:before,\n.ion-volume-high:before,\n.ion-volume-low:before,\n.ion-volume-medium:before,\n.ion-volume-mute:before,\n.ion-wand:before,\n.ion-waterdrop:before,\n.ion-wifi:before,\n.ion-wineglass:before,\n.ion-woman:before,\n.ion-wrench:before,\n.ion-xbox:before {\n display: inline-block;\n font-family: \"Ionicons\";\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.ion-alert:before {\n content: \"\"; }\n\n.ion-alert-circled:before {\n content: \"\"; }\n\n.ion-android-add:before {\n content: \"\"; }\n\n.ion-android-add-circle:before {\n content: \"\"; }\n\n.ion-android-alarm-clock:before {\n content: \"\"; }\n\n.ion-android-alert:before {\n content: \"\"; }\n\n.ion-android-apps:before {\n content: \"\"; }\n\n.ion-android-archive:before {\n content: \"\"; }\n\n.ion-android-arrow-back:before {\n content: \"\"; }\n\n.ion-android-arrow-down:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-forward:before {\n content: \"\"; }\n\n.ion-android-arrow-up:before {\n content: \"\"; }\n\n.ion-android-attach:before {\n content: \"\"; }\n\n.ion-android-bar:before {\n content: \"\"; }\n\n.ion-android-bicycle:before {\n content: \"\"; }\n\n.ion-android-boat:before {\n content: \"\"; }\n\n.ion-android-bookmark:before {\n content: \"\"; }\n\n.ion-android-bulb:before {\n content: \"\"; }\n\n.ion-android-bus:before {\n content: \"\"; }\n\n.ion-android-calendar:before {\n content: \"\"; }\n\n.ion-android-call:before {\n content: \"\"; }\n\n.ion-android-camera:before {\n content: \"\"; }\n\n.ion-android-cancel:before {\n content: \"\"; }\n\n.ion-android-car:before {\n content: \"\"; }\n\n.ion-android-cart:before {\n content: \"\"; }\n\n.ion-android-chat:before {\n content: \"\"; }\n\n.ion-android-checkbox:before {\n content: \"\"; }\n\n.ion-android-checkbox-blank:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline-blank:before {\n content: \"\"; }\n\n.ion-android-checkmark-circle:before {\n content: \"\"; }\n\n.ion-android-clipboard:before {\n content: \"\"; }\n\n.ion-android-close:before {\n content: \"\"; }\n\n.ion-android-cloud:before {\n content: \"\"; }\n\n.ion-android-cloud-circle:before {\n content: \"\"; }\n\n.ion-android-cloud-done:before {\n content: \"\"; }\n\n.ion-android-cloud-outline:before {\n content: \"\"; }\n\n.ion-android-color-palette:before {\n content: \"\"; }\n\n.ion-android-compass:before {\n content: \"\"; }\n\n.ion-android-contact:before {\n content: \"\"; }\n\n.ion-android-contacts:before {\n content: \"\"; }\n\n.ion-android-contract:before {\n content: \"\"; }\n\n.ion-android-create:before {\n content: \"\"; }\n\n.ion-android-delete:before {\n content: \"\"; }\n\n.ion-android-desktop:before {\n content: \"\"; }\n\n.ion-android-document:before {\n content: \"\"; }\n\n.ion-android-done:before {\n content: \"\"; }\n\n.ion-android-done-all:before {\n content: \"\"; }\n\n.ion-android-download:before {\n content: \"\"; }\n\n.ion-android-drafts:before {\n content: \"\"; }\n\n.ion-android-exit:before {\n content: \"\"; }\n\n.ion-android-expand:before {\n content: \"\"; }\n\n.ion-android-favorite:before {\n content: \"\"; }\n\n.ion-android-favorite-outline:before {\n content: \"\"; }\n\n.ion-android-film:before {\n content: \"\"; }\n\n.ion-android-folder:before {\n content: \"\"; }\n\n.ion-android-folder-open:before {\n content: \"\"; }\n\n.ion-android-funnel:before {\n content: \"\"; }\n\n.ion-android-globe:before {\n content: \"\"; }\n\n.ion-android-hand:before {\n content: \"\"; }\n\n.ion-android-hangout:before {\n content: \"\"; }\n\n.ion-android-happy:before {\n content: \"\"; }\n\n.ion-android-home:before {\n content: \"\"; }\n\n.ion-android-image:before {\n content: \"\"; }\n\n.ion-android-laptop:before {\n content: \"\"; }\n\n.ion-android-list:before {\n content: \"\"; }\n\n.ion-android-locate:before {\n content: \"\"; }\n\n.ion-android-lock:before {\n content: \"\"; }\n\n.ion-android-mail:before {\n content: \"\"; }\n\n.ion-android-map:before {\n content: \"\"; }\n\n.ion-android-menu:before {\n content: \"\"; }\n\n.ion-android-microphone:before {\n content: \"\"; }\n\n.ion-android-microphone-off:before {\n content: \"\"; }\n\n.ion-android-more-horizontal:before {\n content: \"\"; }\n\n.ion-android-more-vertical:before {\n content: \"\"; }\n\n.ion-android-navigate:before {\n content: \"\"; }\n\n.ion-android-notifications:before {\n content: \"\"; }\n\n.ion-android-notifications-none:before {\n content: \"\"; }\n\n.ion-android-notifications-off:before {\n content: \"\"; }\n\n.ion-android-open:before {\n content: \"\"; }\n\n.ion-android-options:before {\n content: \"\"; }\n\n.ion-android-people:before {\n content: \"\"; }\n\n.ion-android-person:before {\n content: \"\"; }\n\n.ion-android-person-add:before {\n content: \"\"; }\n\n.ion-android-phone-landscape:before {\n content: \"\"; }\n\n.ion-android-phone-portrait:before {\n content: \"\"; }\n\n.ion-android-pin:before {\n content: \"\"; }\n\n.ion-android-plane:before {\n content: \"\"; }\n\n.ion-android-playstore:before {\n content: \"\"; }\n\n.ion-android-print:before {\n content: \"\"; }\n\n.ion-android-radio-button-off:before {\n content: \"\"; }\n\n.ion-android-radio-button-on:before {\n content: \"\"; }\n\n.ion-android-refresh:before {\n content: \"\"; }\n\n.ion-android-remove:before {\n content: \"\"; }\n\n.ion-android-remove-circle:before {\n content: \"\"; }\n\n.ion-android-restaurant:before {\n content: \"\"; }\n\n.ion-android-sad:before {\n content: \"\"; }\n\n.ion-android-search:before {\n content: \"\"; }\n\n.ion-android-send:before {\n content: \"\"; }\n\n.ion-android-settings:before {\n content: \"\"; }\n\n.ion-android-share:before {\n content: \"\"; }\n\n.ion-android-share-alt:before {\n content: \"\"; }\n\n.ion-android-star:before {\n content: \"\"; }\n\n.ion-android-star-half:before {\n content: \"\"; }\n\n.ion-android-star-outline:before {\n content: \"\"; }\n\n.ion-android-stopwatch:before {\n content: \"\"; }\n\n.ion-android-subway:before {\n content: \"\"; }\n\n.ion-android-sunny:before {\n content: \"\"; }\n\n.ion-android-sync:before {\n content: \"\"; }\n\n.ion-android-textsms:before {\n content: \"\"; }\n\n.ion-android-time:before {\n content: \"\"; }\n\n.ion-android-train:before {\n content: \"\"; }\n\n.ion-android-unlock:before {\n content: \"\"; }\n\n.ion-android-upload:before {\n content: \"\"; }\n\n.ion-android-volume-down:before {\n content: \"\"; }\n\n.ion-android-volume-mute:before {\n content: \"\"; }\n\n.ion-android-volume-off:before {\n content: \"\"; }\n\n.ion-android-volume-up:before {\n content: \"\"; }\n\n.ion-android-walk:before {\n content: \"\"; }\n\n.ion-android-warning:before {\n content: \"\"; }\n\n.ion-android-watch:before {\n content: \"\"; }\n\n.ion-android-wifi:before {\n content: \"\"; }\n\n.ion-aperture:before {\n content: \"\"; }\n\n.ion-archive:before {\n content: \"\"; }\n\n.ion-arrow-down-a:before {\n content: \"\"; }\n\n.ion-arrow-down-b:before {\n content: \"\"; }\n\n.ion-arrow-down-c:before {\n content: \"\"; }\n\n.ion-arrow-expand:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-right:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-right:before {\n content: \"\"; }\n\n.ion-arrow-left-a:before {\n content: \"\"; }\n\n.ion-arrow-left-b:before {\n content: \"\"; }\n\n.ion-arrow-left-c:before {\n content: \"\"; }\n\n.ion-arrow-move:before {\n content: \"\"; }\n\n.ion-arrow-resize:before {\n content: \"\"; }\n\n.ion-arrow-return-left:before {\n content: \"\"; }\n\n.ion-arrow-return-right:before {\n content: \"\"; }\n\n.ion-arrow-right-a:before {\n content: \"\"; }\n\n.ion-arrow-right-b:before {\n content: \"\"; }\n\n.ion-arrow-right-c:before {\n content: \"\"; }\n\n.ion-arrow-shrink:before {\n content: \"\"; }\n\n.ion-arrow-swap:before {\n content: \"\"; }\n\n.ion-arrow-up-a:before {\n content: \"\"; }\n\n.ion-arrow-up-b:before {\n content: \"\"; }\n\n.ion-arrow-up-c:before {\n content: \"\"; }\n\n.ion-asterisk:before {\n content: \"\"; }\n\n.ion-at:before {\n content: \"\"; }\n\n.ion-backspace:before {\n content: \"\"; }\n\n.ion-backspace-outline:before {\n content: \"\"; }\n\n.ion-bag:before {\n content: \"\"; }\n\n.ion-battery-charging:before {\n content: \"\"; }\n\n.ion-battery-empty:before {\n content: \"\"; }\n\n.ion-battery-full:before {\n content: \"\"; }\n\n.ion-battery-half:before {\n content: \"\"; }\n\n.ion-battery-low:before {\n content: \"\"; }\n\n.ion-beaker:before {\n content: \"\"; }\n\n.ion-beer:before {\n content: \"\"; }\n\n.ion-bluetooth:before {\n content: \"\"; }\n\n.ion-bonfire:before {\n content: \"\"; }\n\n.ion-bookmark:before {\n content: \"\"; }\n\n.ion-bowtie:before {\n content: \"\"; }\n\n.ion-briefcase:before {\n content: \"\"; }\n\n.ion-bug:before {\n content: \"\"; }\n\n.ion-calculator:before {\n content: \"\"; }\n\n.ion-calendar:before {\n content: \"\"; }\n\n.ion-camera:before {\n content: \"\"; }\n\n.ion-card:before {\n content: \"\"; }\n\n.ion-cash:before {\n content: \"\"; }\n\n.ion-chatbox:before {\n content: \"\"; }\n\n.ion-chatbox-working:before {\n content: \"\"; }\n\n.ion-chatboxes:before {\n content: \"\"; }\n\n.ion-chatbubble:before {\n content: \"\"; }\n\n.ion-chatbubble-working:before {\n content: \"\"; }\n\n.ion-chatbubbles:before {\n content: \"\"; }\n\n.ion-checkmark:before {\n content: \"\"; }\n\n.ion-checkmark-circled:before {\n content: \"\"; }\n\n.ion-checkmark-round:before {\n content: \"\"; }\n\n.ion-chevron-down:before {\n content: \"\"; }\n\n.ion-chevron-left:before {\n content: \"\"; }\n\n.ion-chevron-right:before {\n content: \"\"; }\n\n.ion-chevron-up:before {\n content: \"\"; }\n\n.ion-clipboard:before {\n content: \"\"; }\n\n.ion-clock:before {\n content: \"\"; }\n\n.ion-close:before {\n content: \"\"; }\n\n.ion-close-circled:before {\n content: \"\"; }\n\n.ion-close-round:before {\n content: \"\"; }\n\n.ion-closed-captioning:before {\n content: \"\"; }\n\n.ion-cloud:before {\n content: \"\"; }\n\n.ion-code:before {\n content: \"\"; }\n\n.ion-code-download:before {\n content: \"\"; }\n\n.ion-code-working:before {\n content: \"\"; }\n\n.ion-coffee:before {\n content: \"\"; }\n\n.ion-compass:before {\n content: \"\"; }\n\n.ion-compose:before {\n content: \"\"; }\n\n.ion-connection-bars:before {\n content: \"\"; }\n\n.ion-contrast:before {\n content: \"\"; }\n\n.ion-crop:before {\n content: \"\"; }\n\n.ion-cube:before {\n content: \"\"; }\n\n.ion-disc:before {\n content: \"\"; }\n\n.ion-document:before {\n content: \"\"; }\n\n.ion-document-text:before {\n content: \"\"; }\n\n.ion-drag:before {\n content: \"\"; }\n\n.ion-earth:before {\n content: \"\"; }\n\n.ion-easel:before {\n content: \"\"; }\n\n.ion-edit:before {\n content: \"\"; }\n\n.ion-egg:before {\n content: \"\"; }\n\n.ion-eject:before {\n content: \"\"; }\n\n.ion-email:before {\n content: \"\"; }\n\n.ion-email-unread:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask-bubbles:before {\n content: \"\"; }\n\n.ion-eye:before {\n content: \"\"; }\n\n.ion-eye-disabled:before {\n content: \"\"; }\n\n.ion-female:before {\n content: \"\"; }\n\n.ion-filing:before {\n content: \"\"; }\n\n.ion-film-marker:before {\n content: \"\"; }\n\n.ion-fireball:before {\n content: \"\"; }\n\n.ion-flag:before {\n content: \"\"; }\n\n.ion-flame:before {\n content: \"\"; }\n\n.ion-flash:before {\n content: \"\"; }\n\n.ion-flash-off:before {\n content: \"\"; }\n\n.ion-folder:before {\n content: \"\"; }\n\n.ion-fork:before {\n content: \"\"; }\n\n.ion-fork-repo:before {\n content: \"\"; }\n\n.ion-forward:before {\n content: \"\"; }\n\n.ion-funnel:before {\n content: \"\"; }\n\n.ion-gear-a:before {\n content: \"\"; }\n\n.ion-gear-b:before {\n content: \"\"; }\n\n.ion-grid:before {\n content: \"\"; }\n\n.ion-hammer:before {\n content: \"\"; }\n\n.ion-happy:before {\n content: \"\"; }\n\n.ion-happy-outline:before {\n content: \"\"; }\n\n.ion-headphone:before {\n content: \"\"; }\n\n.ion-heart:before {\n content: \"\"; }\n\n.ion-heart-broken:before {\n content: \"\"; }\n\n.ion-help:before {\n content: \"\"; }\n\n.ion-help-buoy:before {\n content: \"\"; }\n\n.ion-help-circled:before {\n content: \"\"; }\n\n.ion-home:before {\n content: \"\"; }\n\n.ion-icecream:before {\n content: \"\"; }\n\n.ion-image:before {\n content: \"\"; }\n\n.ion-images:before {\n content: \"\"; }\n\n.ion-information:before {\n content: \"\"; }\n\n.ion-information-circled:before {\n content: \"\"; }\n\n.ion-ionic:before {\n content: \"\"; }\n\n.ion-ios-alarm:before {\n content: \"\"; }\n\n.ion-ios-alarm-outline:before {\n content: \"\"; }\n\n.ion-ios-albums:before {\n content: \"\"; }\n\n.ion-ios-albums-outline:before {\n content: \"\"; }\n\n.ion-ios-americanfootball:before {\n content: \"\"; }\n\n.ion-ios-americanfootball-outline:before {\n content: \"\"; }\n\n.ion-ios-analytics:before {\n content: \"\"; }\n\n.ion-ios-analytics-outline:before {\n content: \"\"; }\n\n.ion-ios-arrow-back:before {\n content: \"\"; }\n\n.ion-ios-arrow-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-forward:before {\n content: \"\"; }\n\n.ion-ios-arrow-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-up:before {\n content: \"\"; }\n\n.ion-ios-arrow-up:before {\n content: \"\"; }\n\n.ion-ios-at:before {\n content: \"\"; }\n\n.ion-ios-at-outline:before {\n content: \"\"; }\n\n.ion-ios-barcode:before {\n content: \"\"; }\n\n.ion-ios-barcode-outline:before {\n content: \"\"; }\n\n.ion-ios-baseball:before {\n content: \"\"; }\n\n.ion-ios-baseball-outline:before {\n content: \"\"; }\n\n.ion-ios-basketball:before {\n content: \"\"; }\n\n.ion-ios-basketball-outline:before {\n content: \"\"; }\n\n.ion-ios-bell:before {\n content: \"\"; }\n\n.ion-ios-bell-outline:before {\n content: \"\"; }\n\n.ion-ios-body:before {\n content: \"\"; }\n\n.ion-ios-body-outline:before {\n content: \"\"; }\n\n.ion-ios-bolt:before {\n content: \"\"; }\n\n.ion-ios-bolt-outline:before {\n content: \"\"; }\n\n.ion-ios-book:before {\n content: \"\"; }\n\n.ion-ios-book-outline:before {\n content: \"\"; }\n\n.ion-ios-bookmarks:before {\n content: \"\"; }\n\n.ion-ios-bookmarks-outline:before {\n content: \"\"; }\n\n.ion-ios-box:before {\n content: \"\"; }\n\n.ion-ios-box-outline:before {\n content: \"\"; }\n\n.ion-ios-briefcase:before {\n content: \"\"; }\n\n.ion-ios-briefcase-outline:before {\n content: \"\"; }\n\n.ion-ios-browsers:before {\n content: \"\"; }\n\n.ion-ios-browsers-outline:before {\n content: \"\"; }\n\n.ion-ios-calculator:before {\n content: \"\"; }\n\n.ion-ios-calculator-outline:before {\n content: \"\"; }\n\n.ion-ios-calendar:before {\n content: \"\"; }\n\n.ion-ios-calendar-outline:before {\n content: \"\"; }\n\n.ion-ios-camera:before {\n content: \"\"; }\n\n.ion-ios-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-cart:before {\n content: \"\"; }\n\n.ion-ios-cart-outline:before {\n content: \"\"; }\n\n.ion-ios-chatboxes:before {\n content: \"\"; }\n\n.ion-ios-chatboxes-outline:before {\n content: \"\"; }\n\n.ion-ios-chatbubble:before {\n content: \"\"; }\n\n.ion-ios-chatbubble-outline:before {\n content: \"\"; }\n\n.ion-ios-checkmark:before {\n content: \"\"; }\n\n.ion-ios-checkmark-empty:before {\n content: \"\"; }\n\n.ion-ios-checkmark-outline:before {\n content: \"\"; }\n\n.ion-ios-circle-filled:before {\n content: \"\"; }\n\n.ion-ios-circle-outline:before {\n content: \"\"; }\n\n.ion-ios-clock:before {\n content: \"\"; }\n\n.ion-ios-clock-outline:before {\n content: \"\"; }\n\n.ion-ios-close:before {\n content: \"\"; }\n\n.ion-ios-close-empty:before {\n content: \"\"; }\n\n.ion-ios-close-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud:before {\n content: \"\"; }\n\n.ion-ios-cloud-download:before {\n content: \"\"; }\n\n.ion-ios-cloud-download-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy-outline:before {\n content: \"\"; }\n\n.ion-ios-cog:before {\n content: \"\"; }\n\n.ion-ios-cog-outline:before {\n content: \"\"; }\n\n.ion-ios-color-filter:before {\n content: \"\"; }\n\n.ion-ios-color-filter-outline:before {\n content: \"\"; }\n\n.ion-ios-color-wand:before {\n content: \"\"; }\n\n.ion-ios-color-wand-outline:before {\n content: \"\"; }\n\n.ion-ios-compose:before {\n content: \"\"; }\n\n.ion-ios-compose-outline:before {\n content: \"\"; }\n\n.ion-ios-contact:before {\n content: \"\"; }\n\n.ion-ios-contact-outline:before {\n content: \"\"; }\n\n.ion-ios-copy:before {\n content: \"\"; }\n\n.ion-ios-copy-outline:before {\n content: \"\"; }\n\n.ion-ios-crop:before {\n content: \"\"; }\n\n.ion-ios-crop-strong:before {\n content: \"\"; }\n\n.ion-ios-download:before {\n content: \"\"; }\n\n.ion-ios-download-outline:before {\n content: \"\"; }\n\n.ion-ios-drag:before {\n content: \"\"; }\n\n.ion-ios-email:before {\n content: \"\"; }\n\n.ion-ios-email-outline:before {\n content: \"\"; }\n\n.ion-ios-eye:before {\n content: \"\"; }\n\n.ion-ios-eye-outline:before {\n content: \"\"; }\n\n.ion-ios-fastforward:before {\n content: \"\"; }\n\n.ion-ios-fastforward-outline:before {\n content: \"\"; }\n\n.ion-ios-filing:before {\n content: \"\"; }\n\n.ion-ios-filing-outline:before {\n content: \"\"; }\n\n.ion-ios-film:before {\n content: \"\"; }\n\n.ion-ios-film-outline:before {\n content: \"\"; }\n\n.ion-ios-flag:before {\n content: \"\"; }\n\n.ion-ios-flag-outline:before {\n content: \"\"; }\n\n.ion-ios-flame:before {\n content: \"\"; }\n\n.ion-ios-flame-outline:before {\n content: \"\"; }\n\n.ion-ios-flask:before {\n content: \"\"; }\n\n.ion-ios-flask-outline:before {\n content: \"\"; }\n\n.ion-ios-flower:before {\n content: \"\"; }\n\n.ion-ios-flower-outline:before {\n content: \"\"; }\n\n.ion-ios-folder:before {\n content: \"\"; }\n\n.ion-ios-folder-outline:before {\n content: \"\"; }\n\n.ion-ios-football:before {\n content: \"\"; }\n\n.ion-ios-football-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b-outline:before {\n content: \"\"; }\n\n.ion-ios-gear:before {\n content: \"\"; }\n\n.ion-ios-gear-outline:before {\n content: \"\"; }\n\n.ion-ios-glasses:before {\n content: \"\"; }\n\n.ion-ios-glasses-outline:before {\n content: \"\"; }\n\n.ion-ios-grid-view:before {\n content: \"\"; }\n\n.ion-ios-grid-view-outline:before {\n content: \"\"; }\n\n.ion-ios-heart:before {\n content: \"\"; }\n\n.ion-ios-heart-outline:before {\n content: \"\"; }\n\n.ion-ios-help:before {\n content: \"\"; }\n\n.ion-ios-help-empty:before {\n content: \"\"; }\n\n.ion-ios-help-outline:before {\n content: \"\"; }\n\n.ion-ios-home:before {\n content: \"\"; }\n\n.ion-ios-home-outline:before {\n content: \"\"; }\n\n.ion-ios-infinite:before {\n content: \"\"; }\n\n.ion-ios-infinite-outline:before {\n content: \"\"; }\n\n.ion-ios-information:before {\n content: \"\"; }\n\n.ion-ios-information-empty:before {\n content: \"\"; }\n\n.ion-ios-information-outline:before {\n content: \"\"; }\n\n.ion-ios-ionic-outline:before {\n content: \"\"; }\n\n.ion-ios-keypad:before {\n content: \"\"; }\n\n.ion-ios-keypad-outline:before {\n content: \"\"; }\n\n.ion-ios-lightbulb:before {\n content: \"\"; }\n\n.ion-ios-lightbulb-outline:before {\n content: \"\"; }\n\n.ion-ios-list:before {\n content: \"\"; }\n\n.ion-ios-list-outline:before {\n content: \"\"; }\n\n.ion-ios-location:before {\n content: \"\"; }\n\n.ion-ios-location-outline:before {\n content: \"\"; }\n\n.ion-ios-locked:before {\n content: \"\"; }\n\n.ion-ios-locked-outline:before {\n content: \"\"; }\n\n.ion-ios-loop:before {\n content: \"\"; }\n\n.ion-ios-loop-strong:before {\n content: \"\"; }\n\n.ion-ios-medical:before {\n content: \"\"; }\n\n.ion-ios-medical-outline:before {\n content: \"\"; }\n\n.ion-ios-medkit:before {\n content: \"\"; }\n\n.ion-ios-medkit-outline:before {\n content: \"\"; }\n\n.ion-ios-mic:before {\n content: \"\"; }\n\n.ion-ios-mic-off:before {\n content: \"\"; }\n\n.ion-ios-mic-outline:before {\n content: \"\"; }\n\n.ion-ios-minus:before {\n content: \"\"; }\n\n.ion-ios-minus-empty:before {\n content: \"\"; }\n\n.ion-ios-minus-outline:before {\n content: \"\"; }\n\n.ion-ios-monitor:before {\n content: \"\"; }\n\n.ion-ios-monitor-outline:before {\n content: \"\"; }\n\n.ion-ios-moon:before {\n content: \"\"; }\n\n.ion-ios-moon-outline:before {\n content: \"\"; }\n\n.ion-ios-more:before {\n content: \"\"; }\n\n.ion-ios-more-outline:before {\n content: \"\"; }\n\n.ion-ios-musical-note:before {\n content: \"\"; }\n\n.ion-ios-musical-notes:before {\n content: \"\"; }\n\n.ion-ios-navigate:before {\n content: \"\"; }\n\n.ion-ios-navigate-outline:before {\n content: \"\"; }\n\n.ion-ios-nutrition:before {\n content: \"\"; }\n\n.ion-ios-nutrition-outline:before {\n content: \"\"; }\n\n.ion-ios-paper:before {\n content: \"\"; }\n\n.ion-ios-paper-outline:before {\n content: \"\"; }\n\n.ion-ios-paperplane:before {\n content: \"\"; }\n\n.ion-ios-paperplane-outline:before {\n content: \"\"; }\n\n.ion-ios-partlysunny:before {\n content: \"\"; }\n\n.ion-ios-partlysunny-outline:before {\n content: \"\"; }\n\n.ion-ios-pause:before {\n content: \"\"; }\n\n.ion-ios-pause-outline:before {\n content: \"\"; }\n\n.ion-ios-paw:before {\n content: \"\"; }\n\n.ion-ios-paw-outline:before {\n content: \"\"; }\n\n.ion-ios-people:before {\n content: \"\"; }\n\n.ion-ios-people-outline:before {\n content: \"\"; }\n\n.ion-ios-person:before {\n content: \"\"; }\n\n.ion-ios-person-outline:before {\n content: \"\"; }\n\n.ion-ios-personadd:before {\n content: \"\"; }\n\n.ion-ios-personadd-outline:before {\n content: \"\"; }\n\n.ion-ios-photos:before {\n content: \"\"; }\n\n.ion-ios-photos-outline:before {\n content: \"\"; }\n\n.ion-ios-pie:before {\n content: \"\"; }\n\n.ion-ios-pie-outline:before {\n content: \"\"; }\n\n.ion-ios-pint:before {\n content: \"\"; }\n\n.ion-ios-pint-outline:before {\n content: \"\"; }\n\n.ion-ios-play:before {\n content: \"\"; }\n\n.ion-ios-play-outline:before {\n content: \"\"; }\n\n.ion-ios-plus:before {\n content: \"\"; }\n\n.ion-ios-plus-empty:before {\n content: \"\"; }\n\n.ion-ios-plus-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetag:before {\n content: \"\"; }\n\n.ion-ios-pricetag-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetags:before {\n content: \"\"; }\n\n.ion-ios-pricetags-outline:before {\n content: \"\"; }\n\n.ion-ios-printer:before {\n content: \"\"; }\n\n.ion-ios-printer-outline:before {\n content: \"\"; }\n\n.ion-ios-pulse:before {\n content: \"\"; }\n\n.ion-ios-pulse-strong:before {\n content: \"\"; }\n\n.ion-ios-rainy:before {\n content: \"\"; }\n\n.ion-ios-rainy-outline:before {\n content: \"\"; }\n\n.ion-ios-recording:before {\n content: \"\"; }\n\n.ion-ios-recording-outline:before {\n content: \"\"; }\n\n.ion-ios-redo:before {\n content: \"\"; }\n\n.ion-ios-redo-outline:before {\n content: \"\"; }\n\n.ion-ios-refresh:before {\n content: \"\"; }\n\n.ion-ios-refresh-empty:before {\n content: \"\"; }\n\n.ion-ios-refresh-outline:before {\n content: \"\"; }\n\n.ion-ios-reload:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-rewind:before {\n content: \"\"; }\n\n.ion-ios-rewind-outline:before {\n content: \"\"; }\n\n.ion-ios-rose:before {\n content: \"\"; }\n\n.ion-ios-rose-outline:before {\n content: \"\"; }\n\n.ion-ios-search:before {\n content: \"\"; }\n\n.ion-ios-search-strong:before {\n content: \"\"; }\n\n.ion-ios-settings:before {\n content: \"\"; }\n\n.ion-ios-settings-strong:before {\n content: \"\"; }\n\n.ion-ios-shuffle:before {\n content: \"\"; }\n\n.ion-ios-shuffle-strong:before {\n content: \"\"; }\n\n.ion-ios-skipbackward:before {\n content: \"\"; }\n\n.ion-ios-skipbackward-outline:before {\n content: \"\"; }\n\n.ion-ios-skipforward:before {\n content: \"\"; }\n\n.ion-ios-skipforward-outline:before {\n content: \"\"; }\n\n.ion-ios-snowy:before {\n content: \"\"; }\n\n.ion-ios-speedometer:before {\n content: \"\"; }\n\n.ion-ios-speedometer-outline:before {\n content: \"\"; }\n\n.ion-ios-star:before {\n content: \"\"; }\n\n.ion-ios-star-half:before {\n content: \"\"; }\n\n.ion-ios-star-outline:before {\n content: \"\"; }\n\n.ion-ios-stopwatch:before {\n content: \"\"; }\n\n.ion-ios-stopwatch-outline:before {\n content: \"\"; }\n\n.ion-ios-sunny:before {\n content: \"\"; }\n\n.ion-ios-sunny-outline:before {\n content: \"\"; }\n\n.ion-ios-telephone:before {\n content: \"\"; }\n\n.ion-ios-telephone-outline:before {\n content: \"\"; }\n\n.ion-ios-tennisball:before {\n content: \"\"; }\n\n.ion-ios-tennisball-outline:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm-outline:before {\n content: \"\"; }\n\n.ion-ios-time:before {\n content: \"\"; }\n\n.ion-ios-time-outline:before {\n content: \"\"; }\n\n.ion-ios-timer:before {\n content: \"\"; }\n\n.ion-ios-timer-outline:before {\n content: \"\"; }\n\n.ion-ios-toggle:before {\n content: \"\"; }\n\n.ion-ios-toggle-outline:before {\n content: \"\"; }\n\n.ion-ios-trash:before {\n content: \"\"; }\n\n.ion-ios-trash-outline:before {\n content: \"\"; }\n\n.ion-ios-undo:before {\n content: \"\"; }\n\n.ion-ios-undo-outline:before {\n content: \"\"; }\n\n.ion-ios-unlocked:before {\n content: \"\"; }\n\n.ion-ios-unlocked-outline:before {\n content: \"\"; }\n\n.ion-ios-upload:before {\n content: \"\"; }\n\n.ion-ios-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-videocam:before {\n content: \"\"; }\n\n.ion-ios-videocam-outline:before {\n content: \"\"; }\n\n.ion-ios-volume-high:before {\n content: \"\"; }\n\n.ion-ios-volume-low:before {\n content: \"\"; }\n\n.ion-ios-wineglass:before {\n content: \"\"; }\n\n.ion-ios-wineglass-outline:before {\n content: \"\"; }\n\n.ion-ios-world:before {\n content: \"\"; }\n\n.ion-ios-world-outline:before {\n content: \"\"; }\n\n.ion-ipad:before {\n content: \"\"; }\n\n.ion-iphone:before {\n content: \"\"; }\n\n.ion-ipod:before {\n content: \"\"; }\n\n.ion-jet:before {\n content: \"\"; }\n\n.ion-key:before {\n content: \"\"; }\n\n.ion-knife:before {\n content: \"\"; }\n\n.ion-laptop:before {\n content: \"\"; }\n\n.ion-leaf:before {\n content: \"\"; }\n\n.ion-levels:before {\n content: \"\"; }\n\n.ion-lightbulb:before {\n content: \"\"; }\n\n.ion-link:before {\n content: \"\"; }\n\n.ion-load-a:before {\n content: \"\"; }\n\n.ion-load-b:before {\n content: \"\"; }\n\n.ion-load-c:before {\n content: \"\"; }\n\n.ion-load-d:before {\n content: \"\"; }\n\n.ion-location:before {\n content: \"\"; }\n\n.ion-lock-combination:before {\n content: \"\"; }\n\n.ion-locked:before {\n content: \"\"; }\n\n.ion-log-in:before {\n content: \"\"; }\n\n.ion-log-out:before {\n content: \"\"; }\n\n.ion-loop:before {\n content: \"\"; }\n\n.ion-magnet:before {\n content: \"\"; }\n\n.ion-male:before {\n content: \"\"; }\n\n.ion-man:before {\n content: \"\"; }\n\n.ion-map:before {\n content: \"\"; }\n\n.ion-medkit:before {\n content: \"\"; }\n\n.ion-merge:before {\n content: \"\"; }\n\n.ion-mic-a:before {\n content: \"\"; }\n\n.ion-mic-b:before {\n content: \"\"; }\n\n.ion-mic-c:before {\n content: \"\"; }\n\n.ion-minus:before {\n content: \"\"; }\n\n.ion-minus-circled:before {\n content: \"\"; }\n\n.ion-minus-round:before {\n content: \"\"; }\n\n.ion-model-s:before {\n content: \"\"; }\n\n.ion-monitor:before {\n content: \"\"; }\n\n.ion-more:before {\n content: \"\"; }\n\n.ion-mouse:before {\n content: \"\"; }\n\n.ion-music-note:before {\n content: \"\"; }\n\n.ion-navicon:before {\n content: \"\"; }\n\n.ion-navicon-round:before {\n content: \"\"; }\n\n.ion-navigate:before {\n content: \"\"; }\n\n.ion-network:before {\n content: \"\"; }\n\n.ion-no-smoking:before {\n content: \"\"; }\n\n.ion-nuclear:before {\n content: \"\"; }\n\n.ion-outlet:before {\n content: \"\"; }\n\n.ion-paintbrush:before {\n content: \"\"; }\n\n.ion-paintbucket:before {\n content: \"\"; }\n\n.ion-paper-airplane:before {\n content: \"\"; }\n\n.ion-paperclip:before {\n content: \"\"; }\n\n.ion-pause:before {\n content: \"\"; }\n\n.ion-person:before {\n content: \"\"; }\n\n.ion-person-add:before {\n content: \"\"; }\n\n.ion-person-stalker:before {\n content: \"\"; }\n\n.ion-pie-graph:before {\n content: \"\"; }\n\n.ion-pin:before {\n content: \"\"; }\n\n.ion-pinpoint:before {\n content: \"\"; }\n\n.ion-pizza:before {\n content: \"\"; }\n\n.ion-plane:before {\n content: \"\"; }\n\n.ion-planet:before {\n content: \"\"; }\n\n.ion-play:before {\n content: \"\"; }\n\n.ion-playstation:before {\n content: \"\"; }\n\n.ion-plus:before {\n content: \"\"; }\n\n.ion-plus-circled:before {\n content: \"\"; }\n\n.ion-plus-round:before {\n content: \"\"; }\n\n.ion-podium:before {\n content: \"\"; }\n\n.ion-pound:before {\n content: \"\"; }\n\n.ion-power:before {\n content: \"\"; }\n\n.ion-pricetag:before {\n content: \"\"; }\n\n.ion-pricetags:before {\n content: \"\"; }\n\n.ion-printer:before {\n content: \"\"; }\n\n.ion-pull-request:before {\n content: \"\"; }\n\n.ion-qr-scanner:before {\n content: \"\"; }\n\n.ion-quote:before {\n content: \"\"; }\n\n.ion-radio-waves:before {\n content: \"\"; }\n\n.ion-record:before {\n content: \"\"; }\n\n.ion-refresh:before {\n content: \"\"; }\n\n.ion-reply:before {\n content: \"\"; }\n\n.ion-reply-all:before {\n content: \"\"; }\n\n.ion-ribbon-a:before {\n content: \"\"; }\n\n.ion-ribbon-b:before {\n content: \"\"; }\n\n.ion-sad:before {\n content: \"\"; }\n\n.ion-sad-outline:before {\n content: \"\"; }\n\n.ion-scissors:before {\n content: \"\"; }\n\n.ion-search:before {\n content: \"\"; }\n\n.ion-settings:before {\n content: \"\"; }\n\n.ion-share:before {\n content: \"\"; }\n\n.ion-shuffle:before {\n content: \"\"; }\n\n.ion-skip-backward:before {\n content: \"\"; }\n\n.ion-skip-forward:before {\n content: \"\"; }\n\n.ion-social-android:before {\n content: \"\"; }\n\n.ion-social-android-outline:before {\n content: \"\"; }\n\n.ion-social-angular:before {\n content: \"\"; }\n\n.ion-social-angular-outline:before {\n content: \"\"; }\n\n.ion-social-apple:before {\n content: \"\"; }\n\n.ion-social-apple-outline:before {\n content: \"\"; }\n\n.ion-social-bitcoin:before {\n content: \"\"; }\n\n.ion-social-bitcoin-outline:before {\n content: \"\"; }\n\n.ion-social-buffer:before {\n content: \"\"; }\n\n.ion-social-buffer-outline:before {\n content: \"\"; }\n\n.ion-social-chrome:before {\n content: \"\"; }\n\n.ion-social-chrome-outline:before {\n content: \"\"; }\n\n.ion-social-codepen:before {\n content: \"\"; }\n\n.ion-social-codepen-outline:before {\n content: \"\"; }\n\n.ion-social-css3:before {\n content: \"\"; }\n\n.ion-social-css3-outline:before {\n content: \"\"; }\n\n.ion-social-designernews:before {\n content: \"\"; }\n\n.ion-social-designernews-outline:before {\n content: \"\"; }\n\n.ion-social-dribbble:before {\n content: \"\"; }\n\n.ion-social-dribbble-outline:before {\n content: \"\"; }\n\n.ion-social-dropbox:before {\n content: \"\"; }\n\n.ion-social-dropbox-outline:before {\n content: \"\"; }\n\n.ion-social-euro:before {\n content: \"\"; }\n\n.ion-social-euro-outline:before {\n content: \"\"; }\n\n.ion-social-facebook:before {\n content: \"\"; }\n\n.ion-social-facebook-outline:before {\n content: \"\"; }\n\n.ion-social-foursquare:before {\n content: \"\"; }\n\n.ion-social-foursquare-outline:before {\n content: \"\"; }\n\n.ion-social-freebsd-devil:before {\n content: \"\"; }\n\n.ion-social-github:before {\n content: \"\"; }\n\n.ion-social-github-outline:before {\n content: \"\"; }\n\n.ion-social-google:before {\n content: \"\"; }\n\n.ion-social-google-outline:before {\n content: \"\"; }\n\n.ion-social-googleplus:before {\n content: \"\"; }\n\n.ion-social-googleplus-outline:before {\n content: \"\"; }\n\n.ion-social-hackernews:before {\n content: \"\"; }\n\n.ion-social-hackernews-outline:before {\n content: \"\"; }\n\n.ion-social-html5:before {\n content: \"\"; }\n\n.ion-social-html5-outline:before {\n content: \"\"; }\n\n.ion-social-instagram:before {\n content: \"\"; }\n\n.ion-social-instagram-outline:before {\n content: \"\"; }\n\n.ion-social-javascript:before {\n content: \"\"; }\n\n.ion-social-javascript-outline:before {\n content: \"\"; }\n\n.ion-social-linkedin:before {\n content: \"\"; }\n\n.ion-social-linkedin-outline:before {\n content: \"\"; }\n\n.ion-social-markdown:before {\n content: \"\"; }\n\n.ion-social-nodejs:before {\n content: \"\"; }\n\n.ion-social-octocat:before {\n content: \"\"; }\n\n.ion-social-pinterest:before {\n content: \"\"; }\n\n.ion-social-pinterest-outline:before {\n content: \"\"; }\n\n.ion-social-python:before {\n content: \"\"; }\n\n.ion-social-reddit:before {\n content: \"\"; }\n\n.ion-social-reddit-outline:before {\n content: \"\"; }\n\n.ion-social-rss:before {\n content: \"\"; }\n\n.ion-social-rss-outline:before {\n content: \"\"; }\n\n.ion-social-sass:before {\n content: \"\"; }\n\n.ion-social-skype:before {\n content: \"\"; }\n\n.ion-social-skype-outline:before {\n content: \"\"; }\n\n.ion-social-snapchat:before {\n content: \"\"; }\n\n.ion-social-snapchat-outline:before {\n content: \"\"; }\n\n.ion-social-tumblr:before {\n content: \"\"; }\n\n.ion-social-tumblr-outline:before {\n content: \"\"; }\n\n.ion-social-tux:before {\n content: \"\"; }\n\n.ion-social-twitch:before {\n content: \"\"; }\n\n.ion-social-twitch-outline:before {\n content: \"\"; }\n\n.ion-social-twitter:before {\n content: \"\"; }\n\n.ion-social-twitter-outline:before {\n content: \"\"; }\n\n.ion-social-usd:before {\n content: \"\"; }\n\n.ion-social-usd-outline:before {\n content: \"\"; }\n\n.ion-social-vimeo:before {\n content: \"\"; }\n\n.ion-social-vimeo-outline:before {\n content: \"\"; }\n\n.ion-social-whatsapp:before {\n content: \"\"; }\n\n.ion-social-whatsapp-outline:before {\n content: \"\"; }\n\n.ion-social-windows:before {\n content: \"\"; }\n\n.ion-social-windows-outline:before {\n content: \"\"; }\n\n.ion-social-wordpress:before {\n content: \"\"; }\n\n.ion-social-wordpress-outline:before {\n content: \"\"; }\n\n.ion-social-yahoo:before {\n content: \"\"; }\n\n.ion-social-yahoo-outline:before {\n content: \"\"; }\n\n.ion-social-yen:before {\n content: \"\"; }\n\n.ion-social-yen-outline:before {\n content: \"\"; }\n\n.ion-social-youtube:before {\n content: \"\"; }\n\n.ion-social-youtube-outline:before {\n content: \"\"; }\n\n.ion-soup-can:before {\n content: \"\"; }\n\n.ion-soup-can-outline:before {\n content: \"\"; }\n\n.ion-speakerphone:before {\n content: \"\"; }\n\n.ion-speedometer:before {\n content: \"\"; }\n\n.ion-spoon:before {\n content: \"\"; }\n\n.ion-star:before {\n content: \"\"; }\n\n.ion-stats-bars:before {\n content: \"\"; }\n\n.ion-steam:before {\n content: \"\"; }\n\n.ion-stop:before {\n content: \"\"; }\n\n.ion-thermometer:before {\n content: \"\"; }\n\n.ion-thumbsdown:before {\n content: \"\"; }\n\n.ion-thumbsup:before {\n content: \"\"; }\n\n.ion-toggle:before {\n content: \"\"; }\n\n.ion-toggle-filled:before {\n content: \"\"; }\n\n.ion-transgender:before {\n content: \"\"; }\n\n.ion-trash-a:before {\n content: \"\"; }\n\n.ion-trash-b:before {\n content: \"\"; }\n\n.ion-trophy:before {\n content: \"\"; }\n\n.ion-tshirt:before {\n content: \"\"; }\n\n.ion-tshirt-outline:before {\n content: \"\"; }\n\n.ion-umbrella:before {\n content: \"\"; }\n\n.ion-university:before {\n content: \"\"; }\n\n.ion-unlocked:before {\n content: \"\"; }\n\n.ion-upload:before {\n content: \"\"; }\n\n.ion-usb:before {\n content: \"\"; }\n\n.ion-videocamera:before {\n content: \"\"; }\n\n.ion-volume-high:before {\n content: \"\"; }\n\n.ion-volume-low:before {\n content: \"\"; }\n\n.ion-volume-medium:before {\n content: \"\"; }\n\n.ion-volume-mute:before {\n content: \"\"; }\n\n.ion-wand:before {\n content: \"\"; }\n\n.ion-waterdrop:before {\n content: \"\"; }\n\n.ion-wifi:before {\n content: \"\"; }\n\n.ion-wineglass:before {\n content: \"\"; }\n\n.ion-woman:before {\n content: \"\"; }\n\n.ion-wrench:before {\n content: \"\"; }\n\n.ion-xbox:before {\n content: \"\"; }\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline; }\n\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n[hidden],\ntemplate {\n display: none; }\n\na {\n background-color: transparent; }\n\na:active,\na:hover {\n outline: 0; }\n\nabbr[title] {\n border-bottom: 1px dotted; }\n\nb,\nstrong {\n font-weight: bold; }\n\ndfn {\n font-style: italic; }\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nmark {\n background: #ff0;\n color: #000; }\n\nsmall {\n font-size: 80%; }\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\nimg {\n border: 0; }\n\nsvg:not(:root) {\n overflow: hidden; }\n\nfigure {\n margin: 1em 40px; }\n\nhr {\n box-sizing: content-box;\n height: 0; }\n\npre {\n overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0; }\n\nbutton {\n overflow: visible; }\n\nbutton,\nselect {\n text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput {\n line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n border: 0;\n padding: 0; }\n\ntextarea {\n overflow: auto; }\n\noptgroup {\n font-weight: bold; }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\"; }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; }\n .navbar {\n display: none; }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important; }\n .label {\n border: 1px solid #000; }\n .table {\n border-collapse: collapse !important; }\n .table td,\n .table th {\n background-color: #fff !important; }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important; } }\n\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: transparent; }\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.428571429;\n color: #333333;\n background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\na {\n color: #67808c;\n text-decoration: none; }\n a:hover, a:focus {\n color: #465760;\n text-decoration: underline; }\n a:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\nfigure {\n margin: 0; }\n\nimg {\n vertical-align: middle; }\n\n.img-responsive {\n display: block;\n max-width: 100%;\n height: auto; }\n\n.img-rounded {\n border-radius: 4px; }\n\n.img-thumbnail {\n padding: 4px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto; }\n\n.img-circle {\n border-radius: 50%; }\n\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee; }\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto; }\n\n[role=\"button\"] {\n cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n h1 small,\n h1 .small, h2 small,\n h2 .small, h3 small,\n h3 .small, h4 small,\n h4 .small, h5 small,\n h5 .small, h6 small,\n h6 .small,\n .h1 small,\n .h1 .small, .h2 small,\n .h2 .small, .h3 small,\n .h3 .small, .h4 small,\n .h4 .small, .h5 small,\n .h5 .small, .h6 small,\n .h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: 20px;\n margin-bottom: 10px; }\n h1 small,\n h1 .small, .h1 small,\n .h1 .small,\n h2 small,\n h2 .small, .h2 small,\n .h2 .small,\n h3 small,\n h3 .small, .h3 small,\n .h3 .small {\n font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: 10px;\n margin-bottom: 10px; }\n h4 small,\n h4 .small, .h4 small,\n .h4 .small,\n h5 small,\n h5 .small, .h5 small,\n .h5 .small,\n h6 small,\n h6 .small, .h6 small,\n .h6 .small {\n font-size: 75%; }\n\nh1, .h1 {\n font-size: 36px; }\n\nh2, .h2 {\n font-size: 30px; }\n\nh3, .h3 {\n font-size: 24px; }\n\nh4, .h4 {\n font-size: 18px; }\n\nh5, .h5 {\n font-size: 14px; }\n\nh6, .h6 {\n font-size: 12px; }\n\np {\n margin: 0 0 10px; }\n\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4; }\n @media (min-width: 768px) {\n .lead {\n font-size: 21px; } }\n\nsmall,\n.small {\n font-size: 85%; }\n\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em; }\n\n.text-left {\n text-align: left; }\n\n.text-right {\n text-align: right; }\n\n.text-center {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n.text-nowrap {\n white-space: nowrap; }\n\n.text-lowercase {\n text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n text-transform: uppercase; }\n\n.text-capitalize {\n text-transform: capitalize; }\n\n.text-muted {\n color: #777777; }\n\n.text-primary {\n color: #67808c; }\n\na.text-primary:hover,\na.text-primary:focus {\n color: #51656f; }\n\n.text-success {\n color: #3c763d; }\n\na.text-success:hover,\na.text-success:focus {\n color: #2b542c; }\n\n.text-info {\n color: #31708f; }\n\na.text-info:hover,\na.text-info:focus {\n color: #245269; }\n\n.text-warning {\n color: #8a6d3b; }\n\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c; }\n\n.text-danger {\n color: #a94442; }\n\na.text-danger:hover,\na.text-danger:focus {\n color: #843534; }\n\n.bg-primary {\n color: #fff; }\n\n.bg-primary {\n background-color: #67808c; }\n\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #51656f; }\n\n.bg-success {\n background-color: #dff0d8; }\n\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3; }\n\n.bg-info {\n background-color: #d9edf7; }\n\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee; }\n\n.bg-warning {\n background-color: #fcf8e3; }\n\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5; }\n\n.bg-danger {\n background-color: #f2dede; }\n\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9; }\n\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px; }\n ul ul,\n ul ol,\n ol ul,\n ol ol {\n margin-bottom: 0; }\n\n.list-unstyled {\n padding-left: 0;\n list-style: none; }\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px; }\n .list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px; }\n\ndl {\n margin-top: 0;\n margin-bottom: 20px; }\n\ndt,\ndd {\n line-height: 1.428571429; }\n\ndt {\n font-weight: bold; }\n\ndd {\n margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n content: \" \";\n display: table; }\n\n.dl-horizontal dd:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .dl-horizontal dd {\n margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777; }\n\n.initialism {\n font-size: 90%; }\n\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee; }\n blockquote p:last-child,\n blockquote ul:last-child,\n blockquote ol:last-child {\n margin-bottom: 0; }\n blockquote footer,\n blockquote small,\n blockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.428571429;\n color: #777777; }\n blockquote footer:before,\n blockquote small:before,\n blockquote .small:before {\n content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right; }\n .blockquote-reverse footer:before,\n .blockquote-reverse small:before,\n .blockquote-reverse .small:before,\n blockquote.pull-right footer:before,\n blockquote.pull-right small:before,\n blockquote.pull-right .small:before {\n content: ''; }\n .blockquote-reverse footer:after,\n .blockquote-reverse small:after,\n .blockquote-reverse .small:after,\n blockquote.pull-right footer:after,\n blockquote.pull-right small:after,\n blockquote.pull-right .small:after {\n content: '\\00A0 \\2014'; }\n\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 3px; }\n\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 2px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n kbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none; }\n\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.428571429;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 3px; }\n pre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0; }\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll; }\n\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container:before, .container:after {\n content: \" \";\n display: table; }\n .container:after {\n clear: both; }\n @media (min-width: 768px) {\n .container {\n width: 750px; } }\n @media (min-width: 992px) {\n .container {\n width: 970px; } }\n @media (min-width: 1200px) {\n .container {\n width: 1170px; } }\n\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container-fluid:before, .container-fluid:after {\n content: \" \";\n display: table; }\n .container-fluid:after {\n clear: both; }\n\n.row {\n margin-left: -15px;\n margin-right: -15px; }\n .row:before, .row:after {\n content: \" \";\n display: table; }\n .row:after {\n clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left; }\n\n.col-xs-1 {\n width: 8.3333333333%; }\n\n.col-xs-2 {\n width: 16.6666666667%; }\n\n.col-xs-3 {\n width: 25%; }\n\n.col-xs-4 {\n width: 33.3333333333%; }\n\n.col-xs-5 {\n width: 41.6666666667%; }\n\n.col-xs-6 {\n width: 50%; }\n\n.col-xs-7 {\n width: 58.3333333333%; }\n\n.col-xs-8 {\n width: 66.6666666667%; }\n\n.col-xs-9 {\n width: 75%; }\n\n.col-xs-10 {\n width: 83.3333333333%; }\n\n.col-xs-11 {\n width: 91.6666666667%; }\n\n.col-xs-12 {\n width: 100%; }\n\n.col-xs-pull-0 {\n right: auto; }\n\n.col-xs-pull-1 {\n right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n right: 25%; }\n\n.col-xs-pull-4 {\n right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n right: 50%; }\n\n.col-xs-pull-7 {\n right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n right: 75%; }\n\n.col-xs-pull-10 {\n right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n right: 100%; }\n\n.col-xs-push-0 {\n left: auto; }\n\n.col-xs-push-1 {\n left: 8.3333333333%; }\n\n.col-xs-push-2 {\n left: 16.6666666667%; }\n\n.col-xs-push-3 {\n left: 25%; }\n\n.col-xs-push-4 {\n left: 33.3333333333%; }\n\n.col-xs-push-5 {\n left: 41.6666666667%; }\n\n.col-xs-push-6 {\n left: 50%; }\n\n.col-xs-push-7 {\n left: 58.3333333333%; }\n\n.col-xs-push-8 {\n left: 66.6666666667%; }\n\n.col-xs-push-9 {\n left: 75%; }\n\n.col-xs-push-10 {\n left: 83.3333333333%; }\n\n.col-xs-push-11 {\n left: 91.6666666667%; }\n\n.col-xs-push-12 {\n left: 100%; }\n\n.col-xs-offset-0 {\n margin-left: 0%; }\n\n.col-xs-offset-1 {\n margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n margin-left: 25%; }\n\n.col-xs-offset-4 {\n margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n margin-left: 50%; }\n\n.col-xs-offset-7 {\n margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n margin-left: 75%; }\n\n.col-xs-offset-10 {\n margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n margin-left: 100%; }\n\n@media (min-width: 768px) {\n .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 {\n float: left; }\n .col-sm-1 {\n width: 8.3333333333%; }\n .col-sm-2 {\n width: 16.6666666667%; }\n .col-sm-3 {\n width: 25%; }\n .col-sm-4 {\n width: 33.3333333333%; }\n .col-sm-5 {\n width: 41.6666666667%; }\n .col-sm-6 {\n width: 50%; }\n .col-sm-7 {\n width: 58.3333333333%; }\n .col-sm-8 {\n width: 66.6666666667%; }\n .col-sm-9 {\n width: 75%; }\n .col-sm-10 {\n width: 83.3333333333%; }\n .col-sm-11 {\n width: 91.6666666667%; }\n .col-sm-12 {\n width: 100%; }\n .col-sm-pull-0 {\n right: auto; }\n .col-sm-pull-1 {\n right: 8.3333333333%; }\n .col-sm-pull-2 {\n right: 16.6666666667%; }\n .col-sm-pull-3 {\n right: 25%; }\n .col-sm-pull-4 {\n right: 33.3333333333%; }\n .col-sm-pull-5 {\n right: 41.6666666667%; }\n .col-sm-pull-6 {\n right: 50%; }\n .col-sm-pull-7 {\n right: 58.3333333333%; }\n .col-sm-pull-8 {\n right: 66.6666666667%; }\n .col-sm-pull-9 {\n right: 75%; }\n .col-sm-pull-10 {\n right: 83.3333333333%; }\n .col-sm-pull-11 {\n right: 91.6666666667%; }\n .col-sm-pull-12 {\n right: 100%; }\n .col-sm-push-0 {\n left: auto; }\n .col-sm-push-1 {\n left: 8.3333333333%; }\n .col-sm-push-2 {\n left: 16.6666666667%; }\n .col-sm-push-3 {\n left: 25%; }\n .col-sm-push-4 {\n left: 33.3333333333%; }\n .col-sm-push-5 {\n left: 41.6666666667%; }\n .col-sm-push-6 {\n left: 50%; }\n .col-sm-push-7 {\n left: 58.3333333333%; }\n .col-sm-push-8 {\n left: 66.6666666667%; }\n .col-sm-push-9 {\n left: 75%; }\n .col-sm-push-10 {\n left: 83.3333333333%; }\n .col-sm-push-11 {\n left: 91.6666666667%; }\n .col-sm-push-12 {\n left: 100%; }\n .col-sm-offset-0 {\n margin-left: 0%; }\n .col-sm-offset-1 {\n margin-left: 8.3333333333%; }\n .col-sm-offset-2 {\n margin-left: 16.6666666667%; }\n .col-sm-offset-3 {\n margin-left: 25%; }\n .col-sm-offset-4 {\n margin-left: 33.3333333333%; }\n .col-sm-offset-5 {\n margin-left: 41.6666666667%; }\n .col-sm-offset-6 {\n margin-left: 50%; }\n .col-sm-offset-7 {\n margin-left: 58.3333333333%; }\n .col-sm-offset-8 {\n margin-left: 66.6666666667%; }\n .col-sm-offset-9 {\n margin-left: 75%; }\n .col-sm-offset-10 {\n margin-left: 83.3333333333%; }\n .col-sm-offset-11 {\n margin-left: 91.6666666667%; }\n .col-sm-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 992px) {\n .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 {\n float: left; }\n .col-md-1 {\n width: 8.3333333333%; }\n .col-md-2 {\n width: 16.6666666667%; }\n .col-md-3 {\n width: 25%; }\n .col-md-4 {\n width: 33.3333333333%; }\n .col-md-5 {\n width: 41.6666666667%; }\n .col-md-6 {\n width: 50%; }\n .col-md-7 {\n width: 58.3333333333%; }\n .col-md-8 {\n width: 66.6666666667%; }\n .col-md-9 {\n width: 75%; }\n .col-md-10 {\n width: 83.3333333333%; }\n .col-md-11 {\n width: 91.6666666667%; }\n .col-md-12 {\n width: 100%; }\n .col-md-pull-0 {\n right: auto; }\n .col-md-pull-1 {\n right: 8.3333333333%; }\n .col-md-pull-2 {\n right: 16.6666666667%; }\n .col-md-pull-3 {\n right: 25%; }\n .col-md-pull-4 {\n right: 33.3333333333%; }\n .col-md-pull-5 {\n right: 41.6666666667%; }\n .col-md-pull-6 {\n right: 50%; }\n .col-md-pull-7 {\n right: 58.3333333333%; }\n .col-md-pull-8 {\n right: 66.6666666667%; }\n .col-md-pull-9 {\n right: 75%; }\n .col-md-pull-10 {\n right: 83.3333333333%; }\n .col-md-pull-11 {\n right: 91.6666666667%; }\n .col-md-pull-12 {\n right: 100%; }\n .col-md-push-0 {\n left: auto; }\n .col-md-push-1 {\n left: 8.3333333333%; }\n .col-md-push-2 {\n left: 16.6666666667%; }\n .col-md-push-3 {\n left: 25%; }\n .col-md-push-4 {\n left: 33.3333333333%; }\n .col-md-push-5 {\n left: 41.6666666667%; }\n .col-md-push-6 {\n left: 50%; }\n .col-md-push-7 {\n left: 58.3333333333%; }\n .col-md-push-8 {\n left: 66.6666666667%; }\n .col-md-push-9 {\n left: 75%; }\n .col-md-push-10 {\n left: 83.3333333333%; }\n .col-md-push-11 {\n left: 91.6666666667%; }\n .col-md-push-12 {\n left: 100%; }\n .col-md-offset-0 {\n margin-left: 0%; }\n .col-md-offset-1 {\n margin-left: 8.3333333333%; }\n .col-md-offset-2 {\n margin-left: 16.6666666667%; }\n .col-md-offset-3 {\n margin-left: 25%; }\n .col-md-offset-4 {\n margin-left: 33.3333333333%; }\n .col-md-offset-5 {\n margin-left: 41.6666666667%; }\n .col-md-offset-6 {\n margin-left: 50%; }\n .col-md-offset-7 {\n margin-left: 58.3333333333%; }\n .col-md-offset-8 {\n margin-left: 66.6666666667%; }\n .col-md-offset-9 {\n margin-left: 75%; }\n .col-md-offset-10 {\n margin-left: 83.3333333333%; }\n .col-md-offset-11 {\n margin-left: 91.6666666667%; }\n .col-md-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 1200px) {\n .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 {\n float: left; }\n .col-lg-1 {\n width: 8.3333333333%; }\n .col-lg-2 {\n width: 16.6666666667%; }\n .col-lg-3 {\n width: 25%; }\n .col-lg-4 {\n width: 33.3333333333%; }\n .col-lg-5 {\n width: 41.6666666667%; }\n .col-lg-6 {\n width: 50%; }\n .col-lg-7 {\n width: 58.3333333333%; }\n .col-lg-8 {\n width: 66.6666666667%; }\n .col-lg-9 {\n width: 75%; }\n .col-lg-10 {\n width: 83.3333333333%; }\n .col-lg-11 {\n width: 91.6666666667%; }\n .col-lg-12 {\n width: 100%; }\n .col-lg-pull-0 {\n right: auto; }\n .col-lg-pull-1 {\n right: 8.3333333333%; }\n .col-lg-pull-2 {\n right: 16.6666666667%; }\n .col-lg-pull-3 {\n right: 25%; }\n .col-lg-pull-4 {\n right: 33.3333333333%; }\n .col-lg-pull-5 {\n right: 41.6666666667%; }\n .col-lg-pull-6 {\n right: 50%; }\n .col-lg-pull-7 {\n right: 58.3333333333%; }\n .col-lg-pull-8 {\n right: 66.6666666667%; }\n .col-lg-pull-9 {\n right: 75%; }\n .col-lg-pull-10 {\n right: 83.3333333333%; }\n .col-lg-pull-11 {\n right: 91.6666666667%; }\n .col-lg-pull-12 {\n right: 100%; }\n .col-lg-push-0 {\n left: auto; }\n .col-lg-push-1 {\n left: 8.3333333333%; }\n .col-lg-push-2 {\n left: 16.6666666667%; }\n .col-lg-push-3 {\n left: 25%; }\n .col-lg-push-4 {\n left: 33.3333333333%; }\n .col-lg-push-5 {\n left: 41.6666666667%; }\n .col-lg-push-6 {\n left: 50%; }\n .col-lg-push-7 {\n left: 58.3333333333%; }\n .col-lg-push-8 {\n left: 66.6666666667%; }\n .col-lg-push-9 {\n left: 75%; }\n .col-lg-push-10 {\n left: 83.3333333333%; }\n .col-lg-push-11 {\n left: 91.6666666667%; }\n .col-lg-push-12 {\n left: 100%; }\n .col-lg-offset-0 {\n margin-left: 0%; }\n .col-lg-offset-1 {\n margin-left: 8.3333333333%; }\n .col-lg-offset-2 {\n margin-left: 16.6666666667%; }\n .col-lg-offset-3 {\n margin-left: 25%; }\n .col-lg-offset-4 {\n margin-left: 33.3333333333%; }\n .col-lg-offset-5 {\n margin-left: 41.6666666667%; }\n .col-lg-offset-6 {\n margin-left: 50%; }\n .col-lg-offset-7 {\n margin-left: 58.3333333333%; }\n .col-lg-offset-8 {\n margin-left: 66.6666666667%; }\n .col-lg-offset-9 {\n margin-left: 75%; }\n .col-lg-offset-10 {\n margin-left: 83.3333333333%; }\n .col-lg-offset-11 {\n margin-left: 91.6666666667%; }\n .col-lg-offset-12 {\n margin-left: 100%; } }\n\ntable {\n background-color: transparent; }\n\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left; }\n\nth {\n text-align: left; }\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px; }\n .table > thead > tr > th,\n .table > thead > tr > td,\n .table > tbody > tr > th,\n .table > tbody > tr > td,\n .table > tfoot > tr > th,\n .table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.428571429;\n vertical-align: top;\n border-top: 1px solid #ddd; }\n .table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd; }\n .table > caption + thead > tr:first-child > th,\n .table > caption + thead > tr:first-child > td,\n .table > colgroup + thead > tr:first-child > th,\n .table > colgroup + thead > tr:first-child > td,\n .table > thead:first-child > tr:first-child > th,\n .table > thead:first-child > tr:first-child > td {\n border-top: 0; }\n .table > tbody + tbody {\n border-top: 2px solid #ddd; }\n .table .table {\n background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n padding: 5px; }\n\n.table-bordered {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td,\n .table-bordered > tbody > tr > th,\n .table-bordered > tbody > tr > td,\n .table-bordered > tfoot > tr > th,\n .table-bordered > tfoot > tr > td {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td {\n border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc; }\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; }\n @media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd; }\n .table-responsive > .table {\n margin-bottom: 0; }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap; }\n .table-responsive > .table-bordered {\n border: 0; }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0; } }\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\ninput[type=\"file\"] {\n display: block; }\n\ninput[type=\"range\"] {\n display: block;\n width: 100%; }\n\nselect[multiple],\nselect[size] {\n height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .form-control:-ms-input-placeholder {\n color: #999; }\n .form-control::-webkit-input-placeholder {\n color: #999; }\n .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .form-control[disabled], .form-control[readonly],\n fieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .form-control[disabled],\n fieldset[disabled] .form-control {\n cursor: not-allowed; }\n\ntextarea.form-control {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px; }\n input[type=\"date\"].input-sm, .input-group-sm > input[type=\"date\"].form-control,\n .input-group-sm > input[type=\"date\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm input[type=\"date\"],\n input[type=\"time\"].input-sm,\n .input-group-sm > input[type=\"time\"].form-control,\n .input-group-sm > input[type=\"time\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-sm,\n .input-group-sm > input[type=\"datetime-local\"].form-control,\n .input-group-sm > input[type=\"datetime-local\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-sm,\n .input-group-sm > input[type=\"month\"].form-control,\n .input-group-sm > input[type=\"month\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n input[type=\"month\"] {\n line-height: 30px; }\n input[type=\"date\"].input-lg, .input-group-lg > input[type=\"date\"].form-control,\n .input-group-lg > input[type=\"date\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg input[type=\"date\"],\n input[type=\"time\"].input-lg,\n .input-group-lg > input[type=\"time\"].form-control,\n .input-group-lg > input[type=\"time\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-lg,\n .input-group-lg > input[type=\"datetime-local\"].form-control,\n .input-group-lg > input[type=\"datetime-local\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-lg,\n .input-group-lg > input[type=\"month\"].form-control,\n .input-group-lg > input[type=\"month\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n input[type=\"month\"] {\n line-height: 46px; } }\n\n.form-group {\n margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .radio label,\n .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n cursor: not-allowed; }\n\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n .input-group-lg > .form-control-static.input-group-addon,\n .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n .input-group-sm > .form-control-static.input-group-addon,\n .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select[multiple].form-control,\n.input-group-sm > select[multiple].input-group-addon,\n.input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto; }\n\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select[multiple].form-control,\n.input-group-lg > select[multiple].input-group-addon,\n.input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto; }\n\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.has-feedback {\n position: relative; }\n .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,\n.input-group-lg > .input-group-addon + .form-control-feedback,\n.input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,\n.input-group-sm > .input-group-addon + .form-control-feedback,\n.input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d; }\n\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442; }\n\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0; }\n\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .form-inline .form-control-static {\n display: inline-block; }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto; }\n .form-inline .input-group > .form-control {\n width: 100%; }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0; }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px; }\n\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n border-radius: 3px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .btn:hover, .btn:focus, .btn.focus {\n color: #333;\n text-decoration: none; }\n .btn:active, .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn.disabled, .btn[disabled],\n fieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none; }\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none; }\n\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .btn-default:focus, .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,\n .open > .btn-default.dropdown-toggle:hover,\n .open > .btn-default.dropdown-toggle:focus,\n .open > .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n background-image: none; }\n .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,\n fieldset[disabled] .btn-default:hover,\n fieldset[disabled] .btn-default:focus,\n fieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.btn-primary {\n color: #fff;\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #51656f;\n border-color: #262f34; }\n .btn-primary:hover {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,\n .open > .btn-primary.dropdown-toggle:hover,\n .open > .btn-primary.dropdown-toggle:focus,\n .open > .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #42525a;\n border-color: #262f34; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n background-image: none; }\n .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,\n fieldset[disabled] .btn-primary:hover,\n fieldset[disabled] .btn-primary:focus,\n fieldset[disabled] .btn-primary.focus {\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary .badge {\n color: #67808c;\n background-color: #fff; }\n\n.btn-success {\n color: #fff;\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #64a71a;\n border-color: #2f4f0c; }\n .btn-success:hover {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,\n .open > .btn-success.dropdown-toggle:hover,\n .open > .btn-success.dropdown-toggle:focus,\n .open > .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #518815;\n border-color: #2f4f0c; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n background-image: none; }\n .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,\n fieldset[disabled] .btn-success:hover,\n fieldset[disabled] .btn-success:focus,\n fieldset[disabled] .btn-success.focus {\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success .badge {\n color: #7ED321;\n background-color: #fff; }\n\n.btn-info {\n color: #fff;\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #217dbb;\n border-color: #124364; }\n .btn-info:hover {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,\n .open > .btn-info.dropdown-toggle:hover,\n .open > .btn-info.dropdown-toggle:focus,\n .open > .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #1c699d;\n border-color: #124364; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n background-image: none; }\n .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,\n fieldset[disabled] .btn-info:hover,\n fieldset[disabled] .btn-info:focus,\n fieldset[disabled] .btn-info.focus {\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info .badge {\n color: #3498db;\n background-color: #fff; }\n\n.btn-warning {\n color: #fff;\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning:focus, .btn-warning.focus {\n color: #fff;\n background-color: #cc6d00;\n border-color: #663600; }\n .btn-warning:hover {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,\n .open > .btn-warning.dropdown-toggle:hover,\n .open > .btn-warning.dropdown-toggle:focus,\n .open > .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #a85a00;\n border-color: #663600; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n background-image: none; }\n .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,\n fieldset[disabled] .btn-warning:hover,\n fieldset[disabled] .btn-warning:focus,\n fieldset[disabled] .btn-warning.focus {\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning .badge {\n color: #FF8800;\n background-color: #fff; }\n\n.btn-danger {\n color: #fff;\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #d50000; }\n .btn-danger:hover {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,\n .open > .btn-danger.dropdown-toggle:hover,\n .open > .btn-danger.dropdown-toggle:focus,\n .open > .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ff1818;\n border-color: #d50000; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n background-image: none; }\n .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,\n fieldset[disabled] .btn-danger:hover,\n fieldset[disabled] .btn-danger:focus,\n fieldset[disabled] .btn-danger.focus {\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger .badge {\n color: #ff6f6f;\n background-color: #fff; }\n\n.btn-link {\n color: #67808c;\n font-weight: normal;\n border-radius: 0; }\n .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n fieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none; }\n .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n border-color: transparent; }\n .btn-link:hover, .btn-link:focus {\n color: #465760;\n text-decoration: underline;\n background-color: transparent; }\n .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n fieldset[disabled] .btn-link:hover,\n fieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-xs, .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-block {\n display: block;\n width: 100%; }\n\n.btn-block + .btn-block {\n margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%; }\n\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear; }\n .fade.in {\n opacity: 1; }\n\n.collapse {\n display: none; }\n .collapse.in {\n display: block; }\n\ntr.collapse.in {\n display: table-row; }\n\ntbody.collapse.in {\n display: table-row-group; }\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease; }\n\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n position: relative; }\n\n.dropdown-toggle:focus {\n outline: 0; }\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box; }\n .dropdown-menu.pull-right {\n right: 0;\n left: auto; }\n .dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.428571429;\n color: #333333;\n white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #67808c; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed; }\n\n.open > .dropdown-menu {\n display: block; }\n\n.open > a {\n outline: 0; }\n\n.dropdown-menu-right {\n left: auto;\n right: 0; }\n\n.dropdown-menu-left {\n left: 0;\n right: auto; }\n\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.428571429;\n color: #777777;\n white-space: nowrap; }\n\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990; }\n\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto; }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .btn-group > .btn,\n .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n .btn-group-vertical > .btn:hover,\n .btn-group-vertical > .btn:focus,\n .btn-group-vertical > .btn:active,\n .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.btn-toolbar {\n margin-left: -5px; }\n .btn-toolbar:before, .btn-toolbar:after {\n content: \" \";\n display: table; }\n .btn-toolbar:after {\n clear: both; }\n .btn-toolbar .btn,\n .btn-toolbar .btn-group,\n .btn-toolbar .input-group {\n float: left; }\n .btn-toolbar > .btn,\n .btn-toolbar > .btn-group,\n .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.btn-group > .btn:first-child {\n margin-left: 0; }\n .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.btn .caret {\n margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .btn-group-justified > .btn,\n .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .input-group .form-control:focus {\n z-index: 3; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell; }\n .input-group-addon:not(:first-child):not(:last-child),\n .input-group-btn:not(:first-child):not(:last-child),\n .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 3px; }\n .input-group-addon.input-sm,\n .input-group-sm > .input-group-addon,\n .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 2px; }\n .input-group-addon.input-lg,\n .input-group-lg > .input-group-addon,\n .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 4px; }\n .input-group-addon input[type=\"radio\"],\n .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n border-left: 0; }\n\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .input-group-btn > .btn {\n position: relative; }\n .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n z-index: 2; }\n .input-group-btn:first-child > .btn,\n .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .input-group-btn:last-child > .btn,\n .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none; }\n .nav:before, .nav:after {\n content: \" \";\n display: table; }\n .nav:after {\n clear: both; }\n .nav > li {\n position: relative;\n display: block; }\n .nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px; }\n .nav > li > a:hover, .nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .nav > li.disabled > a {\n color: #777777; }\n .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed; }\n .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #67808c; }\n .nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .nav > li > a > img {\n max-width: none; }\n\n.nav-tabs {\n border-bottom: 1px solid #ddd; }\n .nav-tabs > li {\n float: left;\n margin-bottom: -1px; }\n .nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.428571429;\n border: 1px solid transparent;\n border-radius: 3px 3px 0 0; }\n .nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd; }\n .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default; }\n\n.nav-pills > li {\n float: left; }\n .nav-pills > li > a {\n border-radius: 3px; }\n .nav-pills > li + li {\n margin-left: 2px; }\n .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #67808c; }\n\n.nav-stacked > li {\n float: none; }\n .nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n width: 100%; }\n .nav-justified > li, .nav-tabs.nav-justified > li {\n float: none; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px; }\n .nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto; }\n @media (min-width: 768px) {\n .nav-justified > li, .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n border-bottom: 0; }\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 3px; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd; }\n @media (min-width: 768px) {\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 3px 3px 0 0; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n display: none; }\n\n.tab-content > .active {\n display: block; }\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent; }\n .navbar:before, .navbar:after {\n content: \" \";\n display: table; }\n .navbar:after {\n clear: both; }\n @media (min-width: 768px) {\n .navbar {\n border-radius: 3px; } }\n\n.navbar-header:before, .navbar-header:after {\n content: \" \";\n display: table; }\n\n.navbar-header:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .navbar-header {\n float: left; } }\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch; }\n .navbar-collapse:before, .navbar-collapse:after {\n content: \" \";\n display: table; }\n .navbar-collapse:after {\n clear: both; }\n .navbar-collapse.in {\n overflow-y: auto; }\n @media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none; }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important; }\n .navbar-collapse.in {\n overflow-y: visible; }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px; }\n @media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px; }\n @media (min-width: 768px) {\n .container > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-header,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0; } }\n\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px; }\n @media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030; }\n @media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0; } }\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0; }\n\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px; }\n .navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none; }\n .navbar-brand > img {\n display: block; }\n @media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px; } }\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 3px; }\n .navbar-toggle:focus {\n outline: 0; }\n .navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px; }\n .navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px; }\n @media (min-width: 768px) {\n .navbar-toggle {\n display: none; } }\n\n.navbar-nav {\n margin: 7.5px -15px; }\n .navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px; }\n @media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none; }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px; }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px; }\n .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none; } }\n @media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0; }\n .navbar-nav > li {\n float: left; }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px; } }\n\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px; }\n @media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .navbar-form .form-control-static {\n display: inline-block; }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle; }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto; }\n .navbar-form .input-group > .form-control {\n width: 100%; }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0; }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0; } }\n @media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px; }\n .navbar-form .form-group:last-child {\n margin-bottom: 0; } }\n @media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px; }\n .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px; }\n .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px; }\n\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px; }\n @media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px; } }\n\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important; }\n .navbar-right {\n float: right !important;\n margin-right: -15px; }\n .navbar-right ~ .navbar-right {\n margin-right: 0; } }\n\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7; }\n .navbar-default .navbar-brand {\n color: #777; }\n .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent; }\n .navbar-default .navbar-text {\n color: #777; }\n .navbar-default .navbar-nav > li > a {\n color: #777; }\n .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; }\n .navbar-default .navbar-toggle {\n border-color: #ddd; }\n .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n background-color: #ddd; }\n .navbar-default .navbar-toggle .icon-bar {\n background-color: #888; }\n .navbar-default .navbar-collapse,\n .navbar-default .navbar-form {\n border-color: #e7e7e7; }\n .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555; }\n @media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777; }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; } }\n .navbar-default .navbar-link {\n color: #777; }\n .navbar-default .navbar-link:hover {\n color: #333; }\n .navbar-default .btn-link {\n color: #777; }\n .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n color: #333; }\n .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-default .btn-link:hover,\n fieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc; }\n\n.navbar-inverse {\n background-color: #222;\n border-color: #090909; }\n .navbar-inverse .navbar-brand {\n color: #9d9d9d; }\n .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-text {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent; }\n .navbar-inverse .navbar-toggle {\n border-color: #333; }\n .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n background-color: #333; }\n .navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff; }\n .navbar-inverse .navbar-collapse,\n .navbar-inverse .navbar-form {\n border-color: #101010; }\n .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #090909;\n color: #fff; }\n @media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent; } }\n .navbar-inverse .navbar-link {\n color: #9d9d9d; }\n .navbar-inverse .navbar-link:hover {\n color: #fff; }\n .navbar-inverse .btn-link {\n color: #9d9d9d; }\n .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n color: #fff; }\n .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-inverse .btn-link:hover,\n fieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444; }\n\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 3px; }\n .breadcrumb > li {\n display: inline-block; }\n .breadcrumb > li + li:before {\n content: \"/ \";\n padding: 0 5px;\n color: #ccc; }\n .breadcrumb > .active {\n color: #777777; }\n\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 3px; }\n .pagination > li {\n display: inline; }\n .pagination > li > a,\n .pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.428571429;\n text-decoration: none;\n color: #67808c;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px; }\n .pagination > li:first-child > a,\n .pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px; }\n .pagination > li:last-child > a,\n .pagination > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px; }\n .pagination > li > a:hover, .pagination > li > a:focus,\n .pagination > li > span:hover,\n .pagination > li > span:focus {\n z-index: 2;\n color: #465760;\n background-color: #eeeeee;\n border-color: #ddd; }\n .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n .pagination > .active > span,\n .pagination > .active > span:hover,\n .pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c;\n cursor: default; }\n .pagination > .disabled > span,\n .pagination > .disabled > span:hover,\n .pagination > .disabled > span:focus,\n .pagination > .disabled > a,\n .pagination > .disabled > a:hover,\n .pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px; }\n\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center; }\n .pager:before, .pager:after {\n content: \" \";\n display: table; }\n .pager:after {\n clear: both; }\n .pager li {\n display: inline; }\n .pager li > a,\n .pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px; }\n .pager li > a:hover,\n .pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .pager .next > a,\n .pager .next > span {\n float: right; }\n .pager .previous > a,\n .pager .previous > span {\n float: left; }\n .pager .disabled > a,\n .pager .disabled > a:hover,\n .pager .disabled > a:focus,\n .pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed; }\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em; }\n .label:empty {\n display: none; }\n .btn .label {\n position: relative;\n top: -1px; }\n\na.label:hover, a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.label-default {\n background-color: #777777; }\n .label-default[href]:hover, .label-default[href]:focus {\n background-color: #5e5e5e; }\n\n.label-primary {\n background-color: #67808c; }\n .label-primary[href]:hover, .label-primary[href]:focus {\n background-color: #51656f; }\n\n.label-success {\n background-color: #7ED321; }\n .label-success[href]:hover, .label-success[href]:focus {\n background-color: #64a71a; }\n\n.label-info {\n background-color: #3498db; }\n .label-info[href]:hover, .label-info[href]:focus {\n background-color: #217dbb; }\n\n.label-warning {\n background-color: #FF8800; }\n .label-warning[href]:hover, .label-warning[href]:focus {\n background-color: #cc6d00; }\n\n.label-danger {\n background-color: #ff6f6f; }\n .label-danger[href]:hover, .label-danger[href]:focus {\n background-color: #ff3c3c; }\n\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px; }\n .badge:empty {\n display: none; }\n .btn .badge {\n position: relative;\n top: -1px; }\n .btn-xs .badge, .btn-group-xs > .btn .badge,\n .btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px; }\n .list-group-item.active > .badge,\n .nav-pills > .active > a > .badge {\n color: #67808c;\n background-color: #fff; }\n .list-group-item > .badge {\n float: right; }\n .list-group-item > .badge + .badge {\n margin-right: 5px; }\n .nav-pills > li > a > .badge {\n margin-left: 3px; }\n\na.badge:hover, a.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee; }\n .jumbotron h1,\n .jumbotron .h1 {\n color: inherit; }\n .jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200; }\n .jumbotron > hr {\n border-top-color: #d5d5d5; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n border-radius: 4px;\n padding-left: 15px;\n padding-right: 15px; }\n .jumbotron .container {\n max-width: 100%; }\n @media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px; }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px; } }\n\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out; }\n .thumbnail > img,\n .thumbnail a > img {\n display: block;\n max-width: 100%;\n height: auto;\n margin-left: auto;\n margin-right: auto; }\n .thumbnail .caption {\n padding: 9px;\n color: #333333; }\n\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #67808c; }\n\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 3px; }\n .alert h4 {\n margin-top: 0;\n color: inherit; }\n .alert .alert-link {\n font-weight: bold; }\n .alert > p,\n .alert > ul {\n margin-bottom: 0; }\n .alert > p + p {\n margin-top: 5px; }\n\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px; }\n .alert-dismissable .close,\n .alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit; }\n\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d; }\n .alert-success hr {\n border-top-color: #c9e2b3; }\n .alert-success .alert-link {\n color: #2b542c; }\n\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f; }\n .alert-info hr {\n border-top-color: #a6e1ec; }\n .alert-info .alert-link {\n color: #245269; }\n\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b; }\n .alert-warning hr {\n border-top-color: #f7e1b5; }\n .alert-warning .alert-link {\n color: #66512c; }\n\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442; }\n .alert-danger hr {\n border-top-color: #e4b9c0; }\n .alert-danger .alert-link {\n color: #843534; }\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #67808c;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease; }\n\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px; }\n\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n background-color: #7ED321; }\n .progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n background-color: #3498db; }\n .progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n background-color: #FF8800; }\n .progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n background-color: #ff6f6f; }\n .progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media {\n margin-top: 15px; }\n .media:first-child {\n margin-top: 0; }\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden; }\n\n.media-body {\n width: 10000px; }\n\n.media-object {\n display: block; }\n .media-object.img-thumbnail {\n max-width: none; }\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px; }\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px; }\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top; }\n\n.media-middle {\n vertical-align: middle; }\n\n.media-bottom {\n vertical-align: bottom; }\n\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.media-list {\n padding-left: 0;\n list-style: none; }\n\n.list-group {\n margin-bottom: 20px;\n padding-left: 0; }\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd; }\n .list-group-item:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\na.list-group-item,\nbutton.list-group-item {\n color: #555; }\n a.list-group-item .list-group-item-heading,\n button.list-group-item .list-group-item-heading {\n color: #333; }\n a.list-group-item:hover, a.list-group-item:focus,\n button.list-group-item:hover,\n button.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5; }\n\nbutton.list-group-item {\n width: 100%;\n text-align: left; }\n\n.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed; }\n .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {\n color: inherit; }\n .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {\n color: #777777; }\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .list-group-item.active .list-group-item-heading,\n .list-group-item.active .list-group-item-heading > small,\n .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,\n .list-group-item.active:hover .list-group-item-heading > small,\n .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,\n .list-group-item.active:focus .list-group-item-heading > small,\n .list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit; }\n .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n color: #dbe1e4; }\n\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8; }\n\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d; }\n a.list-group-item-success .list-group-item-heading,\n button.list-group-item-success .list-group-item-heading {\n color: inherit; }\n a.list-group-item-success:hover, a.list-group-item-success:focus,\n button.list-group-item-success:hover,\n button.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6; }\n a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,\n button.list-group-item-success.active,\n button.list-group-item-success.active:hover,\n button.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d; }\n\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7; }\n\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f; }\n a.list-group-item-info .list-group-item-heading,\n button.list-group-item-info .list-group-item-heading {\n color: inherit; }\n a.list-group-item-info:hover, a.list-group-item-info:focus,\n button.list-group-item-info:hover,\n button.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3; }\n a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,\n button.list-group-item-info.active,\n button.list-group-item-info.active:hover,\n button.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f; }\n\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3; }\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b; }\n a.list-group-item-warning .list-group-item-heading,\n button.list-group-item-warning .list-group-item-heading {\n color: inherit; }\n a.list-group-item-warning:hover, a.list-group-item-warning:focus,\n button.list-group-item-warning:hover,\n button.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc; }\n a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,\n button.list-group-item-warning.active,\n button.list-group-item-warning.active:hover,\n button.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b; }\n\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede; }\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442; }\n a.list-group-item-danger .list-group-item-heading,\n button.list-group-item-danger .list-group-item-heading {\n color: inherit; }\n a.list-group-item-danger:hover, a.list-group-item-danger:focus,\n button.list-group-item-danger:hover,\n button.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc; }\n a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,\n button.list-group-item-danger.active,\n button.list-group-item-danger.active:hover,\n button.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442; }\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3; }\n\n.panel, body.status-page .list-group.components {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 3px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n padding: 15px; }\n .panel-body:before, .panel-body:after {\n content: \" \";\n display: table; }\n .panel-body:after {\n clear: both; }\n\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel-heading > .dropdown .dropdown-toggle {\n color: inherit; }\n\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit; }\n .panel-title > a,\n .panel-title > small,\n .panel-title > .small,\n .panel-title > small > a,\n .panel-title > .small > a {\n color: inherit; }\n\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .list-group, body.status-page .list-group.components > .list-group,\n.panel > .panel-collapse > .list-group, body.status-page .list-group.components > .panel-collapse > .list-group {\n margin-bottom: 0; }\n .panel > .list-group .list-group-item, body.status-page .list-group.components > .list-group .list-group-item,\n .panel > .panel-collapse > .list-group .list-group-item, body.status-page .list-group.components > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0; }\n .panel > .list-group:first-child .list-group-item:first-child, body.status-page .list-group.components > .list-group:first-child .list-group-item:first-child,\n .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child, body.status-page .list-group.components > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .list-group:last-child .list-group-item:last-child, body.status-page .list-group.components > .list-group:last-child .list-group-item:last-child,\n .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child, body.status-page .list-group.components > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child, body.status-page .list-group.components > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0; }\n\n.list-group + .panel-footer {\n border-top-width: 0; }\n\n.panel > .table, body.status-page .list-group.components > .table,\n.panel > .table-responsive > .table, body.status-page .list-group.components > .table-responsive > .table,\n.panel > .panel-collapse > .table, body.status-page .list-group.components > .panel-collapse > .table {\n margin-bottom: 0; }\n .panel > .table caption, body.status-page .list-group.components > .table caption,\n .panel > .table-responsive > .table caption, body.status-page .list-group.components > .table-responsive > .table caption,\n .panel > .panel-collapse > .table caption, body.status-page .list-group.components > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px; }\n\n.panel > .table:first-child, body.status-page .list-group.components > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 2px;\n border-top-right-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child, body.status-page .list-group.components > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 2px; }\n\n.panel > .table:last-child, body.status-page .list-group.components > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 2px;\n border-bottom-right-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child, body.status-page .list-group.components > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 2px; }\n\n.panel > .panel-body + .table, body.status-page .list-group.components > .panel-body + .table,\n.panel > .panel-body + .table-responsive, body.status-page .list-group.components > .panel-body + .table-responsive,\n.panel > .table + .panel-body, body.status-page .list-group.components > .table + .panel-body,\n.panel > .table-responsive + .panel-body, body.status-page .list-group.components > .table-responsive + .panel-body {\n border-top: 1px solid #ddd; }\n\n.panel > .table > tbody:first-child > tr:first-child th, body.status-page .list-group.components > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td, body.status-page .list-group.components > .table > tbody:first-child > tr:first-child td {\n border-top: 0; }\n\n.panel > .table-bordered, body.status-page .list-group.components > .table-bordered,\n.panel > .table-responsive > .table-bordered, body.status-page .list-group.components > .table-responsive > .table-bordered {\n border: 0; }\n .panel > .table-bordered > thead > tr > th:first-child, body.status-page .list-group.components > .table-bordered > thead > tr > th:first-child,\n .panel > .table-bordered > thead > tr > td:first-child, body.status-page .list-group.components > .table-bordered > thead > tr > td:first-child,\n .panel > .table-bordered > tbody > tr > th:first-child, body.status-page .list-group.components > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-bordered > tbody > tr > td:first-child, body.status-page .list-group.components > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-bordered > tfoot > tr > th:first-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-bordered > tfoot > tr > td:first-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .panel > .table-bordered > thead > tr > th:last-child, body.status-page .list-group.components > .table-bordered > thead > tr > th:last-child,\n .panel > .table-bordered > thead > tr > td:last-child, body.status-page .list-group.components > .table-bordered > thead > tr > td:last-child,\n .panel > .table-bordered > tbody > tr > th:last-child, body.status-page .list-group.components > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-bordered > tbody > tr > td:last-child, body.status-page .list-group.components > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-bordered > tfoot > tr > th:last-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-bordered > tfoot > tr > td:last-child, body.status-page .list-group.components > .table-bordered > tfoot > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .panel > .table-bordered > thead > tr:first-child > td, body.status-page .list-group.components > .table-bordered > thead > tr:first-child > td,\n .panel > .table-bordered > thead > tr:first-child > th, body.status-page .list-group.components > .table-bordered > thead > tr:first-child > th,\n .panel > .table-bordered > tbody > tr:first-child > td, body.status-page .list-group.components > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-bordered > tbody > tr:first-child > th, body.status-page .list-group.components > .table-bordered > tbody > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > thead > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0; }\n .panel > .table-bordered > tbody > tr:last-child > td, body.status-page .list-group.components > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-bordered > tbody > tr:last-child > th, body.status-page .list-group.components > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-bordered > tfoot > tr:last-child > td, body.status-page .list-group.components > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-bordered > tfoot > tr:last-child > th, body.status-page .list-group.components > .table-bordered > tfoot > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, body.status-page .list-group.components > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0; }\n\n.panel > .table-responsive, body.status-page .list-group.components > .table-responsive {\n border: 0;\n margin-bottom: 0; }\n\n.panel-group {\n margin-bottom: 20px; }\n .panel-group .panel, .panel-group body.status-page .list-group.components, body.status-page .panel-group .list-group.components {\n margin-bottom: 0;\n border-radius: 3px; }\n .panel-group .panel + .panel, .panel-group body.status-page .list-group.components + .panel, body.status-page .panel-group .list-group.components + .panel, .panel-group body.status-page .panel + .list-group.components, body.status-page .panel-group .panel + .list-group.components, .panel-group body.status-page .list-group.components + .list-group.components, body.status-page .panel-group .list-group.components + .list-group.components {\n margin-top: 5px; }\n .panel-group .panel-heading {\n border-bottom: 0; }\n .panel-group .panel-heading + .panel-collapse > .panel-body,\n .panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd; }\n .panel-group .panel-footer {\n border-top: 0; }\n .panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd; }\n\n.panel-default {\n border-color: #ddd; }\n .panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd; }\n .panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd; }\n .panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333; }\n .panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd; }\n\n.panel-primary {\n border-color: #67808c; }\n .panel-primary > .panel-heading {\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #67808c; }\n .panel-primary > .panel-heading .badge {\n color: #67808c;\n background-color: #fff; }\n .panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #67808c; }\n\n.panel-success {\n border-color: #d6e9c6; }\n .panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6; }\n .panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6; }\n\n.panel-info {\n border-color: #bce8f1; }\n .panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1; }\n .panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1; }\n\n.panel-warning {\n border-color: #faebcc; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc; }\n .panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc; }\n\n.panel-danger {\n border-color: #ebccd1; }\n .panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1; }\n .panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1; }\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden; }\n .embed-responsive .embed-responsive-item,\n .embed-responsive iframe,\n .embed-responsive embed,\n .embed-responsive object,\n .embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0; }\n\n.embed-responsive-16by9 {\n padding-bottom: 56.25%; }\n\n.embed-responsive-4by3 {\n padding-bottom: 75%; }\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n .well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n padding: 24px;\n border-radius: 4px; }\n\n.well-sm {\n padding: 9px;\n border-radius: 2px; }\n\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .close:hover, .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.428571429; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0); }\n .tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .tooltip.top {\n margin-top: -3px;\n padding: 5px 0; }\n .tooltip.right {\n margin-left: 3px;\n padding: 0 5px; }\n .tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0; }\n .tooltip.left {\n margin-left: -3px;\n padding: 0 5px; }\n\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #333;\n border-radius: 3px; }\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #333; }\n\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #333; }\n\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\n .popover.top {\n margin-top: -10px; }\n .popover.right {\n margin-left: 10px; }\n .popover.bottom {\n margin-top: 10px; }\n .popover.left {\n margin-left: -10px; }\n\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 3px 3px 0 0; }\n\n.popover-content {\n padding: 9px 14px; }\n\n.popover > .arrow, .popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.popover > .arrow {\n border-width: 11px; }\n\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\"; }\n\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px; }\n .popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff; }\n\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25); }\n .popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff; }\n\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px; }\n .popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff; }\n\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25); }\n .popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px; }\n\n.carousel {\n position: relative; }\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%; }\n .carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left; }\n .carousel-inner > .item > img,\n .carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n line-height: 1; }\n @media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px; }\n .carousel-inner > .item.next, .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.prev, .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0; } }\n .carousel-inner > .active,\n .carousel-inner > .next,\n .carousel-inner > .prev {\n display: block; }\n .carousel-inner > .active {\n left: 0; }\n .carousel-inner > .next,\n .carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%; }\n .carousel-inner > .next {\n left: 100%; }\n .carousel-inner > .prev {\n left: -100%; }\n .carousel-inner > .next.left,\n .carousel-inner > .prev.right {\n left: 0; }\n .carousel-inner > .active.left {\n left: -100%; }\n .carousel-inner > .active.right {\n left: 100%; }\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: transparent; }\n .carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n .carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n .carousel-control:hover, .carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .carousel-control .icon-prev,\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block; }\n .carousel-control .icon-prev,\n .carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px; }\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px; }\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif; }\n .carousel-control .icon-prev:before {\n content: '\\2039'; }\n .carousel-control .icon-next:before {\n content: '\\203a'; }\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center; }\n .carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: transparent; }\n .carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff; }\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n .carousel-caption .btn {\n text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px; }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px; }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px; }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px; }\n .carousel-indicators {\n bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n content: \" \";\n display: table; }\n\n.clearfix:after {\n clear: both; }\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.pull-right {\n float: right !important; }\n\n.pull-left {\n float: left !important; }\n\n.hide {\n display: none !important; }\n\n.show {\n display: block !important; }\n\n.invisible {\n visibility: hidden; }\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0; }\n\n.hidden {\n display: none !important; }\n\n.affix {\n position: fixed; }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n\nhtml {\n position: relative;\n min-height: 100%;\n -webkit-font-smoothing: antialiased;\n overflow-y: scroll; }\n\nbody {\n margin-bottom: 60px;\n padding-bottom: 60px; }\n\n.uppercase {\n text-transform: uppercase; }\n\n.margin-top {\n margin-top: 20px; }\n\n.margin-bottom {\n margin-bottom: 20px; }\n\n.no-select {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\ndiv[role=tabpanel] ul.nav-tabs {\n border-bottom: 1px solid #d5d8d7; }\n div[role=tabpanel] ul.nav-tabs li a {\n font-weight: 400;\n display: inline-block;\n padding: 10px 25px;\n border-radius: 0;\n font-size: 0.9em;\n letter-spacing: 0.01em; }\n\ndiv[role=tabpanel] .tab-content {\n border-left: 1px solid #d5d8d7;\n border-bottom: 1px solid #d5d8d7;\n border-right: 1px solid #d5d8d7;\n background-color: white; }\n div[role=tabpanel] .tab-content .tab-pane {\n padding: 10px; }\n\nlabel {\n font-size: 14px; }\n\ntextarea {\n resize: none;\n overflow: auto; }\n\n.markdown-control {\n position: relative; }\n .markdown-control:before {\n position: absolute;\n display: block;\n right: 0%;\n bottom: 0%;\n width: 40px;\n height: 40px;\n font-size: 2em;\n font-family: \"Ionicons\";\n content: \"\\f4e6\"; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 45px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9; }\n\n@media (max-width: 767px) {\n .component-inline .radio-items {\n text-align: left; }\n .component-inline .radio-items .radio-inline {\n margin-left: 0;\n width: 100%; } }\n\n.minicolors-theme-bootstrap .minicolors-swatch {\n top: 9px;\n left: 9px; }\n\n.well {\n border-radius: 0; }\n\n.alert {\n border-radius: 4px;\n background: #F7CA18;\n border: solid 2px #d5ab07; }\n .alert.alert-success {\n background-color: #7ED321;\n border: solid 2px #64a71a;\n color: white; }\n .alert.alert-success a {\n color: white;\n font-weight: bold; }\n .alert.alert-info {\n background: #3498db;\n border: solid 2px #217dbb;\n color: white; }\n .alert.alert-info a {\n color: white;\n font-weight: bold; }\n .alert.alert-danger {\n background: #ff6f6f;\n border: solid 2px #ff3c3c;\n color: white; }\n .alert.alert-danger a {\n color: white;\n font-weight: bold; }\n\n.panel-danger {\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading {\n color: white;\n background-color: #ff6f6f;\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ff3c3c; }\n .panel-danger > .panel-heading .badge {\n color: #ff6f6f;\n background-color: white; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ff3c3c; }\n\n.panel-success {\n border-color: #64a71a; }\n .panel-success > .panel-heading {\n color: white;\n background-color: #7ED321;\n border-color: #64a71a; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #64a71a; }\n .panel-success > .panel-heading .badge {\n color: #7ED321;\n background-color: white; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #64a71a; }\n\n.panel-info {\n border-color: #217dbb; }\n .panel-info > .panel-heading {\n color: white;\n background-color: #3498db;\n border-color: #217dbb; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #217dbb; }\n .panel-info > .panel-heading .badge {\n color: #3498db;\n background-color: white; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #217dbb; }\n\n.panel-warning {\n border-color: #d5ab07; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #F7CA18;\n border-color: #d5ab07; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d5ab07; }\n .panel-warning > .panel-heading .badge {\n color: #F7CA18;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d5ab07; }\n\n.btn.btn-default {\n color: #333;\n background: #fff;\n border: solid 1px #e6e6e6; }\n .btn.btn-default:hover, .btn.btn-default:focus, .btn.btn-default:active, .btn.btn-default.active {\n background: #f2f2f2;\n border-color: #e6e6e6;\n color: #333;\n outline: none;\n outline-offset: 0; }\n .btn.btn-default.disabled, .btn.btn-default.disabled:hover, .btn.btn-default.disabled:focus, .btn.btn-default.disabled:active, .btn.btn-default.disabled.active, .btn.btn-default[disabled], .btn.btn-default[disabled]:hover, .btn.btn-default[disabled]:focus, .btn.btn-default[disabled]:active, .btn.btn-default[disabled].active,\n fieldset[disabled] .btn.btn-default,\n fieldset[disabled] .btn.btn-default:hover,\n fieldset[disabled] .btn.btn-default:focus,\n fieldset[disabled] .btn.btn-default:active,\n fieldset[disabled] .btn.btn-default.active {\n background-color: white;\n border-color: #e6e6e6; }\n\n.btn.btn-primary {\n color: #fff;\n background: #67808c;\n border: solid 1px #51656f; }\n .btn.btn-primary:hover, .btn.btn-primary:focus, .btn.btn-primary:active, .btn.btn-primary.active {\n background: #5c727d;\n border-color: #51656f;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-primary.disabled, .btn.btn-primary.disabled:hover, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:active, .btn.btn-primary.disabled.active, .btn.btn-primary[disabled], .btn.btn-primary[disabled]:hover, .btn.btn-primary[disabled]:focus, .btn.btn-primary[disabled]:active, .btn.btn-primary[disabled].active,\n fieldset[disabled] .btn.btn-primary,\n fieldset[disabled] .btn.btn-primary:hover,\n fieldset[disabled] .btn.btn-primary:focus,\n fieldset[disabled] .btn.btn-primary:active,\n fieldset[disabled] .btn.btn-primary.active {\n background-color: #748c99;\n border-color: #51656f; }\n\n.btn.btn-success {\n color: #fff;\n background: #7ED321;\n border: solid 1px #64a71a; }\n .btn.btn-success:hover, .btn.btn-success:focus, .btn.btn-success:active, .btn.btn-success.active {\n background: #71bd1e;\n border-color: #64a71a;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-success.disabled, .btn.btn-success.disabled:hover, .btn.btn-success.disabled:focus, .btn.btn-success.disabled:active, .btn.btn-success.disabled.active, .btn.btn-success[disabled], .btn.btn-success[disabled]:hover, .btn.btn-success[disabled]:focus, .btn.btn-success[disabled]:active, .btn.btn-success[disabled].active,\n fieldset[disabled] .btn.btn-success,\n fieldset[disabled] .btn.btn-success:hover,\n fieldset[disabled] .btn.btn-success:focus,\n fieldset[disabled] .btn.btn-success:active,\n fieldset[disabled] .btn.btn-success.active {\n background-color: #8bde2f;\n border-color: #64a71a; }\n\n.btn.btn-info {\n color: #fff;\n background: #3498db;\n border: solid 1px #217dbb; }\n .btn.btn-info:hover, .btn.btn-info:focus, .btn.btn-info:active, .btn.btn-info.active {\n background: #258cd1;\n border-color: #217dbb;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-info.disabled, .btn.btn-info.disabled:hover, .btn.btn-info.disabled:focus, .btn.btn-info.disabled:active, .btn.btn-info.disabled.active, .btn.btn-info[disabled], .btn.btn-info[disabled]:hover, .btn.btn-info[disabled]:focus, .btn.btn-info[disabled]:active, .btn.btn-info[disabled].active,\n fieldset[disabled] .btn.btn-info,\n fieldset[disabled] .btn.btn-info:hover,\n fieldset[disabled] .btn.btn-info:focus,\n fieldset[disabled] .btn.btn-info:active,\n fieldset[disabled] .btn.btn-info.active {\n background-color: #4aa3df;\n border-color: #217dbb; }\n\n.btn.btn-warning {\n color: #fff;\n background: #FF8800;\n border: solid 1px #cc6d00; }\n .btn.btn-warning:hover, .btn.btn-warning:focus, .btn.btn-warning:active, .btn.btn-warning.active {\n background: #e67a00;\n border-color: #cc6d00;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-warning.disabled, .btn.btn-warning.disabled:hover, .btn.btn-warning.disabled:focus, .btn.btn-warning.disabled:active, .btn.btn-warning.disabled.active, .btn.btn-warning[disabled], .btn.btn-warning[disabled]:hover, .btn.btn-warning[disabled]:focus, .btn.btn-warning[disabled]:active, .btn.btn-warning[disabled].active,\n fieldset[disabled] .btn.btn-warning,\n fieldset[disabled] .btn.btn-warning:hover,\n fieldset[disabled] .btn.btn-warning:focus,\n fieldset[disabled] .btn.btn-warning:active,\n fieldset[disabled] .btn.btn-warning.active {\n background-color: #ff941a;\n border-color: #cc6d00; }\n\n.btn.btn-danger {\n color: #fff;\n background: #ff6f6f;\n border: solid 1px #ff3c3c; }\n .btn.btn-danger:hover, .btn.btn-danger:focus, .btn.btn-danger:active, .btn.btn-danger.active {\n background: #ff5656;\n border-color: #ff3c3c;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-danger.disabled, .btn.btn-danger.disabled:hover, .btn.btn-danger.disabled:focus, .btn.btn-danger.disabled:active, .btn.btn-danger.disabled.active, .btn.btn-danger[disabled], .btn.btn-danger[disabled]:hover, .btn.btn-danger[disabled]:focus, .btn.btn-danger[disabled]:active, .btn.btn-danger[disabled].active,\n fieldset[disabled] .btn.btn-danger,\n fieldset[disabled] .btn.btn-danger:hover,\n fieldset[disabled] .btn.btn-danger:focus,\n fieldset[disabled] .btn.btn-danger:active,\n fieldset[disabled] .btn.btn-danger.active {\n background-color: #ff8989;\n border-color: #ff3c3c; }\n\n.btn.btn-inverse {\n color: white;\n background: #474949;\n border: solid 1px #2e2f2f; }\n .btn.btn-inverse:hover, .btn.btn-inverse:focus, .btn.btn-inverse:active, .btn.btn-inverse.active {\n background: #3a3c3c;\n border-color: #2e2f2f;\n color: white;\n outline: none;\n outline-offset: 0; }\n .btn.btn-inverse.disabled, .btn.btn-inverse.disabled:hover, .btn.btn-inverse.disabled:focus, .btn.btn-inverse.disabled:active, .btn.btn-inverse.disabled.active, .btn.btn-inverse[disabled], .btn.btn-inverse[disabled]:hover, .btn.btn-inverse[disabled]:focus, .btn.btn-inverse[disabled]:active, .btn.btn-inverse[disabled].active,\n fieldset[disabled] .btn.btn-inverse,\n fieldset[disabled] .btn.btn-inverse:hover,\n fieldset[disabled] .btn.btn-inverse:focus,\n fieldset[disabled] .btn.btn-inverse:active,\n fieldset[disabled] .btn.btn-inverse.active {\n background-color: #545656;\n border-color: #2e2f2f; }\n\n.btn-outline {\n background-color: transparent;\n background-image: none !important;\n color: inherit;\n transition: all .5s; }\n\n.btn-default.btn-outline {\n color: #999; }\n\n.btn-primary.btn-outline {\n color: #428bca; }\n\n.btn-success.btn-outline {\n color: #5cb85c; }\n\n.btn-info.btn-outline {\n color: #5bc0de; }\n\n.btn-warning.btn-outline {\n color: #f0ad4e; }\n\n.btn-danger.btn-outline {\n color: #d9534f; }\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff; }\n\n.pager li > a, .pager li > span {\n border-radius: 3px; }\n\nbody.error-page {\n background-color: #f3f3f4; }\n body.error-page .middle-box {\n height: 400px;\n width: 400px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -200px;\n z-index: 100; }\n body.error-page .middle-box h1 {\n font-size: 9em; }\n body.error-page h3.font-bold {\n font-weight: 600; }\n\n.swal2-overlay {\n background-color: rgba(0, 0, 0, 0.4);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: none;\n z-index: 1000; }\n\n.swal2-modal {\n background-color: #fff;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n border-radius: 5px;\n box-sizing: border-box;\n text-align: center;\n position: fixed;\n left: 50%;\n top: 50%;\n margin-top: -200px;\n max-height: 90%;\n overflow-x: hidden;\n overflow-y: auto;\n display: none;\n z-index: 2000; }\n .swal2-modal:focus {\n outline: none; }\n .swal2-modal.loading {\n overflow-y: hidden; }\n .swal2-modal h2 {\n color: #575757;\n font-size: 30px;\n text-align: center;\n font-weight: 600;\n text-transform: none;\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 60px;\n display: block; }\n .swal2-modal .swal2-spacer {\n height: 10px;\n color: transparent;\n border: 0; }\n .swal2-modal button.styled {\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: #fff;\n cursor: pointer;\n font-size: 17px;\n font-weight: 500;\n margin: 0 5px;\n padding: 10px 32px; }\n .swal2-modal button.styled:not(.loading)[disabled] {\n opacity: .4;\n cursor: no-drop; }\n .swal2-modal button.styled.loading {\n box-sizing: border-box;\n border: 4px solid transparent;\n border-color: transparent;\n width: 40px;\n height: 40px;\n padding: 0;\n margin: -2px 30px;\n vertical-align: top;\n background-color: transparent !important;\n color: transparent;\n cursor: default;\n border-radius: 100%;\n animation: rotate-loading 1.5s linear 0s infinite normal; }\n .swal2-modal button:not(.styled).loading:after {\n display: inline-block;\n content: \"\";\n margin-left: 5px;\n vertical-align: -1px;\n height: 6px;\n width: 6px;\n border: 3px solid #999;\n border-right-color: transparent;\n border-radius: 50%;\n animation: rotate-loading 1.5s linear 0s infinite normal; }\n .swal2-modal .swal2-image {\n margin: 20px auto;\n max-width: 100%; }\n .swal2-modal .swal2-close {\n font-size: 36px;\n line-height: 36px;\n font-family: serif;\n position: absolute;\n top: 5px;\n right: 13px;\n cursor: pointer;\n color: #cfcfcf;\n transition: all 0.1s ease; }\n .swal2-modal .swal2-close:hover {\n color: #d55; }\n .swal2-modal > .swal2-input,\n .swal2-modal > .swal2-textarea,\n .swal2-modal > .swal2-select,\n .swal2-modal > .swal2-radio,\n .swal2-modal > .swal2-checkbox {\n display: none; }\n .swal2-modal .swal2-content {\n font-size: 18px;\n text-align: center;\n font-weight: 300;\n position: relative;\n float: none;\n margin: 0;\n padding: 0;\n line-height: normal;\n color: #555; }\n .swal2-modal .swal2-input,\n .swal2-modal .swal2-textarea,\n .swal2-modal .swal2-select,\n .swal2-modal .swal2-radio,\n .swal2-modal .swal2-checkbox,\n .swal2-modal .swal2-range input,\n .swal2-modal .swal2-range output {\n margin: 20px auto; }\n .swal2-modal .swal2-input:not([type=\"file\"]), .swal2-modal .swal2-textarea {\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n border: 1px solid #d7d7d7;\n font-size: 18px;\n box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n transition: all 0.3s; }\n .swal2-modal .swal2-input:not([type=\"file\"]).error, .swal2-modal .swal2-textarea.error {\n border-color: #f06e57 !important; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus, .swal2-modal .swal2-textarea:focus {\n outline: none;\n box-shadow: 0px 0px 3px #c4e6f5;\n border: 1px solid #b4dbed; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus::-moz-placeholder, .swal2-modal .swal2-textarea:focus::-moz-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus:-ms-input-placeholder, .swal2-modal .swal2-textarea:focus:-ms-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus::-webkit-input-placeholder, .swal2-modal .swal2-textarea:focus::-webkit-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"])::-moz-placeholder, .swal2-modal .swal2-textarea::-moz-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-input:not([type=\"file\"]):-ms-input-placeholder, .swal2-modal .swal2-textarea:-ms-input-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-input:not([type=\"file\"])::-webkit-input-placeholder, .swal2-modal .swal2-textarea::-webkit-input-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-range input {\n float: left;\n padding: 0 !important;\n width: 80% !important; }\n .swal2-modal .swal2-range output {\n float: right;\n font-size: 20px;\n font-weight: 600; }\n .swal2-modal .swal2-input:not([type=\"file\"]),\n .swal2-modal .swal2-range input,\n .swal2-modal .swal2-range output {\n height: 43px;\n line-height: 43px;\n vertical-align: middle;\n padding: 0 12px; }\n .swal2-modal .swal2-input[type=\"file\"] {\n font-size: 20px; }\n .swal2-modal .swal2-input[type=\"number\"] {\n max-width: 150px; }\n .swal2-modal .swal2-textarea {\n height: 108px;\n padding: 12px; }\n .swal2-modal .swal2-select {\n color: #555;\n font-size: inherit;\n padding: 5px 10px;\n min-width: 40%;\n max-width: 100%; }\n .swal2-modal .swal2-radio {\n border: 0; }\n .swal2-modal .swal2-radio label:not(:first-child) {\n margin-left: 20px; }\n .swal2-modal .swal2-radio input, .swal2-modal .swal2-radio span {\n vertical-align: middle; }\n .swal2-modal .swal2-radio input {\n margin: 0 3px 0 0; }\n .swal2-modal .swal2-checkbox {\n color: #555; }\n .swal2-modal .swal2-checkbox input, .swal2-modal .swal2-checkbox span {\n vertical-align: middle; }\n .swal2-modal .swal2-validationerror {\n background-color: #f1f1f1;\n margin: 0 -20px;\n overflow: hidden;\n padding: 10px;\n color: #797979;\n font-size: 16px;\n font-weight: 300;\n display: none; }\n .swal2-modal .swal2-validationerror::before {\n content: \"!\";\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: #ea7d7d;\n color: white;\n line-height: 24px;\n text-align: center;\n margin-right: 10px; }\n\n.swal2-icon {\n width: 80px;\n height: 80px;\n border: 4px solid #808080;\n border-radius: 50%;\n margin: 20px auto 30px;\n padding: 0;\n position: relative;\n box-sizing: content-box;\n cursor: default;\n /* http://stackoverflow.com/a/4407335/1331425 */\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .swal2-icon.swal2-error {\n border-color: #f27474; }\n .swal2-icon.swal2-error .x-mark {\n position: relative;\n display: block; }\n .swal2-icon.swal2-error .line {\n position: absolute;\n height: 5px;\n width: 47px;\n background-color: #f27474;\n display: block;\n top: 37px;\n border-radius: 2px; }\n .swal2-icon.swal2-error .line.left {\n transform: rotate(45deg);\n left: 17px; }\n .swal2-icon.swal2-error .line.right {\n transform: rotate(-45deg);\n right: 16px; }\n .swal2-icon.swal2-warning {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #f8bb86;\n border-color: #f8bb86;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-info {\n font-family: \"Open Sans\", sans-serif;\n color: #3fc3ee;\n border-color: #3fc3ee;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-question {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #c9dae1;\n border-color: #c9dae1;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-success {\n border-color: #a5dc86; }\n .swal2-icon.swal2-success::before, .swal2-icon.swal2-success::after {\n content: '';\n border-radius: 50%;\n position: absolute;\n width: 60px;\n height: 120px;\n background: #fff;\n transform: rotate(45deg); }\n .swal2-icon.swal2-success::before {\n border-radius: 120px 0 0 120px;\n top: -7px;\n left: -33px;\n transform: rotate(-45deg);\n transform-origin: 60px 60px; }\n .swal2-icon.swal2-success::after {\n border-radius: 0 120px 120px 0;\n top: -11px;\n left: 30px;\n transform: rotate(-45deg);\n transform-origin: 0 60px; }\n .swal2-icon.swal2-success .placeholder {\n width: 80px;\n height: 80px;\n border: 4px solid rgba(165, 220, 134, 0.2);\n border-radius: 50%;\n box-sizing: content-box;\n position: absolute;\n left: -4px;\n top: -4px;\n z-index: 2; }\n .swal2-icon.swal2-success .fix {\n width: 7px;\n height: 90px;\n background-color: #fff;\n position: absolute;\n left: 28px;\n top: 8px;\n z-index: 1;\n transform: rotate(-45deg); }\n .swal2-icon.swal2-success .line {\n height: 5px;\n background-color: #a5dc86;\n display: block;\n border-radius: 2px;\n position: absolute;\n z-index: 2; }\n .swal2-icon.swal2-success .line.tip {\n width: 25px;\n left: 14px;\n top: 46px;\n transform: rotate(45deg); }\n .swal2-icon.swal2-success .line.long {\n width: 47px;\n right: 8px;\n top: 38px;\n transform: rotate(-45deg); }\n\n.swal2-progresssteps {\n font-weight: 600;\n margin: 0 0 20px;\n padding: 0; }\n .swal2-progresssteps li {\n display: inline-block;\n position: relative; }\n .swal2-progresssteps .swal2-progresscircle {\n background: #3085d6;\n border-radius: 2em;\n color: #fff;\n height: 2em;\n line-height: 2em;\n text-align: center;\n width: 2em;\n z-index: 20; }\n .swal2-progresssteps .swal2-progresscircle:first-child {\n margin-left: 0; }\n .swal2-progresssteps .swal2-progresscircle:last-child {\n margin-right: 0; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep {\n background: #3085d6; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progresscircle {\n background: #add8e6; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progressline {\n background: #add8e6; }\n .swal2-progresssteps .swal2-progressline {\n background: #3085d6;\n height: 0.4em;\n margin: 0 -1px;\n z-index: 10; }\n\n/* github.com/limonte/sweetalert2/issues/268 */\n[class^=swal2] {\n -webkit-tap-highlight-color: transparent; }\n\n@keyframes showSweetAlert {\n 0% {\n transform: scale(0.7); }\n 45% {\n transform: scale(1.05); }\n 80% {\n transform: scale(0.95); }\n 100% {\n transform: scale(1); } }\n\n@keyframes hideSweetAlert {\n 0% {\n transform: scale(1);\n opacity: 1; }\n 100% {\n transform: scale(0.5);\n opacity: 0; } }\n\n.show-swal2 {\n animation: showSweetAlert 0.3s; }\n .show-swal2.no-animation {\n animation: none; }\n\n.hide-swal2 {\n animation: hideSweetAlert 0.15s forwards; }\n .hide-swal2.no-animation {\n animation: none; }\n\n@keyframes animate-success-tip {\n 0% {\n width: 0;\n left: 1px;\n top: 19px; }\n 54% {\n width: 0;\n left: 1px;\n top: 19px; }\n 70% {\n width: 50px;\n left: -8px;\n top: 37px; }\n 84% {\n width: 17px;\n left: 21px;\n top: 48px; }\n 100% {\n width: 25px;\n left: 14px;\n top: 45px; } }\n\n@keyframes animate-success-long {\n 0% {\n width: 0;\n right: 46px;\n top: 54px; }\n 65% {\n width: 0;\n right: 46px;\n top: 54px; }\n 84% {\n width: 55px;\n right: 0;\n top: 35px; }\n 100% {\n width: 47px;\n right: 8px;\n top: 38px; } }\n\n@keyframes rotatePlaceholder {\n 0% {\n transform: rotate(-45deg); }\n 5% {\n transform: rotate(-45deg); }\n 12% {\n transform: rotate(-405deg); }\n 100% {\n transform: rotate(-405deg); } }\n\n.animate-success-tip {\n animation: animate-success-tip 0.75s; }\n\n.animate-success-long {\n animation: animate-success-long 0.75s; }\n\n.swal2-icon.swal2-success.animate::after {\n animation: rotatePlaceholder 4.25s ease-in; }\n\n@keyframes animate-error-icon {\n 0% {\n transform: rotateX(100deg);\n opacity: 0; }\n 100% {\n transform: rotateX(0deg);\n opacity: 1; } }\n\n.animate-error-icon {\n animation: animate-error-icon 0.5s; }\n\n@keyframes animate-x-mark {\n 0% {\n transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 50% {\n transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 80% {\n transform: scale(1.15);\n margin-top: -6px; }\n 100% {\n transform: scale(1);\n margin-top: 0;\n opacity: 1; } }\n\n.animate-x-mark {\n animation: animate-x-mark 0.5s; }\n\n@keyframes pulse-warning {\n 0% {\n border-color: #f8d486; }\n 100% {\n border-color: #f8bb86; } }\n\n.pulse-warning {\n animation: pulse-warning 0.75s infinite alternate; }\n\n@keyframes rotate-loading {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n.swal2-modal button {\n margin-right: 8px; }\n\nbody.status-page {\n padding-top: 40px;\n font-family: -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n background-color: #F0F3F4;\n color: #333333;\n font-size: 1.4em;\n font-weight: 400;\n -webkit-font-smoothing: antialiased; }\n body.status-page.no-padding {\n padding-top: 0 !important; }\n body.status-page hr {\n margin-top: 10px;\n margin-bottom: 10px; }\n body.status-page h1, body.status-page h2, body.status-page h3, body.status-page h4, body.status-page h5 {\n margin-bottom: 20px; }\n body.status-page img {\n box-sizing: border-box; }\n body.status-page img.emoji {\n height: 20px;\n width: 20px;\n vertical-align: middle;\n max-width: none; }\n body.status-page p, body.status-page strong {\n color: #333; }\n body.status-page .tooltip .tooltip-inner {\n padding: 8px 12px;\n font-size: 14px;\n word-wrap: break-word; }\n body.status-page .help-icon {\n cursor: help; }\n body.status-page .text-success, body.status-page .text-component-1 {\n color: #7ED321; }\n body.status-page .text-info, body.status-page .text-component-2 {\n color: #3498db; }\n body.status-page .text-alert, body.status-page .text-component-3 {\n color: #F7CA18; }\n body.status-page .text-danger, body.status-page .text-component-4 {\n color: #ff6f6f; }\n body.status-page .container {\n max-width: 960px; }\n body.status-page .page-header {\n margin-top: 10px; }\n body.status-page .app-banner {\n margin-bottom: 30px; }\n body.status-page .about-app {\n margin-bottom: 40px; }\n body.status-page .about-app p {\n font-size: 1.2em; }\n body.status-page .alert {\n font-size: 1.2em;\n font-weight: 600; }\n body.status-page .timeline .content-wrapper {\n margin-top: 40px;\n margin-bottom: 40px; }\n body.status-page .timeline h3 {\n margin-top: 30px;\n margin-bottom: 40px;\n font-size: 22px; }\n body.status-page .timeline h3 small {\n margin-left: 15px; }\n body.status-page .timeline .panel .panel-body h1, body.status-page .timeline .list-group.components .panel-body h1 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 2em; }\n body.status-page .timeline .panel .panel-body h2, body.status-page .timeline .list-group.components .panel-body h2 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.8em; }\n body.status-page .timeline .panel .panel-body h3, body.status-page .timeline .list-group.components .panel-body h3 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.6em; }\n body.status-page .timeline .panel .panel-body h4, body.status-page .timeline .list-group.components .panel-body h4 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.4em; }\n body.status-page .timeline .panel .panel-body h5, body.status-page .timeline .list-group.components .panel-body h5 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.2em; }\n body.status-page .timeline .panel .panel-body p, body.status-page .timeline .list-group.components .panel-body p {\n margin: 0; }\n body.status-page .timeline .moment {\n width: 100%;\n padding-bottom: 10px;\n position: relative; }\n body.status-page .timeline .moment.first:before {\n top: -5px; }\n body.status-page .timeline .moment:before {\n content: '';\n position: absolute;\n left: 26px;\n top: -5px;\n width: 2px;\n height: 100%;\n background: #7266BA; }\n body.status-page .timeline .moment .status-icon {\n background: #fff;\n width: 35px;\n height: 35px;\n border-radius: 50%;\n border: 1px solid #e8e8e8;\n position: absolute;\n left: 25px;\n top: 14px; }\n body.status-page .timeline .moment .status-icon .icon {\n position: absolute;\n top: 7px;\n left: 11px; }\n body.status-page .timeline .moment .status-icon .icon.ion-alert {\n left: 15px; }\n body.status-page .timeline .moment .status-icon.status-0 {\n color: #b23f73; }\n body.status-page .timeline .moment .status-icon.status-1 {\n color: #FF8800; }\n body.status-page .timeline .moment .status-icon.status-2 {\n color: #F7CA18; }\n body.status-page .timeline .moment .status-icon.status-3 {\n color: #3498db; }\n body.status-page .timeline .moment .status-icon.status-4 {\n color: #7ED321; }\n body.status-page .timeline .moment.last:before {\n background: #fff; }\n body.status-page .timeline .moment .panel, body.status-page .timeline .moment .list-group.components {\n margin: 0;\n border-radius: 2px; }\n body.status-page .timeline .moment .panel.panel-message, body.status-page .timeline .moment .panel-message.list-group.components {\n border: 1px solid #e8e8e8; }\n body.status-page .timeline .moment .panel.panel-message .date, body.status-page .timeline .moment .panel-message.list-group.components .date {\n color: #949494; }\n body.status-page .timeline .moment .panel.panel-message:before, body.status-page .timeline .moment .panel-message.list-group.components:before {\n position: absolute;\n top: 16px;\n left: 1px;\n display: inline-block;\n border-top: 15px solid transparent;\n border-left: 0 solid #e8e8e8;\n border-right: 15px solid #e8e8e8;\n border-bottom: 15px solid transparent;\n content: \" \"; }\n body.status-page .timeline .moment .panel.panel-message:after, body.status-page .timeline .moment .panel-message.list-group.components:after {\n position: absolute;\n top: 17px;\n left: 2px;\n display: inline-block;\n border-top: 14px solid transparent;\n border-left: 0 solid #fff;\n border-right: 14px solid #fff;\n border-bottom: 14px solid transparent;\n content: \" \"; }\n body.status-page .timeline .moment .panel .panel-heading strong, body.status-page .timeline .moment .list-group.components .panel-heading strong {\n font-size: 1.1em; }\n body.status-page .timeline .moment .panel .panel-body, body.status-page .timeline .moment .list-group.components .panel-body {\n border-top: 1px solid #eee; }\n body.status-page .timeline .moment .panel .panel-body p, body.status-page .timeline .moment .list-group.components .panel-body p {\n font-size: 1.1em; }\n body.status-page .timeline .moment .panel .panel-body p:not(:last-child), body.status-page .timeline .moment .list-group.components .panel-body p:not(:last-child) {\n margin-bottom: 10px; }\n @media (max-width: 767px) {\n body.status-page .timeline .moment .content {\n width: 100%; } }\n body.status-page .list-group {\n padding-left: 0; }\n body.status-page .list-group .list-group-item {\n border-radius: 0;\n background-color: #ffffff;\n border: 1px solid #e8e8e8;\n font-size: 1.1em;\n padding: 15px 15px; }\n body.status-page .list-group .list-group-item a {\n font-weight: 400; }\n body.status-page .list-group .list-group-item h4 {\n margin: 0;\n font-weight: 400;\n max-width: 90%; }\n body.status-page .list-group .list-group-item p:not(:last-child), body.status-page .list-group .list-group-item time:not(:last-child) {\n margin-bottom: 10px; }\n body.status-page .list-group .list-group-item time {\n margin-bottom: 0; }\n body.status-page .list-group .list-group-item i.icon {\n font-size: 21px;\n line-height: 24px;\n text-align: center;\n display: inline-block;\n min-width: 20px; }\n body.status-page .list-group .list-group-item.group-name {\n background-color: #e8e8e8;\n padding-top: 0.6em;\n padding-bottom: 0.6em;\n cursor: pointer;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n body.status-page .list-group .list-group-item.break {\n padding: 1px;\n background-color: #f0f3f4; }\n body.status-page .list-group.components {\n border-color: #e8e8e8; }\n body.status-page .list-group.components:last-child {\n margin-bottom: 30px; }\n body.status-page .list-group.components + .components {\n margin-top: 5px; }\n body.status-page .list-group.components p {\n margin-bottom: 10px; }\n body.status-page .list-group.components .badge {\n color: transparent; }\n body.status-page .list-group.components a {\n color: #333 !important; }\n body.status-page footer {\n position: absolute;\n width: 100%;\n bottom: 0;\n height: 60px;\n padding: 30px 0 60px 0;\n border-top: 1px solid #e8e8e8;\n color: #666;\n font-size: 13px;\n line-height: 30px;\n text-align: center;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }\n body.status-page footer .btn {\n text-shadow: none; }\n body.status-page footer .icons a.icon-link {\n display: inline-block;\n min-width: 30px;\n height: 30px;\n border-radius: 3px;\n background-color: #666;\n text-align: center;\n color: #e8e8e8;\n transition: all 0.15s;\n padding: 0 10px 0 10px; }\n body.status-page footer .icons a.icon-link.rss {\n background-color: #FF8800; }\n body.status-page footer .icons a.icon-link:hover {\n text-decoration: none;\n background-color: #4d4d4d; }\n body.status-page footer .list-inline > li {\n padding-right: 0; }\n @media (min-width: 768px) {\n body.status-page footer {\n text-align: left; }\n body.status-page footer .list-inline {\n text-align: right; }\n body.status-page footer .list-inline > li {\n padding-right: 0; }\n body.status-page footer .icons {\n margin-top: 0;\n text-align: right; } }\n body.status-page .section-timeline, body.status-page .section-components, body.status-page .section-metrics, body.status-page .section-scheduled {\n margin-top: 40px; }\n body.status-page .navbar-custom {\n padding-top: 10px;\n padding-bottom: 10px;\n width: 100%;\n border-radius: 0px;\n margin-bottom: 10px; }\n body.status-page .navbar-custom a.navbar-brand {\n font-size: 30px;\n font-weight: 600; }\n body.status-page .navbar-custom .navbar-nav li a {\n color: #333;\n font-size: 1.7rem; }\n body.status-page .navbar-custom .navbar-nav li a:hover {\n background-color: transparent; }\n","@import \"ionicons-variables\";\n/*!\n Ionicons, v#{$ionicons-version}\n Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n https://twitter.com/benjsperry https://twitter.com/ionicframework\n MIT License: https://github.com/driftyco/ionicons\n\n Android-style icons originally built by Google’s\n Material Design Icons: https://github.com/google/material-design-icons\n used under CC BY http://creativecommons.org/licenses/by/4.0/\n Modified icons to fit ionicon’s grid from original.\n*/\n\n@import \"ionicons-font\";\n@import \"ionicons-icons\";\n","// Ionicons Font Path\n// --------------------------\n\n@font-face {\n font-family: $ionicons-font-family;\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}\");\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix\") format(\"embedded-opentype\"),\n url(\"#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}\") format(\"truetype\"),\n url(\"#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}\") format(\"woff\"),\n url(\"#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.ion {\n display: inline-block;\n font-family: $ionicons-font-family;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}","// Ionicons Variables\n// --------------------------\n\n$ionicons-font-path: \"../fonts\" !default;\n$ionicons-font-family: \"Ionicons\" !default;\n$ionicons-version: \"2.0.1\" !default;\n$ionicons-prefix: ion- !default;\n\n$ionicon-var-alert: \"\\f101\";\n$ionicon-var-alert-circled: \"\\f100\";\n$ionicon-var-android-add: \"\\f2c7\";\n$ionicon-var-android-add-circle: \"\\f359\";\n$ionicon-var-android-alarm-clock: \"\\f35a\";\n$ionicon-var-android-alert: \"\\f35b\";\n$ionicon-var-android-apps: \"\\f35c\";\n$ionicon-var-android-archive: \"\\f2c9\";\n$ionicon-var-android-arrow-back: \"\\f2ca\";\n$ionicon-var-android-arrow-down: \"\\f35d\";\n$ionicon-var-android-arrow-dropdown: \"\\f35f\";\n$ionicon-var-android-arrow-dropdown-circle: \"\\f35e\";\n$ionicon-var-android-arrow-dropleft: \"\\f361\";\n$ionicon-var-android-arrow-dropleft-circle: \"\\f360\";\n$ionicon-var-android-arrow-dropright: \"\\f363\";\n$ionicon-var-android-arrow-dropright-circle: \"\\f362\";\n$ionicon-var-android-arrow-dropup: \"\\f365\";\n$ionicon-var-android-arrow-dropup-circle: \"\\f364\";\n$ionicon-var-android-arrow-forward: \"\\f30f\";\n$ionicon-var-android-arrow-up: \"\\f366\";\n$ionicon-var-android-attach: \"\\f367\";\n$ionicon-var-android-bar: \"\\f368\";\n$ionicon-var-android-bicycle: \"\\f369\";\n$ionicon-var-android-boat: \"\\f36a\";\n$ionicon-var-android-bookmark: \"\\f36b\";\n$ionicon-var-android-bulb: \"\\f36c\";\n$ionicon-var-android-bus: \"\\f36d\";\n$ionicon-var-android-calendar: \"\\f2d1\";\n$ionicon-var-android-call: \"\\f2d2\";\n$ionicon-var-android-camera: \"\\f2d3\";\n$ionicon-var-android-cancel: \"\\f36e\";\n$ionicon-var-android-car: \"\\f36f\";\n$ionicon-var-android-cart: \"\\f370\";\n$ionicon-var-android-chat: \"\\f2d4\";\n$ionicon-var-android-checkbox: \"\\f374\";\n$ionicon-var-android-checkbox-blank: \"\\f371\";\n$ionicon-var-android-checkbox-outline: \"\\f373\";\n$ionicon-var-android-checkbox-outline-blank: \"\\f372\";\n$ionicon-var-android-checkmark-circle: \"\\f375\";\n$ionicon-var-android-clipboard: \"\\f376\";\n$ionicon-var-android-close: \"\\f2d7\";\n$ionicon-var-android-cloud: \"\\f37a\";\n$ionicon-var-android-cloud-circle: \"\\f377\";\n$ionicon-var-android-cloud-done: \"\\f378\";\n$ionicon-var-android-cloud-outline: \"\\f379\";\n$ionicon-var-android-color-palette: \"\\f37b\";\n$ionicon-var-android-compass: \"\\f37c\";\n$ionicon-var-android-contact: \"\\f2d8\";\n$ionicon-var-android-contacts: \"\\f2d9\";\n$ionicon-var-android-contract: \"\\f37d\";\n$ionicon-var-android-create: \"\\f37e\";\n$ionicon-var-android-delete: \"\\f37f\";\n$ionicon-var-android-desktop: \"\\f380\";\n$ionicon-var-android-document: \"\\f381\";\n$ionicon-var-android-done: \"\\f383\";\n$ionicon-var-android-done-all: \"\\f382\";\n$ionicon-var-android-download: \"\\f2dd\";\n$ionicon-var-android-drafts: \"\\f384\";\n$ionicon-var-android-exit: \"\\f385\";\n$ionicon-var-android-expand: \"\\f386\";\n$ionicon-var-android-favorite: \"\\f388\";\n$ionicon-var-android-favorite-outline: \"\\f387\";\n$ionicon-var-android-film: \"\\f389\";\n$ionicon-var-android-folder: \"\\f2e0\";\n$ionicon-var-android-folder-open: \"\\f38a\";\n$ionicon-var-android-funnel: \"\\f38b\";\n$ionicon-var-android-globe: \"\\f38c\";\n$ionicon-var-android-hand: \"\\f2e3\";\n$ionicon-var-android-hangout: \"\\f38d\";\n$ionicon-var-android-happy: \"\\f38e\";\n$ionicon-var-android-home: \"\\f38f\";\n$ionicon-var-android-image: \"\\f2e4\";\n$ionicon-var-android-laptop: \"\\f390\";\n$ionicon-var-android-list: \"\\f391\";\n$ionicon-var-android-locate: \"\\f2e9\";\n$ionicon-var-android-lock: \"\\f392\";\n$ionicon-var-android-mail: \"\\f2eb\";\n$ionicon-var-android-map: \"\\f393\";\n$ionicon-var-android-menu: \"\\f394\";\n$ionicon-var-android-microphone: \"\\f2ec\";\n$ionicon-var-android-microphone-off: \"\\f395\";\n$ionicon-var-android-more-horizontal: \"\\f396\";\n$ionicon-var-android-more-vertical: \"\\f397\";\n$ionicon-var-android-navigate: \"\\f398\";\n$ionicon-var-android-notifications: \"\\f39b\";\n$ionicon-var-android-notifications-none: \"\\f399\";\n$ionicon-var-android-notifications-off: \"\\f39a\";\n$ionicon-var-android-open: \"\\f39c\";\n$ionicon-var-android-options: \"\\f39d\";\n$ionicon-var-android-people: \"\\f39e\";\n$ionicon-var-android-person: \"\\f3a0\";\n$ionicon-var-android-person-add: \"\\f39f\";\n$ionicon-var-android-phone-landscape: \"\\f3a1\";\n$ionicon-var-android-phone-portrait: \"\\f3a2\";\n$ionicon-var-android-pin: \"\\f3a3\";\n$ionicon-var-android-plane: \"\\f3a4\";\n$ionicon-var-android-playstore: \"\\f2f0\";\n$ionicon-var-android-print: \"\\f3a5\";\n$ionicon-var-android-radio-button-off: \"\\f3a6\";\n$ionicon-var-android-radio-button-on: \"\\f3a7\";\n$ionicon-var-android-refresh: \"\\f3a8\";\n$ionicon-var-android-remove: \"\\f2f4\";\n$ionicon-var-android-remove-circle: \"\\f3a9\";\n$ionicon-var-android-restaurant: \"\\f3aa\";\n$ionicon-var-android-sad: \"\\f3ab\";\n$ionicon-var-android-search: \"\\f2f5\";\n$ionicon-var-android-send: \"\\f2f6\";\n$ionicon-var-android-settings: \"\\f2f7\";\n$ionicon-var-android-share: \"\\f2f8\";\n$ionicon-var-android-share-alt: \"\\f3ac\";\n$ionicon-var-android-star: \"\\f2fc\";\n$ionicon-var-android-star-half: \"\\f3ad\";\n$ionicon-var-android-star-outline: \"\\f3ae\";\n$ionicon-var-android-stopwatch: \"\\f2fd\";\n$ionicon-var-android-subway: \"\\f3af\";\n$ionicon-var-android-sunny: \"\\f3b0\";\n$ionicon-var-android-sync: \"\\f3b1\";\n$ionicon-var-android-textsms: \"\\f3b2\";\n$ionicon-var-android-time: \"\\f3b3\";\n$ionicon-var-android-train: \"\\f3b4\";\n$ionicon-var-android-unlock: \"\\f3b5\";\n$ionicon-var-android-upload: \"\\f3b6\";\n$ionicon-var-android-volume-down: \"\\f3b7\";\n$ionicon-var-android-volume-mute: \"\\f3b8\";\n$ionicon-var-android-volume-off: \"\\f3b9\";\n$ionicon-var-android-volume-up: \"\\f3ba\";\n$ionicon-var-android-walk: \"\\f3bb\";\n$ionicon-var-android-warning: \"\\f3bc\";\n$ionicon-var-android-watch: \"\\f3bd\";\n$ionicon-var-android-wifi: \"\\f305\";\n$ionicon-var-aperture: \"\\f313\";\n$ionicon-var-archive: \"\\f102\";\n$ionicon-var-arrow-down-a: \"\\f103\";\n$ionicon-var-arrow-down-b: \"\\f104\";\n$ionicon-var-arrow-down-c: \"\\f105\";\n$ionicon-var-arrow-expand: \"\\f25e\";\n$ionicon-var-arrow-graph-down-left: \"\\f25f\";\n$ionicon-var-arrow-graph-down-right: \"\\f260\";\n$ionicon-var-arrow-graph-up-left: \"\\f261\";\n$ionicon-var-arrow-graph-up-right: \"\\f262\";\n$ionicon-var-arrow-left-a: \"\\f106\";\n$ionicon-var-arrow-left-b: \"\\f107\";\n$ionicon-var-arrow-left-c: \"\\f108\";\n$ionicon-var-arrow-move: \"\\f263\";\n$ionicon-var-arrow-resize: \"\\f264\";\n$ionicon-var-arrow-return-left: \"\\f265\";\n$ionicon-var-arrow-return-right: \"\\f266\";\n$ionicon-var-arrow-right-a: \"\\f109\";\n$ionicon-var-arrow-right-b: \"\\f10a\";\n$ionicon-var-arrow-right-c: \"\\f10b\";\n$ionicon-var-arrow-shrink: \"\\f267\";\n$ionicon-var-arrow-swap: \"\\f268\";\n$ionicon-var-arrow-up-a: \"\\f10c\";\n$ionicon-var-arrow-up-b: \"\\f10d\";\n$ionicon-var-arrow-up-c: \"\\f10e\";\n$ionicon-var-asterisk: \"\\f314\";\n$ionicon-var-at: \"\\f10f\";\n$ionicon-var-backspace: \"\\f3bf\";\n$ionicon-var-backspace-outline: \"\\f3be\";\n$ionicon-var-bag: \"\\f110\";\n$ionicon-var-battery-charging: \"\\f111\";\n$ionicon-var-battery-empty: \"\\f112\";\n$ionicon-var-battery-full: \"\\f113\";\n$ionicon-var-battery-half: \"\\f114\";\n$ionicon-var-battery-low: \"\\f115\";\n$ionicon-var-beaker: \"\\f269\";\n$ionicon-var-beer: \"\\f26a\";\n$ionicon-var-bluetooth: \"\\f116\";\n$ionicon-var-bonfire: \"\\f315\";\n$ionicon-var-bookmark: \"\\f26b\";\n$ionicon-var-bowtie: \"\\f3c0\";\n$ionicon-var-briefcase: \"\\f26c\";\n$ionicon-var-bug: \"\\f2be\";\n$ionicon-var-calculator: \"\\f26d\";\n$ionicon-var-calendar: \"\\f117\";\n$ionicon-var-camera: \"\\f118\";\n$ionicon-var-card: \"\\f119\";\n$ionicon-var-cash: \"\\f316\";\n$ionicon-var-chatbox: \"\\f11b\";\n$ionicon-var-chatbox-working: \"\\f11a\";\n$ionicon-var-chatboxes: \"\\f11c\";\n$ionicon-var-chatbubble: \"\\f11e\";\n$ionicon-var-chatbubble-working: \"\\f11d\";\n$ionicon-var-chatbubbles: \"\\f11f\";\n$ionicon-var-checkmark: \"\\f122\";\n$ionicon-var-checkmark-circled: \"\\f120\";\n$ionicon-var-checkmark-round: \"\\f121\";\n$ionicon-var-chevron-down: \"\\f123\";\n$ionicon-var-chevron-left: \"\\f124\";\n$ionicon-var-chevron-right: \"\\f125\";\n$ionicon-var-chevron-up: \"\\f126\";\n$ionicon-var-clipboard: \"\\f127\";\n$ionicon-var-clock: \"\\f26e\";\n$ionicon-var-close: \"\\f12a\";\n$ionicon-var-close-circled: \"\\f128\";\n$ionicon-var-close-round: \"\\f129\";\n$ionicon-var-closed-captioning: \"\\f317\";\n$ionicon-var-cloud: \"\\f12b\";\n$ionicon-var-code: \"\\f271\";\n$ionicon-var-code-download: \"\\f26f\";\n$ionicon-var-code-working: \"\\f270\";\n$ionicon-var-coffee: \"\\f272\";\n$ionicon-var-compass: \"\\f273\";\n$ionicon-var-compose: \"\\f12c\";\n$ionicon-var-connection-bars: \"\\f274\";\n$ionicon-var-contrast: \"\\f275\";\n$ionicon-var-crop: \"\\f3c1\";\n$ionicon-var-cube: \"\\f318\";\n$ionicon-var-disc: \"\\f12d\";\n$ionicon-var-document: \"\\f12f\";\n$ionicon-var-document-text: \"\\f12e\";\n$ionicon-var-drag: \"\\f130\";\n$ionicon-var-earth: \"\\f276\";\n$ionicon-var-easel: \"\\f3c2\";\n$ionicon-var-edit: \"\\f2bf\";\n$ionicon-var-egg: \"\\f277\";\n$ionicon-var-eject: \"\\f131\";\n$ionicon-var-email: \"\\f132\";\n$ionicon-var-email-unread: \"\\f3c3\";\n$ionicon-var-erlenmeyer-flask: \"\\f3c5\";\n$ionicon-var-erlenmeyer-flask-bubbles: \"\\f3c4\";\n$ionicon-var-eye: \"\\f133\";\n$ionicon-var-eye-disabled: \"\\f306\";\n$ionicon-var-female: \"\\f278\";\n$ionicon-var-filing: \"\\f134\";\n$ionicon-var-film-marker: \"\\f135\";\n$ionicon-var-fireball: \"\\f319\";\n$ionicon-var-flag: \"\\f279\";\n$ionicon-var-flame: \"\\f31a\";\n$ionicon-var-flash: \"\\f137\";\n$ionicon-var-flash-off: \"\\f136\";\n$ionicon-var-folder: \"\\f139\";\n$ionicon-var-fork: \"\\f27a\";\n$ionicon-var-fork-repo: \"\\f2c0\";\n$ionicon-var-forward: \"\\f13a\";\n$ionicon-var-funnel: \"\\f31b\";\n$ionicon-var-gear-a: \"\\f13d\";\n$ionicon-var-gear-b: \"\\f13e\";\n$ionicon-var-grid: \"\\f13f\";\n$ionicon-var-hammer: \"\\f27b\";\n$ionicon-var-happy: \"\\f31c\";\n$ionicon-var-happy-outline: \"\\f3c6\";\n$ionicon-var-headphone: \"\\f140\";\n$ionicon-var-heart: \"\\f141\";\n$ionicon-var-heart-broken: \"\\f31d\";\n$ionicon-var-help: \"\\f143\";\n$ionicon-var-help-buoy: \"\\f27c\";\n$ionicon-var-help-circled: \"\\f142\";\n$ionicon-var-home: \"\\f144\";\n$ionicon-var-icecream: \"\\f27d\";\n$ionicon-var-image: \"\\f147\";\n$ionicon-var-images: \"\\f148\";\n$ionicon-var-information: \"\\f14a\";\n$ionicon-var-information-circled: \"\\f149\";\n$ionicon-var-ionic: \"\\f14b\";\n$ionicon-var-ios-alarm: \"\\f3c8\";\n$ionicon-var-ios-alarm-outline: \"\\f3c7\";\n$ionicon-var-ios-albums: \"\\f3ca\";\n$ionicon-var-ios-albums-outline: \"\\f3c9\";\n$ionicon-var-ios-americanfootball: \"\\f3cc\";\n$ionicon-var-ios-americanfootball-outline: \"\\f3cb\";\n$ionicon-var-ios-analytics: \"\\f3ce\";\n$ionicon-var-ios-analytics-outline: \"\\f3cd\";\n$ionicon-var-ios-arrow-back: \"\\f3cf\";\n$ionicon-var-ios-arrow-down: \"\\f3d0\";\n$ionicon-var-ios-arrow-forward: \"\\f3d1\";\n$ionicon-var-ios-arrow-left: \"\\f3d2\";\n$ionicon-var-ios-arrow-right: \"\\f3d3\";\n$ionicon-var-ios-arrow-thin-down: \"\\f3d4\";\n$ionicon-var-ios-arrow-thin-left: \"\\f3d5\";\n$ionicon-var-ios-arrow-thin-right: \"\\f3d6\";\n$ionicon-var-ios-arrow-thin-up: \"\\f3d7\";\n$ionicon-var-ios-arrow-up: \"\\f3d8\";\n$ionicon-var-ios-at: \"\\f3da\";\n$ionicon-var-ios-at-outline: \"\\f3d9\";\n$ionicon-var-ios-barcode: \"\\f3dc\";\n$ionicon-var-ios-barcode-outline: \"\\f3db\";\n$ionicon-var-ios-baseball: \"\\f3de\";\n$ionicon-var-ios-baseball-outline: \"\\f3dd\";\n$ionicon-var-ios-basketball: \"\\f3e0\";\n$ionicon-var-ios-basketball-outline: \"\\f3df\";\n$ionicon-var-ios-bell: \"\\f3e2\";\n$ionicon-var-ios-bell-outline: \"\\f3e1\";\n$ionicon-var-ios-body: \"\\f3e4\";\n$ionicon-var-ios-body-outline: \"\\f3e3\";\n$ionicon-var-ios-bolt: \"\\f3e6\";\n$ionicon-var-ios-bolt-outline: \"\\f3e5\";\n$ionicon-var-ios-book: \"\\f3e8\";\n$ionicon-var-ios-book-outline: \"\\f3e7\";\n$ionicon-var-ios-bookmarks: \"\\f3ea\";\n$ionicon-var-ios-bookmarks-outline: \"\\f3e9\";\n$ionicon-var-ios-box: \"\\f3ec\";\n$ionicon-var-ios-box-outline: \"\\f3eb\";\n$ionicon-var-ios-briefcase: \"\\f3ee\";\n$ionicon-var-ios-briefcase-outline: \"\\f3ed\";\n$ionicon-var-ios-browsers: \"\\f3f0\";\n$ionicon-var-ios-browsers-outline: \"\\f3ef\";\n$ionicon-var-ios-calculator: \"\\f3f2\";\n$ionicon-var-ios-calculator-outline: \"\\f3f1\";\n$ionicon-var-ios-calendar: \"\\f3f4\";\n$ionicon-var-ios-calendar-outline: \"\\f3f3\";\n$ionicon-var-ios-camera: \"\\f3f6\";\n$ionicon-var-ios-camera-outline: \"\\f3f5\";\n$ionicon-var-ios-cart: \"\\f3f8\";\n$ionicon-var-ios-cart-outline: \"\\f3f7\";\n$ionicon-var-ios-chatboxes: \"\\f3fa\";\n$ionicon-var-ios-chatboxes-outline: \"\\f3f9\";\n$ionicon-var-ios-chatbubble: \"\\f3fc\";\n$ionicon-var-ios-chatbubble-outline: \"\\f3fb\";\n$ionicon-var-ios-checkmark: \"\\f3ff\";\n$ionicon-var-ios-checkmark-empty: \"\\f3fd\";\n$ionicon-var-ios-checkmark-outline: \"\\f3fe\";\n$ionicon-var-ios-circle-filled: \"\\f400\";\n$ionicon-var-ios-circle-outline: \"\\f401\";\n$ionicon-var-ios-clock: \"\\f403\";\n$ionicon-var-ios-clock-outline: \"\\f402\";\n$ionicon-var-ios-close: \"\\f406\";\n$ionicon-var-ios-close-empty: \"\\f404\";\n$ionicon-var-ios-close-outline: \"\\f405\";\n$ionicon-var-ios-cloud: \"\\f40c\";\n$ionicon-var-ios-cloud-download: \"\\f408\";\n$ionicon-var-ios-cloud-download-outline: \"\\f407\";\n$ionicon-var-ios-cloud-outline: \"\\f409\";\n$ionicon-var-ios-cloud-upload: \"\\f40b\";\n$ionicon-var-ios-cloud-upload-outline: \"\\f40a\";\n$ionicon-var-ios-cloudy: \"\\f410\";\n$ionicon-var-ios-cloudy-night: \"\\f40e\";\n$ionicon-var-ios-cloudy-night-outline: \"\\f40d\";\n$ionicon-var-ios-cloudy-outline: \"\\f40f\";\n$ionicon-var-ios-cog: \"\\f412\";\n$ionicon-var-ios-cog-outline: \"\\f411\";\n$ionicon-var-ios-color-filter: \"\\f414\";\n$ionicon-var-ios-color-filter-outline: \"\\f413\";\n$ionicon-var-ios-color-wand: \"\\f416\";\n$ionicon-var-ios-color-wand-outline: \"\\f415\";\n$ionicon-var-ios-compose: \"\\f418\";\n$ionicon-var-ios-compose-outline: \"\\f417\";\n$ionicon-var-ios-contact: \"\\f41a\";\n$ionicon-var-ios-contact-outline: \"\\f419\";\n$ionicon-var-ios-copy: \"\\f41c\";\n$ionicon-var-ios-copy-outline: \"\\f41b\";\n$ionicon-var-ios-crop: \"\\f41e\";\n$ionicon-var-ios-crop-strong: \"\\f41d\";\n$ionicon-var-ios-download: \"\\f420\";\n$ionicon-var-ios-download-outline: \"\\f41f\";\n$ionicon-var-ios-drag: \"\\f421\";\n$ionicon-var-ios-email: \"\\f423\";\n$ionicon-var-ios-email-outline: \"\\f422\";\n$ionicon-var-ios-eye: \"\\f425\";\n$ionicon-var-ios-eye-outline: \"\\f424\";\n$ionicon-var-ios-fastforward: \"\\f427\";\n$ionicon-var-ios-fastforward-outline: \"\\f426\";\n$ionicon-var-ios-filing: \"\\f429\";\n$ionicon-var-ios-filing-outline: \"\\f428\";\n$ionicon-var-ios-film: \"\\f42b\";\n$ionicon-var-ios-film-outline: \"\\f42a\";\n$ionicon-var-ios-flag: \"\\f42d\";\n$ionicon-var-ios-flag-outline: \"\\f42c\";\n$ionicon-var-ios-flame: \"\\f42f\";\n$ionicon-var-ios-flame-outline: \"\\f42e\";\n$ionicon-var-ios-flask: \"\\f431\";\n$ionicon-var-ios-flask-outline: \"\\f430\";\n$ionicon-var-ios-flower: \"\\f433\";\n$ionicon-var-ios-flower-outline: \"\\f432\";\n$ionicon-var-ios-folder: \"\\f435\";\n$ionicon-var-ios-folder-outline: \"\\f434\";\n$ionicon-var-ios-football: \"\\f437\";\n$ionicon-var-ios-football-outline: \"\\f436\";\n$ionicon-var-ios-game-controller-a: \"\\f439\";\n$ionicon-var-ios-game-controller-a-outline: \"\\f438\";\n$ionicon-var-ios-game-controller-b: \"\\f43b\";\n$ionicon-var-ios-game-controller-b-outline: \"\\f43a\";\n$ionicon-var-ios-gear: \"\\f43d\";\n$ionicon-var-ios-gear-outline: \"\\f43c\";\n$ionicon-var-ios-glasses: \"\\f43f\";\n$ionicon-var-ios-glasses-outline: \"\\f43e\";\n$ionicon-var-ios-grid-view: \"\\f441\";\n$ionicon-var-ios-grid-view-outline: \"\\f440\";\n$ionicon-var-ios-heart: \"\\f443\";\n$ionicon-var-ios-heart-outline: \"\\f442\";\n$ionicon-var-ios-help: \"\\f446\";\n$ionicon-var-ios-help-empty: \"\\f444\";\n$ionicon-var-ios-help-outline: \"\\f445\";\n$ionicon-var-ios-home: \"\\f448\";\n$ionicon-var-ios-home-outline: \"\\f447\";\n$ionicon-var-ios-infinite: \"\\f44a\";\n$ionicon-var-ios-infinite-outline: \"\\f449\";\n$ionicon-var-ios-information: \"\\f44d\";\n$ionicon-var-ios-information-empty: \"\\f44b\";\n$ionicon-var-ios-information-outline: \"\\f44c\";\n$ionicon-var-ios-ionic-outline: \"\\f44e\";\n$ionicon-var-ios-keypad: \"\\f450\";\n$ionicon-var-ios-keypad-outline: \"\\f44f\";\n$ionicon-var-ios-lightbulb: \"\\f452\";\n$ionicon-var-ios-lightbulb-outline: \"\\f451\";\n$ionicon-var-ios-list: \"\\f454\";\n$ionicon-var-ios-list-outline: \"\\f453\";\n$ionicon-var-ios-location: \"\\f456\";\n$ionicon-var-ios-location-outline: \"\\f455\";\n$ionicon-var-ios-locked: \"\\f458\";\n$ionicon-var-ios-locked-outline: \"\\f457\";\n$ionicon-var-ios-loop: \"\\f45a\";\n$ionicon-var-ios-loop-strong: \"\\f459\";\n$ionicon-var-ios-medical: \"\\f45c\";\n$ionicon-var-ios-medical-outline: \"\\f45b\";\n$ionicon-var-ios-medkit: \"\\f45e\";\n$ionicon-var-ios-medkit-outline: \"\\f45d\";\n$ionicon-var-ios-mic: \"\\f461\";\n$ionicon-var-ios-mic-off: \"\\f45f\";\n$ionicon-var-ios-mic-outline: \"\\f460\";\n$ionicon-var-ios-minus: \"\\f464\";\n$ionicon-var-ios-minus-empty: \"\\f462\";\n$ionicon-var-ios-minus-outline: \"\\f463\";\n$ionicon-var-ios-monitor: \"\\f466\";\n$ionicon-var-ios-monitor-outline: \"\\f465\";\n$ionicon-var-ios-moon: \"\\f468\";\n$ionicon-var-ios-moon-outline: \"\\f467\";\n$ionicon-var-ios-more: \"\\f46a\";\n$ionicon-var-ios-more-outline: \"\\f469\";\n$ionicon-var-ios-musical-note: \"\\f46b\";\n$ionicon-var-ios-musical-notes: \"\\f46c\";\n$ionicon-var-ios-navigate: \"\\f46e\";\n$ionicon-var-ios-navigate-outline: \"\\f46d\";\n$ionicon-var-ios-nutrition: \"\\f470\";\n$ionicon-var-ios-nutrition-outline: \"\\f46f\";\n$ionicon-var-ios-paper: \"\\f472\";\n$ionicon-var-ios-paper-outline: \"\\f471\";\n$ionicon-var-ios-paperplane: \"\\f474\";\n$ionicon-var-ios-paperplane-outline: \"\\f473\";\n$ionicon-var-ios-partlysunny: \"\\f476\";\n$ionicon-var-ios-partlysunny-outline: \"\\f475\";\n$ionicon-var-ios-pause: \"\\f478\";\n$ionicon-var-ios-pause-outline: \"\\f477\";\n$ionicon-var-ios-paw: \"\\f47a\";\n$ionicon-var-ios-paw-outline: \"\\f479\";\n$ionicon-var-ios-people: \"\\f47c\";\n$ionicon-var-ios-people-outline: \"\\f47b\";\n$ionicon-var-ios-person: \"\\f47e\";\n$ionicon-var-ios-person-outline: \"\\f47d\";\n$ionicon-var-ios-personadd: \"\\f480\";\n$ionicon-var-ios-personadd-outline: \"\\f47f\";\n$ionicon-var-ios-photos: \"\\f482\";\n$ionicon-var-ios-photos-outline: \"\\f481\";\n$ionicon-var-ios-pie: \"\\f484\";\n$ionicon-var-ios-pie-outline: \"\\f483\";\n$ionicon-var-ios-pint: \"\\f486\";\n$ionicon-var-ios-pint-outline: \"\\f485\";\n$ionicon-var-ios-play: \"\\f488\";\n$ionicon-var-ios-play-outline: \"\\f487\";\n$ionicon-var-ios-plus: \"\\f48b\";\n$ionicon-var-ios-plus-empty: \"\\f489\";\n$ionicon-var-ios-plus-outline: \"\\f48a\";\n$ionicon-var-ios-pricetag: \"\\f48d\";\n$ionicon-var-ios-pricetag-outline: \"\\f48c\";\n$ionicon-var-ios-pricetags: \"\\f48f\";\n$ionicon-var-ios-pricetags-outline: \"\\f48e\";\n$ionicon-var-ios-printer: \"\\f491\";\n$ionicon-var-ios-printer-outline: \"\\f490\";\n$ionicon-var-ios-pulse: \"\\f493\";\n$ionicon-var-ios-pulse-strong: \"\\f492\";\n$ionicon-var-ios-rainy: \"\\f495\";\n$ionicon-var-ios-rainy-outline: \"\\f494\";\n$ionicon-var-ios-recording: \"\\f497\";\n$ionicon-var-ios-recording-outline: \"\\f496\";\n$ionicon-var-ios-redo: \"\\f499\";\n$ionicon-var-ios-redo-outline: \"\\f498\";\n$ionicon-var-ios-refresh: \"\\f49c\";\n$ionicon-var-ios-refresh-empty: \"\\f49a\";\n$ionicon-var-ios-refresh-outline: \"\\f49b\";\n$ionicon-var-ios-reload: \"\\f49d\";\n$ionicon-var-ios-reverse-camera: \"\\f49f\";\n$ionicon-var-ios-reverse-camera-outline: \"\\f49e\";\n$ionicon-var-ios-rewind: \"\\f4a1\";\n$ionicon-var-ios-rewind-outline: \"\\f4a0\";\n$ionicon-var-ios-rose: \"\\f4a3\";\n$ionicon-var-ios-rose-outline: \"\\f4a2\";\n$ionicon-var-ios-search: \"\\f4a5\";\n$ionicon-var-ios-search-strong: \"\\f4a4\";\n$ionicon-var-ios-settings: \"\\f4a7\";\n$ionicon-var-ios-settings-strong: \"\\f4a6\";\n$ionicon-var-ios-shuffle: \"\\f4a9\";\n$ionicon-var-ios-shuffle-strong: \"\\f4a8\";\n$ionicon-var-ios-skipbackward: \"\\f4ab\";\n$ionicon-var-ios-skipbackward-outline: \"\\f4aa\";\n$ionicon-var-ios-skipforward: \"\\f4ad\";\n$ionicon-var-ios-skipforward-outline: \"\\f4ac\";\n$ionicon-var-ios-snowy: \"\\f4ae\";\n$ionicon-var-ios-speedometer: \"\\f4b0\";\n$ionicon-var-ios-speedometer-outline: \"\\f4af\";\n$ionicon-var-ios-star: \"\\f4b3\";\n$ionicon-var-ios-star-half: \"\\f4b1\";\n$ionicon-var-ios-star-outline: \"\\f4b2\";\n$ionicon-var-ios-stopwatch: \"\\f4b5\";\n$ionicon-var-ios-stopwatch-outline: \"\\f4b4\";\n$ionicon-var-ios-sunny: \"\\f4b7\";\n$ionicon-var-ios-sunny-outline: \"\\f4b6\";\n$ionicon-var-ios-telephone: \"\\f4b9\";\n$ionicon-var-ios-telephone-outline: \"\\f4b8\";\n$ionicon-var-ios-tennisball: \"\\f4bb\";\n$ionicon-var-ios-tennisball-outline: \"\\f4ba\";\n$ionicon-var-ios-thunderstorm: \"\\f4bd\";\n$ionicon-var-ios-thunderstorm-outline: \"\\f4bc\";\n$ionicon-var-ios-time: \"\\f4bf\";\n$ionicon-var-ios-time-outline: \"\\f4be\";\n$ionicon-var-ios-timer: \"\\f4c1\";\n$ionicon-var-ios-timer-outline: \"\\f4c0\";\n$ionicon-var-ios-toggle: \"\\f4c3\";\n$ionicon-var-ios-toggle-outline: \"\\f4c2\";\n$ionicon-var-ios-trash: \"\\f4c5\";\n$ionicon-var-ios-trash-outline: \"\\f4c4\";\n$ionicon-var-ios-undo: \"\\f4c7\";\n$ionicon-var-ios-undo-outline: \"\\f4c6\";\n$ionicon-var-ios-unlocked: \"\\f4c9\";\n$ionicon-var-ios-unlocked-outline: \"\\f4c8\";\n$ionicon-var-ios-upload: \"\\f4cb\";\n$ionicon-var-ios-upload-outline: \"\\f4ca\";\n$ionicon-var-ios-videocam: \"\\f4cd\";\n$ionicon-var-ios-videocam-outline: \"\\f4cc\";\n$ionicon-var-ios-volume-high: \"\\f4ce\";\n$ionicon-var-ios-volume-low: \"\\f4cf\";\n$ionicon-var-ios-wineglass: \"\\f4d1\";\n$ionicon-var-ios-wineglass-outline: \"\\f4d0\";\n$ionicon-var-ios-world: \"\\f4d3\";\n$ionicon-var-ios-world-outline: \"\\f4d2\";\n$ionicon-var-ipad: \"\\f1f9\";\n$ionicon-var-iphone: \"\\f1fa\";\n$ionicon-var-ipod: \"\\f1fb\";\n$ionicon-var-jet: \"\\f295\";\n$ionicon-var-key: \"\\f296\";\n$ionicon-var-knife: \"\\f297\";\n$ionicon-var-laptop: \"\\f1fc\";\n$ionicon-var-leaf: \"\\f1fd\";\n$ionicon-var-levels: \"\\f298\";\n$ionicon-var-lightbulb: \"\\f299\";\n$ionicon-var-link: \"\\f1fe\";\n$ionicon-var-load-a: \"\\f29a\";\n$ionicon-var-load-b: \"\\f29b\";\n$ionicon-var-load-c: \"\\f29c\";\n$ionicon-var-load-d: \"\\f29d\";\n$ionicon-var-location: \"\\f1ff\";\n$ionicon-var-lock-combination: \"\\f4d4\";\n$ionicon-var-locked: \"\\f200\";\n$ionicon-var-log-in: \"\\f29e\";\n$ionicon-var-log-out: \"\\f29f\";\n$ionicon-var-loop: \"\\f201\";\n$ionicon-var-magnet: \"\\f2a0\";\n$ionicon-var-male: \"\\f2a1\";\n$ionicon-var-man: \"\\f202\";\n$ionicon-var-map: \"\\f203\";\n$ionicon-var-medkit: \"\\f2a2\";\n$ionicon-var-merge: \"\\f33f\";\n$ionicon-var-mic-a: \"\\f204\";\n$ionicon-var-mic-b: \"\\f205\";\n$ionicon-var-mic-c: \"\\f206\";\n$ionicon-var-minus: \"\\f209\";\n$ionicon-var-minus-circled: \"\\f207\";\n$ionicon-var-minus-round: \"\\f208\";\n$ionicon-var-model-s: \"\\f2c1\";\n$ionicon-var-monitor: \"\\f20a\";\n$ionicon-var-more: \"\\f20b\";\n$ionicon-var-mouse: \"\\f340\";\n$ionicon-var-music-note: \"\\f20c\";\n$ionicon-var-navicon: \"\\f20e\";\n$ionicon-var-navicon-round: \"\\f20d\";\n$ionicon-var-navigate: \"\\f2a3\";\n$ionicon-var-network: \"\\f341\";\n$ionicon-var-no-smoking: \"\\f2c2\";\n$ionicon-var-nuclear: \"\\f2a4\";\n$ionicon-var-outlet: \"\\f342\";\n$ionicon-var-paintbrush: \"\\f4d5\";\n$ionicon-var-paintbucket: \"\\f4d6\";\n$ionicon-var-paper-airplane: \"\\f2c3\";\n$ionicon-var-paperclip: \"\\f20f\";\n$ionicon-var-pause: \"\\f210\";\n$ionicon-var-person: \"\\f213\";\n$ionicon-var-person-add: \"\\f211\";\n$ionicon-var-person-stalker: \"\\f212\";\n$ionicon-var-pie-graph: \"\\f2a5\";\n$ionicon-var-pin: \"\\f2a6\";\n$ionicon-var-pinpoint: \"\\f2a7\";\n$ionicon-var-pizza: \"\\f2a8\";\n$ionicon-var-plane: \"\\f214\";\n$ionicon-var-planet: \"\\f343\";\n$ionicon-var-play: \"\\f215\";\n$ionicon-var-playstation: \"\\f30a\";\n$ionicon-var-plus: \"\\f218\";\n$ionicon-var-plus-circled: \"\\f216\";\n$ionicon-var-plus-round: \"\\f217\";\n$ionicon-var-podium: \"\\f344\";\n$ionicon-var-pound: \"\\f219\";\n$ionicon-var-power: \"\\f2a9\";\n$ionicon-var-pricetag: \"\\f2aa\";\n$ionicon-var-pricetags: \"\\f2ab\";\n$ionicon-var-printer: \"\\f21a\";\n$ionicon-var-pull-request: \"\\f345\";\n$ionicon-var-qr-scanner: \"\\f346\";\n$ionicon-var-quote: \"\\f347\";\n$ionicon-var-radio-waves: \"\\f2ac\";\n$ionicon-var-record: \"\\f21b\";\n$ionicon-var-refresh: \"\\f21c\";\n$ionicon-var-reply: \"\\f21e\";\n$ionicon-var-reply-all: \"\\f21d\";\n$ionicon-var-ribbon-a: \"\\f348\";\n$ionicon-var-ribbon-b: \"\\f349\";\n$ionicon-var-sad: \"\\f34a\";\n$ionicon-var-sad-outline: \"\\f4d7\";\n$ionicon-var-scissors: \"\\f34b\";\n$ionicon-var-search: \"\\f21f\";\n$ionicon-var-settings: \"\\f2ad\";\n$ionicon-var-share: \"\\f220\";\n$ionicon-var-shuffle: \"\\f221\";\n$ionicon-var-skip-backward: \"\\f222\";\n$ionicon-var-skip-forward: \"\\f223\";\n$ionicon-var-social-android: \"\\f225\";\n$ionicon-var-social-android-outline: \"\\f224\";\n$ionicon-var-social-angular: \"\\f4d9\";\n$ionicon-var-social-angular-outline: \"\\f4d8\";\n$ionicon-var-social-apple: \"\\f227\";\n$ionicon-var-social-apple-outline: \"\\f226\";\n$ionicon-var-social-bitcoin: \"\\f2af\";\n$ionicon-var-social-bitcoin-outline: \"\\f2ae\";\n$ionicon-var-social-buffer: \"\\f229\";\n$ionicon-var-social-buffer-outline: \"\\f228\";\n$ionicon-var-social-chrome: \"\\f4db\";\n$ionicon-var-social-chrome-outline: \"\\f4da\";\n$ionicon-var-social-codepen: \"\\f4dd\";\n$ionicon-var-social-codepen-outline: \"\\f4dc\";\n$ionicon-var-social-css3: \"\\f4df\";\n$ionicon-var-social-css3-outline: \"\\f4de\";\n$ionicon-var-social-designernews: \"\\f22b\";\n$ionicon-var-social-designernews-outline: \"\\f22a\";\n$ionicon-var-social-dribbble: \"\\f22d\";\n$ionicon-var-social-dribbble-outline: \"\\f22c\";\n$ionicon-var-social-dropbox: \"\\f22f\";\n$ionicon-var-social-dropbox-outline: \"\\f22e\";\n$ionicon-var-social-euro: \"\\f4e1\";\n$ionicon-var-social-euro-outline: \"\\f4e0\";\n$ionicon-var-social-facebook: \"\\f231\";\n$ionicon-var-social-facebook-outline: \"\\f230\";\n$ionicon-var-social-foursquare: \"\\f34d\";\n$ionicon-var-social-foursquare-outline: \"\\f34c\";\n$ionicon-var-social-freebsd-devil: \"\\f2c4\";\n$ionicon-var-social-github: \"\\f233\";\n$ionicon-var-social-github-outline: \"\\f232\";\n$ionicon-var-social-google: \"\\f34f\";\n$ionicon-var-social-google-outline: \"\\f34e\";\n$ionicon-var-social-googleplus: \"\\f235\";\n$ionicon-var-social-googleplus-outline: \"\\f234\";\n$ionicon-var-social-hackernews: \"\\f237\";\n$ionicon-var-social-hackernews-outline: \"\\f236\";\n$ionicon-var-social-html5: \"\\f4e3\";\n$ionicon-var-social-html5-outline: \"\\f4e2\";\n$ionicon-var-social-instagram: \"\\f351\";\n$ionicon-var-social-instagram-outline: \"\\f350\";\n$ionicon-var-social-javascript: \"\\f4e5\";\n$ionicon-var-social-javascript-outline: \"\\f4e4\";\n$ionicon-var-social-linkedin: \"\\f239\";\n$ionicon-var-social-linkedin-outline: \"\\f238\";\n$ionicon-var-social-markdown: \"\\f4e6\";\n$ionicon-var-social-nodejs: \"\\f4e7\";\n$ionicon-var-social-octocat: \"\\f4e8\";\n$ionicon-var-social-pinterest: \"\\f2b1\";\n$ionicon-var-social-pinterest-outline: \"\\f2b0\";\n$ionicon-var-social-python: \"\\f4e9\";\n$ionicon-var-social-reddit: \"\\f23b\";\n$ionicon-var-social-reddit-outline: \"\\f23a\";\n$ionicon-var-social-rss: \"\\f23d\";\n$ionicon-var-social-rss-outline: \"\\f23c\";\n$ionicon-var-social-sass: \"\\f4ea\";\n$ionicon-var-social-skype: \"\\f23f\";\n$ionicon-var-social-skype-outline: \"\\f23e\";\n$ionicon-var-social-snapchat: \"\\f4ec\";\n$ionicon-var-social-snapchat-outline: \"\\f4eb\";\n$ionicon-var-social-tumblr: \"\\f241\";\n$ionicon-var-social-tumblr-outline: \"\\f240\";\n$ionicon-var-social-tux: \"\\f2c5\";\n$ionicon-var-social-twitch: \"\\f4ee\";\n$ionicon-var-social-twitch-outline: \"\\f4ed\";\n$ionicon-var-social-twitter: \"\\f243\";\n$ionicon-var-social-twitter-outline: \"\\f242\";\n$ionicon-var-social-usd: \"\\f353\";\n$ionicon-var-social-usd-outline: \"\\f352\";\n$ionicon-var-social-vimeo: \"\\f245\";\n$ionicon-var-social-vimeo-outline: \"\\f244\";\n$ionicon-var-social-whatsapp: \"\\f4f0\";\n$ionicon-var-social-whatsapp-outline: \"\\f4ef\";\n$ionicon-var-social-windows: \"\\f247\";\n$ionicon-var-social-windows-outline: \"\\f246\";\n$ionicon-var-social-wordpress: \"\\f249\";\n$ionicon-var-social-wordpress-outline: \"\\f248\";\n$ionicon-var-social-yahoo: \"\\f24b\";\n$ionicon-var-social-yahoo-outline: \"\\f24a\";\n$ionicon-var-social-yen: \"\\f4f2\";\n$ionicon-var-social-yen-outline: \"\\f4f1\";\n$ionicon-var-social-youtube: \"\\f24d\";\n$ionicon-var-social-youtube-outline: \"\\f24c\";\n$ionicon-var-soup-can: \"\\f4f4\";\n$ionicon-var-soup-can-outline: \"\\f4f3\";\n$ionicon-var-speakerphone: \"\\f2b2\";\n$ionicon-var-speedometer: \"\\f2b3\";\n$ionicon-var-spoon: \"\\f2b4\";\n$ionicon-var-star: \"\\f24e\";\n$ionicon-var-stats-bars: \"\\f2b5\";\n$ionicon-var-steam: \"\\f30b\";\n$ionicon-var-stop: \"\\f24f\";\n$ionicon-var-thermometer: \"\\f2b6\";\n$ionicon-var-thumbsdown: \"\\f250\";\n$ionicon-var-thumbsup: \"\\f251\";\n$ionicon-var-toggle: \"\\f355\";\n$ionicon-var-toggle-filled: \"\\f354\";\n$ionicon-var-transgender: \"\\f4f5\";\n$ionicon-var-trash-a: \"\\f252\";\n$ionicon-var-trash-b: \"\\f253\";\n$ionicon-var-trophy: \"\\f356\";\n$ionicon-var-tshirt: \"\\f4f7\";\n$ionicon-var-tshirt-outline: \"\\f4f6\";\n$ionicon-var-umbrella: \"\\f2b7\";\n$ionicon-var-university: \"\\f357\";\n$ionicon-var-unlocked: \"\\f254\";\n$ionicon-var-upload: \"\\f255\";\n$ionicon-var-usb: \"\\f2b8\";\n$ionicon-var-videocamera: \"\\f256\";\n$ionicon-var-volume-high: \"\\f257\";\n$ionicon-var-volume-low: \"\\f258\";\n$ionicon-var-volume-medium: \"\\f259\";\n$ionicon-var-volume-mute: \"\\f25a\";\n$ionicon-var-wand: \"\\f358\";\n$ionicon-var-waterdrop: \"\\f25b\";\n$ionicon-var-wifi: \"\\f25c\";\n$ionicon-var-wineglass: \"\\f2b9\";\n$ionicon-var-woman: \"\\f25d\";\n$ionicon-var-wrench: \"\\f2ba\";\n$ionicon-var-xbox: \"\\f30c\";","// Ionicons Icons\n// --------------------------\n\n.ionicons,\n.#{$ionicons-prefix}alert:before,\n.#{$ionicons-prefix}alert-circled:before,\n.#{$ionicons-prefix}android-add:before,\n.#{$ionicons-prefix}android-add-circle:before,\n.#{$ionicons-prefix}android-alarm-clock:before,\n.#{$ionicons-prefix}android-alert:before,\n.#{$ionicons-prefix}android-apps:before,\n.#{$ionicons-prefix}android-archive:before,\n.#{$ionicons-prefix}android-arrow-back:before,\n.#{$ionicons-prefix}android-arrow-down:before,\n.#{$ionicons-prefix}android-arrow-dropdown:before,\n.#{$ionicons-prefix}android-arrow-dropdown-circle:before,\n.#{$ionicons-prefix}android-arrow-dropleft:before,\n.#{$ionicons-prefix}android-arrow-dropleft-circle:before,\n.#{$ionicons-prefix}android-arrow-dropright:before,\n.#{$ionicons-prefix}android-arrow-dropright-circle:before,\n.#{$ionicons-prefix}android-arrow-dropup:before,\n.#{$ionicons-prefix}android-arrow-dropup-circle:before,\n.#{$ionicons-prefix}android-arrow-forward:before,\n.#{$ionicons-prefix}android-arrow-up:before,\n.#{$ionicons-prefix}android-attach:before,\n.#{$ionicons-prefix}android-bar:before,\n.#{$ionicons-prefix}android-bicycle:before,\n.#{$ionicons-prefix}android-boat:before,\n.#{$ionicons-prefix}android-bookmark:before,\n.#{$ionicons-prefix}android-bulb:before,\n.#{$ionicons-prefix}android-bus:before,\n.#{$ionicons-prefix}android-calendar:before,\n.#{$ionicons-prefix}android-call:before,\n.#{$ionicons-prefix}android-camera:before,\n.#{$ionicons-prefix}android-cancel:before,\n.#{$ionicons-prefix}android-car:before,\n.#{$ionicons-prefix}android-cart:before,\n.#{$ionicons-prefix}android-chat:before,\n.#{$ionicons-prefix}android-checkbox:before,\n.#{$ionicons-prefix}android-checkbox-blank:before,\n.#{$ionicons-prefix}android-checkbox-outline:before,\n.#{$ionicons-prefix}android-checkbox-outline-blank:before,\n.#{$ionicons-prefix}android-checkmark-circle:before,\n.#{$ionicons-prefix}android-clipboard:before,\n.#{$ionicons-prefix}android-close:before,\n.#{$ionicons-prefix}android-cloud:before,\n.#{$ionicons-prefix}android-cloud-circle:before,\n.#{$ionicons-prefix}android-cloud-done:before,\n.#{$ionicons-prefix}android-cloud-outline:before,\n.#{$ionicons-prefix}android-color-palette:before,\n.#{$ionicons-prefix}android-compass:before,\n.#{$ionicons-prefix}android-contact:before,\n.#{$ionicons-prefix}android-contacts:before,\n.#{$ionicons-prefix}android-contract:before,\n.#{$ionicons-prefix}android-create:before,\n.#{$ionicons-prefix}android-delete:before,\n.#{$ionicons-prefix}android-desktop:before,\n.#{$ionicons-prefix}android-document:before,\n.#{$ionicons-prefix}android-done:before,\n.#{$ionicons-prefix}android-done-all:before,\n.#{$ionicons-prefix}android-download:before,\n.#{$ionicons-prefix}android-drafts:before,\n.#{$ionicons-prefix}android-exit:before,\n.#{$ionicons-prefix}android-expand:before,\n.#{$ionicons-prefix}android-favorite:before,\n.#{$ionicons-prefix}android-favorite-outline:before,\n.#{$ionicons-prefix}android-film:before,\n.#{$ionicons-prefix}android-folder:before,\n.#{$ionicons-prefix}android-folder-open:before,\n.#{$ionicons-prefix}android-funnel:before,\n.#{$ionicons-prefix}android-globe:before,\n.#{$ionicons-prefix}android-hand:before,\n.#{$ionicons-prefix}android-hangout:before,\n.#{$ionicons-prefix}android-happy:before,\n.#{$ionicons-prefix}android-home:before,\n.#{$ionicons-prefix}android-image:before,\n.#{$ionicons-prefix}android-laptop:before,\n.#{$ionicons-prefix}android-list:before,\n.#{$ionicons-prefix}android-locate:before,\n.#{$ionicons-prefix}android-lock:before,\n.#{$ionicons-prefix}android-mail:before,\n.#{$ionicons-prefix}android-map:before,\n.#{$ionicons-prefix}android-menu:before,\n.#{$ionicons-prefix}android-microphone:before,\n.#{$ionicons-prefix}android-microphone-off:before,\n.#{$ionicons-prefix}android-more-horizontal:before,\n.#{$ionicons-prefix}android-more-vertical:before,\n.#{$ionicons-prefix}android-navigate:before,\n.#{$ionicons-prefix}android-notifications:before,\n.#{$ionicons-prefix}android-notifications-none:before,\n.#{$ionicons-prefix}android-notifications-off:before,\n.#{$ionicons-prefix}android-open:before,\n.#{$ionicons-prefix}android-options:before,\n.#{$ionicons-prefix}android-people:before,\n.#{$ionicons-prefix}android-person:before,\n.#{$ionicons-prefix}android-person-add:before,\n.#{$ionicons-prefix}android-phone-landscape:before,\n.#{$ionicons-prefix}android-phone-portrait:before,\n.#{$ionicons-prefix}android-pin:before,\n.#{$ionicons-prefix}android-plane:before,\n.#{$ionicons-prefix}android-playstore:before,\n.#{$ionicons-prefix}android-print:before,\n.#{$ionicons-prefix}android-radio-button-off:before,\n.#{$ionicons-prefix}android-radio-button-on:before,\n.#{$ionicons-prefix}android-refresh:before,\n.#{$ionicons-prefix}android-remove:before,\n.#{$ionicons-prefix}android-remove-circle:before,\n.#{$ionicons-prefix}android-restaurant:before,\n.#{$ionicons-prefix}android-sad:before,\n.#{$ionicons-prefix}android-search:before,\n.#{$ionicons-prefix}android-send:before,\n.#{$ionicons-prefix}android-settings:before,\n.#{$ionicons-prefix}android-share:before,\n.#{$ionicons-prefix}android-share-alt:before,\n.#{$ionicons-prefix}android-star:before,\n.#{$ionicons-prefix}android-star-half:before,\n.#{$ionicons-prefix}android-star-outline:before,\n.#{$ionicons-prefix}android-stopwatch:before,\n.#{$ionicons-prefix}android-subway:before,\n.#{$ionicons-prefix}android-sunny:before,\n.#{$ionicons-prefix}android-sync:before,\n.#{$ionicons-prefix}android-textsms:before,\n.#{$ionicons-prefix}android-time:before,\n.#{$ionicons-prefix}android-train:before,\n.#{$ionicons-prefix}android-unlock:before,\n.#{$ionicons-prefix}android-upload:before,\n.#{$ionicons-prefix}android-volume-down:before,\n.#{$ionicons-prefix}android-volume-mute:before,\n.#{$ionicons-prefix}android-volume-off:before,\n.#{$ionicons-prefix}android-volume-up:before,\n.#{$ionicons-prefix}android-walk:before,\n.#{$ionicons-prefix}android-warning:before,\n.#{$ionicons-prefix}android-watch:before,\n.#{$ionicons-prefix}android-wifi:before,\n.#{$ionicons-prefix}aperture:before,\n.#{$ionicons-prefix}archive:before,\n.#{$ionicons-prefix}arrow-down-a:before,\n.#{$ionicons-prefix}arrow-down-b:before,\n.#{$ionicons-prefix}arrow-down-c:before,\n.#{$ionicons-prefix}arrow-expand:before,\n.#{$ionicons-prefix}arrow-graph-down-left:before,\n.#{$ionicons-prefix}arrow-graph-down-right:before,\n.#{$ionicons-prefix}arrow-graph-up-left:before,\n.#{$ionicons-prefix}arrow-graph-up-right:before,\n.#{$ionicons-prefix}arrow-left-a:before,\n.#{$ionicons-prefix}arrow-left-b:before,\n.#{$ionicons-prefix}arrow-left-c:before,\n.#{$ionicons-prefix}arrow-move:before,\n.#{$ionicons-prefix}arrow-resize:before,\n.#{$ionicons-prefix}arrow-return-left:before,\n.#{$ionicons-prefix}arrow-return-right:before,\n.#{$ionicons-prefix}arrow-right-a:before,\n.#{$ionicons-prefix}arrow-right-b:before,\n.#{$ionicons-prefix}arrow-right-c:before,\n.#{$ionicons-prefix}arrow-shrink:before,\n.#{$ionicons-prefix}arrow-swap:before,\n.#{$ionicons-prefix}arrow-up-a:before,\n.#{$ionicons-prefix}arrow-up-b:before,\n.#{$ionicons-prefix}arrow-up-c:before,\n.#{$ionicons-prefix}asterisk:before,\n.#{$ionicons-prefix}at:before,\n.#{$ionicons-prefix}backspace:before,\n.#{$ionicons-prefix}backspace-outline:before,\n.#{$ionicons-prefix}bag:before,\n.#{$ionicons-prefix}battery-charging:before,\n.#{$ionicons-prefix}battery-empty:before,\n.#{$ionicons-prefix}battery-full:before,\n.#{$ionicons-prefix}battery-half:before,\n.#{$ionicons-prefix}battery-low:before,\n.#{$ionicons-prefix}beaker:before,\n.#{$ionicons-prefix}beer:before,\n.#{$ionicons-prefix}bluetooth:before,\n.#{$ionicons-prefix}bonfire:before,\n.#{$ionicons-prefix}bookmark:before,\n.#{$ionicons-prefix}bowtie:before,\n.#{$ionicons-prefix}briefcase:before,\n.#{$ionicons-prefix}bug:before,\n.#{$ionicons-prefix}calculator:before,\n.#{$ionicons-prefix}calendar:before,\n.#{$ionicons-prefix}camera:before,\n.#{$ionicons-prefix}card:before,\n.#{$ionicons-prefix}cash:before,\n.#{$ionicons-prefix}chatbox:before,\n.#{$ionicons-prefix}chatbox-working:before,\n.#{$ionicons-prefix}chatboxes:before,\n.#{$ionicons-prefix}chatbubble:before,\n.#{$ionicons-prefix}chatbubble-working:before,\n.#{$ionicons-prefix}chatbubbles:before,\n.#{$ionicons-prefix}checkmark:before,\n.#{$ionicons-prefix}checkmark-circled:before,\n.#{$ionicons-prefix}checkmark-round:before,\n.#{$ionicons-prefix}chevron-down:before,\n.#{$ionicons-prefix}chevron-left:before,\n.#{$ionicons-prefix}chevron-right:before,\n.#{$ionicons-prefix}chevron-up:before,\n.#{$ionicons-prefix}clipboard:before,\n.#{$ionicons-prefix}clock:before,\n.#{$ionicons-prefix}close:before,\n.#{$ionicons-prefix}close-circled:before,\n.#{$ionicons-prefix}close-round:before,\n.#{$ionicons-prefix}closed-captioning:before,\n.#{$ionicons-prefix}cloud:before,\n.#{$ionicons-prefix}code:before,\n.#{$ionicons-prefix}code-download:before,\n.#{$ionicons-prefix}code-working:before,\n.#{$ionicons-prefix}coffee:before,\n.#{$ionicons-prefix}compass:before,\n.#{$ionicons-prefix}compose:before,\n.#{$ionicons-prefix}connection-bars:before,\n.#{$ionicons-prefix}contrast:before,\n.#{$ionicons-prefix}crop:before,\n.#{$ionicons-prefix}cube:before,\n.#{$ionicons-prefix}disc:before,\n.#{$ionicons-prefix}document:before,\n.#{$ionicons-prefix}document-text:before,\n.#{$ionicons-prefix}drag:before,\n.#{$ionicons-prefix}earth:before,\n.#{$ionicons-prefix}easel:before,\n.#{$ionicons-prefix}edit:before,\n.#{$ionicons-prefix}egg:before,\n.#{$ionicons-prefix}eject:before,\n.#{$ionicons-prefix}email:before,\n.#{$ionicons-prefix}email-unread:before,\n.#{$ionicons-prefix}erlenmeyer-flask:before,\n.#{$ionicons-prefix}erlenmeyer-flask-bubbles:before,\n.#{$ionicons-prefix}eye:before,\n.#{$ionicons-prefix}eye-disabled:before,\n.#{$ionicons-prefix}female:before,\n.#{$ionicons-prefix}filing:before,\n.#{$ionicons-prefix}film-marker:before,\n.#{$ionicons-prefix}fireball:before,\n.#{$ionicons-prefix}flag:before,\n.#{$ionicons-prefix}flame:before,\n.#{$ionicons-prefix}flash:before,\n.#{$ionicons-prefix}flash-off:before,\n.#{$ionicons-prefix}folder:before,\n.#{$ionicons-prefix}fork:before,\n.#{$ionicons-prefix}fork-repo:before,\n.#{$ionicons-prefix}forward:before,\n.#{$ionicons-prefix}funnel:before,\n.#{$ionicons-prefix}gear-a:before,\n.#{$ionicons-prefix}gear-b:before,\n.#{$ionicons-prefix}grid:before,\n.#{$ionicons-prefix}hammer:before,\n.#{$ionicons-prefix}happy:before,\n.#{$ionicons-prefix}happy-outline:before,\n.#{$ionicons-prefix}headphone:before,\n.#{$ionicons-prefix}heart:before,\n.#{$ionicons-prefix}heart-broken:before,\n.#{$ionicons-prefix}help:before,\n.#{$ionicons-prefix}help-buoy:before,\n.#{$ionicons-prefix}help-circled:before,\n.#{$ionicons-prefix}home:before,\n.#{$ionicons-prefix}icecream:before,\n.#{$ionicons-prefix}image:before,\n.#{$ionicons-prefix}images:before,\n.#{$ionicons-prefix}information:before,\n.#{$ionicons-prefix}information-circled:before,\n.#{$ionicons-prefix}ionic:before,\n.#{$ionicons-prefix}ios-alarm:before,\n.#{$ionicons-prefix}ios-alarm-outline:before,\n.#{$ionicons-prefix}ios-albums:before,\n.#{$ionicons-prefix}ios-albums-outline:before,\n.#{$ionicons-prefix}ios-americanfootball:before,\n.#{$ionicons-prefix}ios-americanfootball-outline:before,\n.#{$ionicons-prefix}ios-analytics:before,\n.#{$ionicons-prefix}ios-analytics-outline:before,\n.#{$ionicons-prefix}ios-arrow-back:before,\n.#{$ionicons-prefix}ios-arrow-down:before,\n.#{$ionicons-prefix}ios-arrow-forward:before,\n.#{$ionicons-prefix}ios-arrow-left:before,\n.#{$ionicons-prefix}ios-arrow-right:before,\n.#{$ionicons-prefix}ios-arrow-thin-down:before,\n.#{$ionicons-prefix}ios-arrow-thin-left:before,\n.#{$ionicons-prefix}ios-arrow-thin-right:before,\n.#{$ionicons-prefix}ios-arrow-thin-up:before,\n.#{$ionicons-prefix}ios-arrow-up:before,\n.#{$ionicons-prefix}ios-at:before,\n.#{$ionicons-prefix}ios-at-outline:before,\n.#{$ionicons-prefix}ios-barcode:before,\n.#{$ionicons-prefix}ios-barcode-outline:before,\n.#{$ionicons-prefix}ios-baseball:before,\n.#{$ionicons-prefix}ios-baseball-outline:before,\n.#{$ionicons-prefix}ios-basketball:before,\n.#{$ionicons-prefix}ios-basketball-outline:before,\n.#{$ionicons-prefix}ios-bell:before,\n.#{$ionicons-prefix}ios-bell-outline:before,\n.#{$ionicons-prefix}ios-body:before,\n.#{$ionicons-prefix}ios-body-outline:before,\n.#{$ionicons-prefix}ios-bolt:before,\n.#{$ionicons-prefix}ios-bolt-outline:before,\n.#{$ionicons-prefix}ios-book:before,\n.#{$ionicons-prefix}ios-book-outline:before,\n.#{$ionicons-prefix}ios-bookmarks:before,\n.#{$ionicons-prefix}ios-bookmarks-outline:before,\n.#{$ionicons-prefix}ios-box:before,\n.#{$ionicons-prefix}ios-box-outline:before,\n.#{$ionicons-prefix}ios-briefcase:before,\n.#{$ionicons-prefix}ios-briefcase-outline:before,\n.#{$ionicons-prefix}ios-browsers:before,\n.#{$ionicons-prefix}ios-browsers-outline:before,\n.#{$ionicons-prefix}ios-calculator:before,\n.#{$ionicons-prefix}ios-calculator-outline:before,\n.#{$ionicons-prefix}ios-calendar:before,\n.#{$ionicons-prefix}ios-calendar-outline:before,\n.#{$ionicons-prefix}ios-camera:before,\n.#{$ionicons-prefix}ios-camera-outline:before,\n.#{$ionicons-prefix}ios-cart:before,\n.#{$ionicons-prefix}ios-cart-outline:before,\n.#{$ionicons-prefix}ios-chatboxes:before,\n.#{$ionicons-prefix}ios-chatboxes-outline:before,\n.#{$ionicons-prefix}ios-chatbubble:before,\n.#{$ionicons-prefix}ios-chatbubble-outline:before,\n.#{$ionicons-prefix}ios-checkmark:before,\n.#{$ionicons-prefix}ios-checkmark-empty:before,\n.#{$ionicons-prefix}ios-checkmark-outline:before,\n.#{$ionicons-prefix}ios-circle-filled:before,\n.#{$ionicons-prefix}ios-circle-outline:before,\n.#{$ionicons-prefix}ios-clock:before,\n.#{$ionicons-prefix}ios-clock-outline:before,\n.#{$ionicons-prefix}ios-close:before,\n.#{$ionicons-prefix}ios-close-empty:before,\n.#{$ionicons-prefix}ios-close-outline:before,\n.#{$ionicons-prefix}ios-cloud:before,\n.#{$ionicons-prefix}ios-cloud-download:before,\n.#{$ionicons-prefix}ios-cloud-download-outline:before,\n.#{$ionicons-prefix}ios-cloud-outline:before,\n.#{$ionicons-prefix}ios-cloud-upload:before,\n.#{$ionicons-prefix}ios-cloud-upload-outline:before,\n.#{$ionicons-prefix}ios-cloudy:before,\n.#{$ionicons-prefix}ios-cloudy-night:before,\n.#{$ionicons-prefix}ios-cloudy-night-outline:before,\n.#{$ionicons-prefix}ios-cloudy-outline:before,\n.#{$ionicons-prefix}ios-cog:before,\n.#{$ionicons-prefix}ios-cog-outline:before,\n.#{$ionicons-prefix}ios-color-filter:before,\n.#{$ionicons-prefix}ios-color-filter-outline:before,\n.#{$ionicons-prefix}ios-color-wand:before,\n.#{$ionicons-prefix}ios-color-wand-outline:before,\n.#{$ionicons-prefix}ios-compose:before,\n.#{$ionicons-prefix}ios-compose-outline:before,\n.#{$ionicons-prefix}ios-contact:before,\n.#{$ionicons-prefix}ios-contact-outline:before,\n.#{$ionicons-prefix}ios-copy:before,\n.#{$ionicons-prefix}ios-copy-outline:before,\n.#{$ionicons-prefix}ios-crop:before,\n.#{$ionicons-prefix}ios-crop-strong:before,\n.#{$ionicons-prefix}ios-download:before,\n.#{$ionicons-prefix}ios-download-outline:before,\n.#{$ionicons-prefix}ios-drag:before,\n.#{$ionicons-prefix}ios-email:before,\n.#{$ionicons-prefix}ios-email-outline:before,\n.#{$ionicons-prefix}ios-eye:before,\n.#{$ionicons-prefix}ios-eye-outline:before,\n.#{$ionicons-prefix}ios-fastforward:before,\n.#{$ionicons-prefix}ios-fastforward-outline:before,\n.#{$ionicons-prefix}ios-filing:before,\n.#{$ionicons-prefix}ios-filing-outline:before,\n.#{$ionicons-prefix}ios-film:before,\n.#{$ionicons-prefix}ios-film-outline:before,\n.#{$ionicons-prefix}ios-flag:before,\n.#{$ionicons-prefix}ios-flag-outline:before,\n.#{$ionicons-prefix}ios-flame:before,\n.#{$ionicons-prefix}ios-flame-outline:before,\n.#{$ionicons-prefix}ios-flask:before,\n.#{$ionicons-prefix}ios-flask-outline:before,\n.#{$ionicons-prefix}ios-flower:before,\n.#{$ionicons-prefix}ios-flower-outline:before,\n.#{$ionicons-prefix}ios-folder:before,\n.#{$ionicons-prefix}ios-folder-outline:before,\n.#{$ionicons-prefix}ios-football:before,\n.#{$ionicons-prefix}ios-football-outline:before,\n.#{$ionicons-prefix}ios-game-controller-a:before,\n.#{$ionicons-prefix}ios-game-controller-a-outline:before,\n.#{$ionicons-prefix}ios-game-controller-b:before,\n.#{$ionicons-prefix}ios-game-controller-b-outline:before,\n.#{$ionicons-prefix}ios-gear:before,\n.#{$ionicons-prefix}ios-gear-outline:before,\n.#{$ionicons-prefix}ios-glasses:before,\n.#{$ionicons-prefix}ios-glasses-outline:before,\n.#{$ionicons-prefix}ios-grid-view:before,\n.#{$ionicons-prefix}ios-grid-view-outline:before,\n.#{$ionicons-prefix}ios-heart:before,\n.#{$ionicons-prefix}ios-heart-outline:before,\n.#{$ionicons-prefix}ios-help:before,\n.#{$ionicons-prefix}ios-help-empty:before,\n.#{$ionicons-prefix}ios-help-outline:before,\n.#{$ionicons-prefix}ios-home:before,\n.#{$ionicons-prefix}ios-home-outline:before,\n.#{$ionicons-prefix}ios-infinite:before,\n.#{$ionicons-prefix}ios-infinite-outline:before,\n.#{$ionicons-prefix}ios-information:before,\n.#{$ionicons-prefix}ios-information-empty:before,\n.#{$ionicons-prefix}ios-information-outline:before,\n.#{$ionicons-prefix}ios-ionic-outline:before,\n.#{$ionicons-prefix}ios-keypad:before,\n.#{$ionicons-prefix}ios-keypad-outline:before,\n.#{$ionicons-prefix}ios-lightbulb:before,\n.#{$ionicons-prefix}ios-lightbulb-outline:before,\n.#{$ionicons-prefix}ios-list:before,\n.#{$ionicons-prefix}ios-list-outline:before,\n.#{$ionicons-prefix}ios-location:before,\n.#{$ionicons-prefix}ios-location-outline:before,\n.#{$ionicons-prefix}ios-locked:before,\n.#{$ionicons-prefix}ios-locked-outline:before,\n.#{$ionicons-prefix}ios-loop:before,\n.#{$ionicons-prefix}ios-loop-strong:before,\n.#{$ionicons-prefix}ios-medical:before,\n.#{$ionicons-prefix}ios-medical-outline:before,\n.#{$ionicons-prefix}ios-medkit:before,\n.#{$ionicons-prefix}ios-medkit-outline:before,\n.#{$ionicons-prefix}ios-mic:before,\n.#{$ionicons-prefix}ios-mic-off:before,\n.#{$ionicons-prefix}ios-mic-outline:before,\n.#{$ionicons-prefix}ios-minus:before,\n.#{$ionicons-prefix}ios-minus-empty:before,\n.#{$ionicons-prefix}ios-minus-outline:before,\n.#{$ionicons-prefix}ios-monitor:before,\n.#{$ionicons-prefix}ios-monitor-outline:before,\n.#{$ionicons-prefix}ios-moon:before,\n.#{$ionicons-prefix}ios-moon-outline:before,\n.#{$ionicons-prefix}ios-more:before,\n.#{$ionicons-prefix}ios-more-outline:before,\n.#{$ionicons-prefix}ios-musical-note:before,\n.#{$ionicons-prefix}ios-musical-notes:before,\n.#{$ionicons-prefix}ios-navigate:before,\n.#{$ionicons-prefix}ios-navigate-outline:before,\n.#{$ionicons-prefix}ios-nutrition:before,\n.#{$ionicons-prefix}ios-nutrition-outline:before,\n.#{$ionicons-prefix}ios-paper:before,\n.#{$ionicons-prefix}ios-paper-outline:before,\n.#{$ionicons-prefix}ios-paperplane:before,\n.#{$ionicons-prefix}ios-paperplane-outline:before,\n.#{$ionicons-prefix}ios-partlysunny:before,\n.#{$ionicons-prefix}ios-partlysunny-outline:before,\n.#{$ionicons-prefix}ios-pause:before,\n.#{$ionicons-prefix}ios-pause-outline:before,\n.#{$ionicons-prefix}ios-paw:before,\n.#{$ionicons-prefix}ios-paw-outline:before,\n.#{$ionicons-prefix}ios-people:before,\n.#{$ionicons-prefix}ios-people-outline:before,\n.#{$ionicons-prefix}ios-person:before,\n.#{$ionicons-prefix}ios-person-outline:before,\n.#{$ionicons-prefix}ios-personadd:before,\n.#{$ionicons-prefix}ios-personadd-outline:before,\n.#{$ionicons-prefix}ios-photos:before,\n.#{$ionicons-prefix}ios-photos-outline:before,\n.#{$ionicons-prefix}ios-pie:before,\n.#{$ionicons-prefix}ios-pie-outline:before,\n.#{$ionicons-prefix}ios-pint:before,\n.#{$ionicons-prefix}ios-pint-outline:before,\n.#{$ionicons-prefix}ios-play:before,\n.#{$ionicons-prefix}ios-play-outline:before,\n.#{$ionicons-prefix}ios-plus:before,\n.#{$ionicons-prefix}ios-plus-empty:before,\n.#{$ionicons-prefix}ios-plus-outline:before,\n.#{$ionicons-prefix}ios-pricetag:before,\n.#{$ionicons-prefix}ios-pricetag-outline:before,\n.#{$ionicons-prefix}ios-pricetags:before,\n.#{$ionicons-prefix}ios-pricetags-outline:before,\n.#{$ionicons-prefix}ios-printer:before,\n.#{$ionicons-prefix}ios-printer-outline:before,\n.#{$ionicons-prefix}ios-pulse:before,\n.#{$ionicons-prefix}ios-pulse-strong:before,\n.#{$ionicons-prefix}ios-rainy:before,\n.#{$ionicons-prefix}ios-rainy-outline:before,\n.#{$ionicons-prefix}ios-recording:before,\n.#{$ionicons-prefix}ios-recording-outline:before,\n.#{$ionicons-prefix}ios-redo:before,\n.#{$ionicons-prefix}ios-redo-outline:before,\n.#{$ionicons-prefix}ios-refresh:before,\n.#{$ionicons-prefix}ios-refresh-empty:before,\n.#{$ionicons-prefix}ios-refresh-outline:before,\n.#{$ionicons-prefix}ios-reload:before,\n.#{$ionicons-prefix}ios-reverse-camera:before,\n.#{$ionicons-prefix}ios-reverse-camera-outline:before,\n.#{$ionicons-prefix}ios-rewind:before,\n.#{$ionicons-prefix}ios-rewind-outline:before,\n.#{$ionicons-prefix}ios-rose:before,\n.#{$ionicons-prefix}ios-rose-outline:before,\n.#{$ionicons-prefix}ios-search:before,\n.#{$ionicons-prefix}ios-search-strong:before,\n.#{$ionicons-prefix}ios-settings:before,\n.#{$ionicons-prefix}ios-settings-strong:before,\n.#{$ionicons-prefix}ios-shuffle:before,\n.#{$ionicons-prefix}ios-shuffle-strong:before,\n.#{$ionicons-prefix}ios-skipbackward:before,\n.#{$ionicons-prefix}ios-skipbackward-outline:before,\n.#{$ionicons-prefix}ios-skipforward:before,\n.#{$ionicons-prefix}ios-skipforward-outline:before,\n.#{$ionicons-prefix}ios-snowy:before,\n.#{$ionicons-prefix}ios-speedometer:before,\n.#{$ionicons-prefix}ios-speedometer-outline:before,\n.#{$ionicons-prefix}ios-star:before,\n.#{$ionicons-prefix}ios-star-half:before,\n.#{$ionicons-prefix}ios-star-outline:before,\n.#{$ionicons-prefix}ios-stopwatch:before,\n.#{$ionicons-prefix}ios-stopwatch-outline:before,\n.#{$ionicons-prefix}ios-sunny:before,\n.#{$ionicons-prefix}ios-sunny-outline:before,\n.#{$ionicons-prefix}ios-telephone:before,\n.#{$ionicons-prefix}ios-telephone-outline:before,\n.#{$ionicons-prefix}ios-tennisball:before,\n.#{$ionicons-prefix}ios-tennisball-outline:before,\n.#{$ionicons-prefix}ios-thunderstorm:before,\n.#{$ionicons-prefix}ios-thunderstorm-outline:before,\n.#{$ionicons-prefix}ios-time:before,\n.#{$ionicons-prefix}ios-time-outline:before,\n.#{$ionicons-prefix}ios-timer:before,\n.#{$ionicons-prefix}ios-timer-outline:before,\n.#{$ionicons-prefix}ios-toggle:before,\n.#{$ionicons-prefix}ios-toggle-outline:before,\n.#{$ionicons-prefix}ios-trash:before,\n.#{$ionicons-prefix}ios-trash-outline:before,\n.#{$ionicons-prefix}ios-undo:before,\n.#{$ionicons-prefix}ios-undo-outline:before,\n.#{$ionicons-prefix}ios-unlocked:before,\n.#{$ionicons-prefix}ios-unlocked-outline:before,\n.#{$ionicons-prefix}ios-upload:before,\n.#{$ionicons-prefix}ios-upload-outline:before,\n.#{$ionicons-prefix}ios-videocam:before,\n.#{$ionicons-prefix}ios-videocam-outline:before,\n.#{$ionicons-prefix}ios-volume-high:before,\n.#{$ionicons-prefix}ios-volume-low:before,\n.#{$ionicons-prefix}ios-wineglass:before,\n.#{$ionicons-prefix}ios-wineglass-outline:before,\n.#{$ionicons-prefix}ios-world:before,\n.#{$ionicons-prefix}ios-world-outline:before,\n.#{$ionicons-prefix}ipad:before,\n.#{$ionicons-prefix}iphone:before,\n.#{$ionicons-prefix}ipod:before,\n.#{$ionicons-prefix}jet:before,\n.#{$ionicons-prefix}key:before,\n.#{$ionicons-prefix}knife:before,\n.#{$ionicons-prefix}laptop:before,\n.#{$ionicons-prefix}leaf:before,\n.#{$ionicons-prefix}levels:before,\n.#{$ionicons-prefix}lightbulb:before,\n.#{$ionicons-prefix}link:before,\n.#{$ionicons-prefix}load-a:before,\n.#{$ionicons-prefix}load-b:before,\n.#{$ionicons-prefix}load-c:before,\n.#{$ionicons-prefix}load-d:before,\n.#{$ionicons-prefix}location:before,\n.#{$ionicons-prefix}lock-combination:before,\n.#{$ionicons-prefix}locked:before,\n.#{$ionicons-prefix}log-in:before,\n.#{$ionicons-prefix}log-out:before,\n.#{$ionicons-prefix}loop:before,\n.#{$ionicons-prefix}magnet:before,\n.#{$ionicons-prefix}male:before,\n.#{$ionicons-prefix}man:before,\n.#{$ionicons-prefix}map:before,\n.#{$ionicons-prefix}medkit:before,\n.#{$ionicons-prefix}merge:before,\n.#{$ionicons-prefix}mic-a:before,\n.#{$ionicons-prefix}mic-b:before,\n.#{$ionicons-prefix}mic-c:before,\n.#{$ionicons-prefix}minus:before,\n.#{$ionicons-prefix}minus-circled:before,\n.#{$ionicons-prefix}minus-round:before,\n.#{$ionicons-prefix}model-s:before,\n.#{$ionicons-prefix}monitor:before,\n.#{$ionicons-prefix}more:before,\n.#{$ionicons-prefix}mouse:before,\n.#{$ionicons-prefix}music-note:before,\n.#{$ionicons-prefix}navicon:before,\n.#{$ionicons-prefix}navicon-round:before,\n.#{$ionicons-prefix}navigate:before,\n.#{$ionicons-prefix}network:before,\n.#{$ionicons-prefix}no-smoking:before,\n.#{$ionicons-prefix}nuclear:before,\n.#{$ionicons-prefix}outlet:before,\n.#{$ionicons-prefix}paintbrush:before,\n.#{$ionicons-prefix}paintbucket:before,\n.#{$ionicons-prefix}paper-airplane:before,\n.#{$ionicons-prefix}paperclip:before,\n.#{$ionicons-prefix}pause:before,\n.#{$ionicons-prefix}person:before,\n.#{$ionicons-prefix}person-add:before,\n.#{$ionicons-prefix}person-stalker:before,\n.#{$ionicons-prefix}pie-graph:before,\n.#{$ionicons-prefix}pin:before,\n.#{$ionicons-prefix}pinpoint:before,\n.#{$ionicons-prefix}pizza:before,\n.#{$ionicons-prefix}plane:before,\n.#{$ionicons-prefix}planet:before,\n.#{$ionicons-prefix}play:before,\n.#{$ionicons-prefix}playstation:before,\n.#{$ionicons-prefix}plus:before,\n.#{$ionicons-prefix}plus-circled:before,\n.#{$ionicons-prefix}plus-round:before,\n.#{$ionicons-prefix}podium:before,\n.#{$ionicons-prefix}pound:before,\n.#{$ionicons-prefix}power:before,\n.#{$ionicons-prefix}pricetag:before,\n.#{$ionicons-prefix}pricetags:before,\n.#{$ionicons-prefix}printer:before,\n.#{$ionicons-prefix}pull-request:before,\n.#{$ionicons-prefix}qr-scanner:before,\n.#{$ionicons-prefix}quote:before,\n.#{$ionicons-prefix}radio-waves:before,\n.#{$ionicons-prefix}record:before,\n.#{$ionicons-prefix}refresh:before,\n.#{$ionicons-prefix}reply:before,\n.#{$ionicons-prefix}reply-all:before,\n.#{$ionicons-prefix}ribbon-a:before,\n.#{$ionicons-prefix}ribbon-b:before,\n.#{$ionicons-prefix}sad:before,\n.#{$ionicons-prefix}sad-outline:before,\n.#{$ionicons-prefix}scissors:before,\n.#{$ionicons-prefix}search:before,\n.#{$ionicons-prefix}settings:before,\n.#{$ionicons-prefix}share:before,\n.#{$ionicons-prefix}shuffle:before,\n.#{$ionicons-prefix}skip-backward:before,\n.#{$ionicons-prefix}skip-forward:before,\n.#{$ionicons-prefix}social-android:before,\n.#{$ionicons-prefix}social-android-outline:before,\n.#{$ionicons-prefix}social-angular:before,\n.#{$ionicons-prefix}social-angular-outline:before,\n.#{$ionicons-prefix}social-apple:before,\n.#{$ionicons-prefix}social-apple-outline:before,\n.#{$ionicons-prefix}social-bitcoin:before,\n.#{$ionicons-prefix}social-bitcoin-outline:before,\n.#{$ionicons-prefix}social-buffer:before,\n.#{$ionicons-prefix}social-buffer-outline:before,\n.#{$ionicons-prefix}social-chrome:before,\n.#{$ionicons-prefix}social-chrome-outline:before,\n.#{$ionicons-prefix}social-codepen:before,\n.#{$ionicons-prefix}social-codepen-outline:before,\n.#{$ionicons-prefix}social-css3:before,\n.#{$ionicons-prefix}social-css3-outline:before,\n.#{$ionicons-prefix}social-designernews:before,\n.#{$ionicons-prefix}social-designernews-outline:before,\n.#{$ionicons-prefix}social-dribbble:before,\n.#{$ionicons-prefix}social-dribbble-outline:before,\n.#{$ionicons-prefix}social-dropbox:before,\n.#{$ionicons-prefix}social-dropbox-outline:before,\n.#{$ionicons-prefix}social-euro:before,\n.#{$ionicons-prefix}social-euro-outline:before,\n.#{$ionicons-prefix}social-facebook:before,\n.#{$ionicons-prefix}social-facebook-outline:before,\n.#{$ionicons-prefix}social-foursquare:before,\n.#{$ionicons-prefix}social-foursquare-outline:before,\n.#{$ionicons-prefix}social-freebsd-devil:before,\n.#{$ionicons-prefix}social-github:before,\n.#{$ionicons-prefix}social-github-outline:before,\n.#{$ionicons-prefix}social-google:before,\n.#{$ionicons-prefix}social-google-outline:before,\n.#{$ionicons-prefix}social-googleplus:before,\n.#{$ionicons-prefix}social-googleplus-outline:before,\n.#{$ionicons-prefix}social-hackernews:before,\n.#{$ionicons-prefix}social-hackernews-outline:before,\n.#{$ionicons-prefix}social-html5:before,\n.#{$ionicons-prefix}social-html5-outline:before,\n.#{$ionicons-prefix}social-instagram:before,\n.#{$ionicons-prefix}social-instagram-outline:before,\n.#{$ionicons-prefix}social-javascript:before,\n.#{$ionicons-prefix}social-javascript-outline:before,\n.#{$ionicons-prefix}social-linkedin:before,\n.#{$ionicons-prefix}social-linkedin-outline:before,\n.#{$ionicons-prefix}social-markdown:before,\n.#{$ionicons-prefix}social-nodejs:before,\n.#{$ionicons-prefix}social-octocat:before,\n.#{$ionicons-prefix}social-pinterest:before,\n.#{$ionicons-prefix}social-pinterest-outline:before,\n.#{$ionicons-prefix}social-python:before,\n.#{$ionicons-prefix}social-reddit:before,\n.#{$ionicons-prefix}social-reddit-outline:before,\n.#{$ionicons-prefix}social-rss:before,\n.#{$ionicons-prefix}social-rss-outline:before,\n.#{$ionicons-prefix}social-sass:before,\n.#{$ionicons-prefix}social-skype:before,\n.#{$ionicons-prefix}social-skype-outline:before,\n.#{$ionicons-prefix}social-snapchat:before,\n.#{$ionicons-prefix}social-snapchat-outline:before,\n.#{$ionicons-prefix}social-tumblr:before,\n.#{$ionicons-prefix}social-tumblr-outline:before,\n.#{$ionicons-prefix}social-tux:before,\n.#{$ionicons-prefix}social-twitch:before,\n.#{$ionicons-prefix}social-twitch-outline:before,\n.#{$ionicons-prefix}social-twitter:before,\n.#{$ionicons-prefix}social-twitter-outline:before,\n.#{$ionicons-prefix}social-usd:before,\n.#{$ionicons-prefix}social-usd-outline:before,\n.#{$ionicons-prefix}social-vimeo:before,\n.#{$ionicons-prefix}social-vimeo-outline:before,\n.#{$ionicons-prefix}social-whatsapp:before,\n.#{$ionicons-prefix}social-whatsapp-outline:before,\n.#{$ionicons-prefix}social-windows:before,\n.#{$ionicons-prefix}social-windows-outline:before,\n.#{$ionicons-prefix}social-wordpress:before,\n.#{$ionicons-prefix}social-wordpress-outline:before,\n.#{$ionicons-prefix}social-yahoo:before,\n.#{$ionicons-prefix}social-yahoo-outline:before,\n.#{$ionicons-prefix}social-yen:before,\n.#{$ionicons-prefix}social-yen-outline:before,\n.#{$ionicons-prefix}social-youtube:before,\n.#{$ionicons-prefix}social-youtube-outline:before,\n.#{$ionicons-prefix}soup-can:before,\n.#{$ionicons-prefix}soup-can-outline:before,\n.#{$ionicons-prefix}speakerphone:before,\n.#{$ionicons-prefix}speedometer:before,\n.#{$ionicons-prefix}spoon:before,\n.#{$ionicons-prefix}star:before,\n.#{$ionicons-prefix}stats-bars:before,\n.#{$ionicons-prefix}steam:before,\n.#{$ionicons-prefix}stop:before,\n.#{$ionicons-prefix}thermometer:before,\n.#{$ionicons-prefix}thumbsdown:before,\n.#{$ionicons-prefix}thumbsup:before,\n.#{$ionicons-prefix}toggle:before,\n.#{$ionicons-prefix}toggle-filled:before,\n.#{$ionicons-prefix}transgender:before,\n.#{$ionicons-prefix}trash-a:before,\n.#{$ionicons-prefix}trash-b:before,\n.#{$ionicons-prefix}trophy:before,\n.#{$ionicons-prefix}tshirt:before,\n.#{$ionicons-prefix}tshirt-outline:before,\n.#{$ionicons-prefix}umbrella:before,\n.#{$ionicons-prefix}university:before,\n.#{$ionicons-prefix}unlocked:before,\n.#{$ionicons-prefix}upload:before,\n.#{$ionicons-prefix}usb:before,\n.#{$ionicons-prefix}videocamera:before,\n.#{$ionicons-prefix}volume-high:before,\n.#{$ionicons-prefix}volume-low:before,\n.#{$ionicons-prefix}volume-medium:before,\n.#{$ionicons-prefix}volume-mute:before,\n.#{$ionicons-prefix}wand:before,\n.#{$ionicons-prefix}waterdrop:before,\n.#{$ionicons-prefix}wifi:before,\n.#{$ionicons-prefix}wineglass:before,\n.#{$ionicons-prefix}woman:before,\n.#{$ionicons-prefix}wrench:before,\n.#{$ionicons-prefix}xbox:before\n{\n @extend .ion;\n}\n.#{$ionicons-prefix}alert:before { content: $ionicon-var-alert; }\n.#{$ionicons-prefix}alert-circled:before { content: $ionicon-var-alert-circled; }\n.#{$ionicons-prefix}android-add:before { content: $ionicon-var-android-add; }\n.#{$ionicons-prefix}android-add-circle:before { content: $ionicon-var-android-add-circle; }\n.#{$ionicons-prefix}android-alarm-clock:before { content: $ionicon-var-android-alarm-clock; }\n.#{$ionicons-prefix}android-alert:before { content: $ionicon-var-android-alert; }\n.#{$ionicons-prefix}android-apps:before { content: $ionicon-var-android-apps; }\n.#{$ionicons-prefix}android-archive:before { content: $ionicon-var-android-archive; }\n.#{$ionicons-prefix}android-arrow-back:before { content: $ionicon-var-android-arrow-back; }\n.#{$ionicons-prefix}android-arrow-down:before { content: $ionicon-var-android-arrow-down; }\n.#{$ionicons-prefix}android-arrow-dropdown:before { content: $ionicon-var-android-arrow-dropdown; }\n.#{$ionicons-prefix}android-arrow-dropdown-circle:before { content: $ionicon-var-android-arrow-dropdown-circle; }\n.#{$ionicons-prefix}android-arrow-dropleft:before { content: $ionicon-var-android-arrow-dropleft; }\n.#{$ionicons-prefix}android-arrow-dropleft-circle:before { content: $ionicon-var-android-arrow-dropleft-circle; }\n.#{$ionicons-prefix}android-arrow-dropright:before { content: $ionicon-var-android-arrow-dropright; }\n.#{$ionicons-prefix}android-arrow-dropright-circle:before { content: $ionicon-var-android-arrow-dropright-circle; }\n.#{$ionicons-prefix}android-arrow-dropup:before { content: $ionicon-var-android-arrow-dropup; }\n.#{$ionicons-prefix}android-arrow-dropup-circle:before { content: $ionicon-var-android-arrow-dropup-circle; }\n.#{$ionicons-prefix}android-arrow-forward:before { content: $ionicon-var-android-arrow-forward; }\n.#{$ionicons-prefix}android-arrow-up:before { content: $ionicon-var-android-arrow-up; }\n.#{$ionicons-prefix}android-attach:before { content: $ionicon-var-android-attach; }\n.#{$ionicons-prefix}android-bar:before { content: $ionicon-var-android-bar; }\n.#{$ionicons-prefix}android-bicycle:before { content: $ionicon-var-android-bicycle; }\n.#{$ionicons-prefix}android-boat:before { content: $ionicon-var-android-boat; }\n.#{$ionicons-prefix}android-bookmark:before { content: $ionicon-var-android-bookmark; }\n.#{$ionicons-prefix}android-bulb:before { content: $ionicon-var-android-bulb; }\n.#{$ionicons-prefix}android-bus:before { content: $ionicon-var-android-bus; }\n.#{$ionicons-prefix}android-calendar:before { content: $ionicon-var-android-calendar; }\n.#{$ionicons-prefix}android-call:before { content: $ionicon-var-android-call; }\n.#{$ionicons-prefix}android-camera:before { content: $ionicon-var-android-camera; }\n.#{$ionicons-prefix}android-cancel:before { content: $ionicon-var-android-cancel; }\n.#{$ionicons-prefix}android-car:before { content: $ionicon-var-android-car; }\n.#{$ionicons-prefix}android-cart:before { content: $ionicon-var-android-cart; }\n.#{$ionicons-prefix}android-chat:before { content: $ionicon-var-android-chat; }\n.#{$ionicons-prefix}android-checkbox:before { content: $ionicon-var-android-checkbox; }\n.#{$ionicons-prefix}android-checkbox-blank:before { content: $ionicon-var-android-checkbox-blank; }\n.#{$ionicons-prefix}android-checkbox-outline:before { content: $ionicon-var-android-checkbox-outline; }\n.#{$ionicons-prefix}android-checkbox-outline-blank:before { content: $ionicon-var-android-checkbox-outline-blank; }\n.#{$ionicons-prefix}android-checkmark-circle:before { content: $ionicon-var-android-checkmark-circle; }\n.#{$ionicons-prefix}android-clipboard:before { content: $ionicon-var-android-clipboard; }\n.#{$ionicons-prefix}android-close:before { content: $ionicon-var-android-close; }\n.#{$ionicons-prefix}android-cloud:before { content: $ionicon-var-android-cloud; }\n.#{$ionicons-prefix}android-cloud-circle:before { content: $ionicon-var-android-cloud-circle; }\n.#{$ionicons-prefix}android-cloud-done:before { content: $ionicon-var-android-cloud-done; }\n.#{$ionicons-prefix}android-cloud-outline:before { content: $ionicon-var-android-cloud-outline; }\n.#{$ionicons-prefix}android-color-palette:before { content: $ionicon-var-android-color-palette; }\n.#{$ionicons-prefix}android-compass:before { content: $ionicon-var-android-compass; }\n.#{$ionicons-prefix}android-contact:before { content: $ionicon-var-android-contact; }\n.#{$ionicons-prefix}android-contacts:before { content: $ionicon-var-android-contacts; }\n.#{$ionicons-prefix}android-contract:before { content: $ionicon-var-android-contract; }\n.#{$ionicons-prefix}android-create:before { content: $ionicon-var-android-create; }\n.#{$ionicons-prefix}android-delete:before { content: $ionicon-var-android-delete; }\n.#{$ionicons-prefix}android-desktop:before { content: $ionicon-var-android-desktop; }\n.#{$ionicons-prefix}android-document:before { content: $ionicon-var-android-document; }\n.#{$ionicons-prefix}android-done:before { content: $ionicon-var-android-done; }\n.#{$ionicons-prefix}android-done-all:before { content: $ionicon-var-android-done-all; }\n.#{$ionicons-prefix}android-download:before { content: $ionicon-var-android-download; }\n.#{$ionicons-prefix}android-drafts:before { content: $ionicon-var-android-drafts; }\n.#{$ionicons-prefix}android-exit:before { content: $ionicon-var-android-exit; }\n.#{$ionicons-prefix}android-expand:before { content: $ionicon-var-android-expand; }\n.#{$ionicons-prefix}android-favorite:before { content: $ionicon-var-android-favorite; }\n.#{$ionicons-prefix}android-favorite-outline:before { content: $ionicon-var-android-favorite-outline; }\n.#{$ionicons-prefix}android-film:before { content: $ionicon-var-android-film; }\n.#{$ionicons-prefix}android-folder:before { content: $ionicon-var-android-folder; }\n.#{$ionicons-prefix}android-folder-open:before { content: $ionicon-var-android-folder-open; }\n.#{$ionicons-prefix}android-funnel:before { content: $ionicon-var-android-funnel; }\n.#{$ionicons-prefix}android-globe:before { content: $ionicon-var-android-globe; }\n.#{$ionicons-prefix}android-hand:before { content: $ionicon-var-android-hand; }\n.#{$ionicons-prefix}android-hangout:before { content: $ionicon-var-android-hangout; }\n.#{$ionicons-prefix}android-happy:before { content: $ionicon-var-android-happy; }\n.#{$ionicons-prefix}android-home:before { content: $ionicon-var-android-home; }\n.#{$ionicons-prefix}android-image:before { content: $ionicon-var-android-image; }\n.#{$ionicons-prefix}android-laptop:before { content: $ionicon-var-android-laptop; }\n.#{$ionicons-prefix}android-list:before { content: $ionicon-var-android-list; }\n.#{$ionicons-prefix}android-locate:before { content: $ionicon-var-android-locate; }\n.#{$ionicons-prefix}android-lock:before { content: $ionicon-var-android-lock; }\n.#{$ionicons-prefix}android-mail:before { content: $ionicon-var-android-mail; }\n.#{$ionicons-prefix}android-map:before { content: $ionicon-var-android-map; }\n.#{$ionicons-prefix}android-menu:before { content: $ionicon-var-android-menu; }\n.#{$ionicons-prefix}android-microphone:before { content: $ionicon-var-android-microphone; }\n.#{$ionicons-prefix}android-microphone-off:before { content: $ionicon-var-android-microphone-off; }\n.#{$ionicons-prefix}android-more-horizontal:before { content: $ionicon-var-android-more-horizontal; }\n.#{$ionicons-prefix}android-more-vertical:before { content: $ionicon-var-android-more-vertical; }\n.#{$ionicons-prefix}android-navigate:before { content: $ionicon-var-android-navigate; }\n.#{$ionicons-prefix}android-notifications:before { content: $ionicon-var-android-notifications; }\n.#{$ionicons-prefix}android-notifications-none:before { content: $ionicon-var-android-notifications-none; }\n.#{$ionicons-prefix}android-notifications-off:before { content: $ionicon-var-android-notifications-off; }\n.#{$ionicons-prefix}android-open:before { content: $ionicon-var-android-open; }\n.#{$ionicons-prefix}android-options:before { content: $ionicon-var-android-options; }\n.#{$ionicons-prefix}android-people:before { content: $ionicon-var-android-people; }\n.#{$ionicons-prefix}android-person:before { content: $ionicon-var-android-person; }\n.#{$ionicons-prefix}android-person-add:before { content: $ionicon-var-android-person-add; }\n.#{$ionicons-prefix}android-phone-landscape:before { content: $ionicon-var-android-phone-landscape; }\n.#{$ionicons-prefix}android-phone-portrait:before { content: $ionicon-var-android-phone-portrait; }\n.#{$ionicons-prefix}android-pin:before { content: $ionicon-var-android-pin; }\n.#{$ionicons-prefix}android-plane:before { content: $ionicon-var-android-plane; }\n.#{$ionicons-prefix}android-playstore:before { content: $ionicon-var-android-playstore; }\n.#{$ionicons-prefix}android-print:before { content: $ionicon-var-android-print; }\n.#{$ionicons-prefix}android-radio-button-off:before { content: $ionicon-var-android-radio-button-off; }\n.#{$ionicons-prefix}android-radio-button-on:before { content: $ionicon-var-android-radio-button-on; }\n.#{$ionicons-prefix}android-refresh:before { content: $ionicon-var-android-refresh; }\n.#{$ionicons-prefix}android-remove:before { content: $ionicon-var-android-remove; }\n.#{$ionicons-prefix}android-remove-circle:before { content: $ionicon-var-android-remove-circle; }\n.#{$ionicons-prefix}android-restaurant:before { content: $ionicon-var-android-restaurant; }\n.#{$ionicons-prefix}android-sad:before { content: $ionicon-var-android-sad; }\n.#{$ionicons-prefix}android-search:before { content: $ionicon-var-android-search; }\n.#{$ionicons-prefix}android-send:before { content: $ionicon-var-android-send; }\n.#{$ionicons-prefix}android-settings:before { content: $ionicon-var-android-settings; }\n.#{$ionicons-prefix}android-share:before { content: $ionicon-var-android-share; }\n.#{$ionicons-prefix}android-share-alt:before { content: $ionicon-var-android-share-alt; }\n.#{$ionicons-prefix}android-star:before { content: $ionicon-var-android-star; }\n.#{$ionicons-prefix}android-star-half:before { content: $ionicon-var-android-star-half; }\n.#{$ionicons-prefix}android-star-outline:before { content: $ionicon-var-android-star-outline; }\n.#{$ionicons-prefix}android-stopwatch:before { content: $ionicon-var-android-stopwatch; }\n.#{$ionicons-prefix}android-subway:before { content: $ionicon-var-android-subway; }\n.#{$ionicons-prefix}android-sunny:before { content: $ionicon-var-android-sunny; }\n.#{$ionicons-prefix}android-sync:before { content: $ionicon-var-android-sync; }\n.#{$ionicons-prefix}android-textsms:before { content: $ionicon-var-android-textsms; }\n.#{$ionicons-prefix}android-time:before { content: $ionicon-var-android-time; }\n.#{$ionicons-prefix}android-train:before { content: $ionicon-var-android-train; }\n.#{$ionicons-prefix}android-unlock:before { content: $ionicon-var-android-unlock; }\n.#{$ionicons-prefix}android-upload:before { content: $ionicon-var-android-upload; }\n.#{$ionicons-prefix}android-volume-down:before { content: $ionicon-var-android-volume-down; }\n.#{$ionicons-prefix}android-volume-mute:before { content: $ionicon-var-android-volume-mute; }\n.#{$ionicons-prefix}android-volume-off:before { content: $ionicon-var-android-volume-off; }\n.#{$ionicons-prefix}android-volume-up:before { content: $ionicon-var-android-volume-up; }\n.#{$ionicons-prefix}android-walk:before { content: $ionicon-var-android-walk; }\n.#{$ionicons-prefix}android-warning:before { content: $ionicon-var-android-warning; }\n.#{$ionicons-prefix}android-watch:before { content: $ionicon-var-android-watch; }\n.#{$ionicons-prefix}android-wifi:before { content: $ionicon-var-android-wifi; }\n.#{$ionicons-prefix}aperture:before { content: $ionicon-var-aperture; }\n.#{$ionicons-prefix}archive:before { content: $ionicon-var-archive; }\n.#{$ionicons-prefix}arrow-down-a:before { content: $ionicon-var-arrow-down-a; }\n.#{$ionicons-prefix}arrow-down-b:before { content: $ionicon-var-arrow-down-b; }\n.#{$ionicons-prefix}arrow-down-c:before { content: $ionicon-var-arrow-down-c; }\n.#{$ionicons-prefix}arrow-expand:before { content: $ionicon-var-arrow-expand; }\n.#{$ionicons-prefix}arrow-graph-down-left:before { content: $ionicon-var-arrow-graph-down-left; }\n.#{$ionicons-prefix}arrow-graph-down-right:before { content: $ionicon-var-arrow-graph-down-right; }\n.#{$ionicons-prefix}arrow-graph-up-left:before { content: $ionicon-var-arrow-graph-up-left; }\n.#{$ionicons-prefix}arrow-graph-up-right:before { content: $ionicon-var-arrow-graph-up-right; }\n.#{$ionicons-prefix}arrow-left-a:before { content: $ionicon-var-arrow-left-a; }\n.#{$ionicons-prefix}arrow-left-b:before { content: $ionicon-var-arrow-left-b; }\n.#{$ionicons-prefix}arrow-left-c:before { content: $ionicon-var-arrow-left-c; }\n.#{$ionicons-prefix}arrow-move:before { content: $ionicon-var-arrow-move; }\n.#{$ionicons-prefix}arrow-resize:before { content: $ionicon-var-arrow-resize; }\n.#{$ionicons-prefix}arrow-return-left:before { content: $ionicon-var-arrow-return-left; }\n.#{$ionicons-prefix}arrow-return-right:before { content: $ionicon-var-arrow-return-right; }\n.#{$ionicons-prefix}arrow-right-a:before { content: $ionicon-var-arrow-right-a; }\n.#{$ionicons-prefix}arrow-right-b:before { content: $ionicon-var-arrow-right-b; }\n.#{$ionicons-prefix}arrow-right-c:before { content: $ionicon-var-arrow-right-c; }\n.#{$ionicons-prefix}arrow-shrink:before { content: $ionicon-var-arrow-shrink; }\n.#{$ionicons-prefix}arrow-swap:before { content: $ionicon-var-arrow-swap; }\n.#{$ionicons-prefix}arrow-up-a:before { content: $ionicon-var-arrow-up-a; }\n.#{$ionicons-prefix}arrow-up-b:before { content: $ionicon-var-arrow-up-b; }\n.#{$ionicons-prefix}arrow-up-c:before { content: $ionicon-var-arrow-up-c; }\n.#{$ionicons-prefix}asterisk:before { content: $ionicon-var-asterisk; }\n.#{$ionicons-prefix}at:before { content: $ionicon-var-at; }\n.#{$ionicons-prefix}backspace:before { content: $ionicon-var-backspace; }\n.#{$ionicons-prefix}backspace-outline:before { content: $ionicon-var-backspace-outline; }\n.#{$ionicons-prefix}bag:before { content: $ionicon-var-bag; }\n.#{$ionicons-prefix}battery-charging:before { content: $ionicon-var-battery-charging; }\n.#{$ionicons-prefix}battery-empty:before { content: $ionicon-var-battery-empty; }\n.#{$ionicons-prefix}battery-full:before { content: $ionicon-var-battery-full; }\n.#{$ionicons-prefix}battery-half:before { content: $ionicon-var-battery-half; }\n.#{$ionicons-prefix}battery-low:before { content: $ionicon-var-battery-low; }\n.#{$ionicons-prefix}beaker:before { content: $ionicon-var-beaker; }\n.#{$ionicons-prefix}beer:before { content: $ionicon-var-beer; }\n.#{$ionicons-prefix}bluetooth:before { content: $ionicon-var-bluetooth; }\n.#{$ionicons-prefix}bonfire:before { content: $ionicon-var-bonfire; }\n.#{$ionicons-prefix}bookmark:before { content: $ionicon-var-bookmark; }\n.#{$ionicons-prefix}bowtie:before { content: $ionicon-var-bowtie; }\n.#{$ionicons-prefix}briefcase:before { content: $ionicon-var-briefcase; }\n.#{$ionicons-prefix}bug:before { content: $ionicon-var-bug; }\n.#{$ionicons-prefix}calculator:before { content: $ionicon-var-calculator; }\n.#{$ionicons-prefix}calendar:before { content: $ionicon-var-calendar; }\n.#{$ionicons-prefix}camera:before { content: $ionicon-var-camera; }\n.#{$ionicons-prefix}card:before { content: $ionicon-var-card; }\n.#{$ionicons-prefix}cash:before { content: $ionicon-var-cash; }\n.#{$ionicons-prefix}chatbox:before { content: $ionicon-var-chatbox; }\n.#{$ionicons-prefix}chatbox-working:before { content: $ionicon-var-chatbox-working; }\n.#{$ionicons-prefix}chatboxes:before { content: $ionicon-var-chatboxes; }\n.#{$ionicons-prefix}chatbubble:before { content: $ionicon-var-chatbubble; }\n.#{$ionicons-prefix}chatbubble-working:before { content: $ionicon-var-chatbubble-working; }\n.#{$ionicons-prefix}chatbubbles:before { content: $ionicon-var-chatbubbles; }\n.#{$ionicons-prefix}checkmark:before { content: $ionicon-var-checkmark; }\n.#{$ionicons-prefix}checkmark-circled:before { content: $ionicon-var-checkmark-circled; }\n.#{$ionicons-prefix}checkmark-round:before { content: $ionicon-var-checkmark-round; }\n.#{$ionicons-prefix}chevron-down:before { content: $ionicon-var-chevron-down; }\n.#{$ionicons-prefix}chevron-left:before { content: $ionicon-var-chevron-left; }\n.#{$ionicons-prefix}chevron-right:before { content: $ionicon-var-chevron-right; }\n.#{$ionicons-prefix}chevron-up:before { content: $ionicon-var-chevron-up; }\n.#{$ionicons-prefix}clipboard:before { content: $ionicon-var-clipboard; }\n.#{$ionicons-prefix}clock:before { content: $ionicon-var-clock; }\n.#{$ionicons-prefix}close:before { content: $ionicon-var-close; }\n.#{$ionicons-prefix}close-circled:before { content: $ionicon-var-close-circled; }\n.#{$ionicons-prefix}close-round:before { content: $ionicon-var-close-round; }\n.#{$ionicons-prefix}closed-captioning:before { content: $ionicon-var-closed-captioning; }\n.#{$ionicons-prefix}cloud:before { content: $ionicon-var-cloud; }\n.#{$ionicons-prefix}code:before { content: $ionicon-var-code; }\n.#{$ionicons-prefix}code-download:before { content: $ionicon-var-code-download; }\n.#{$ionicons-prefix}code-working:before { content: $ionicon-var-code-working; }\n.#{$ionicons-prefix}coffee:before { content: $ionicon-var-coffee; }\n.#{$ionicons-prefix}compass:before { content: $ionicon-var-compass; }\n.#{$ionicons-prefix}compose:before { content: $ionicon-var-compose; }\n.#{$ionicons-prefix}connection-bars:before { content: $ionicon-var-connection-bars; }\n.#{$ionicons-prefix}contrast:before { content: $ionicon-var-contrast; }\n.#{$ionicons-prefix}crop:before { content: $ionicon-var-crop; }\n.#{$ionicons-prefix}cube:before { content: $ionicon-var-cube; }\n.#{$ionicons-prefix}disc:before { content: $ionicon-var-disc; }\n.#{$ionicons-prefix}document:before { content: $ionicon-var-document; }\n.#{$ionicons-prefix}document-text:before { content: $ionicon-var-document-text; }\n.#{$ionicons-prefix}drag:before { content: $ionicon-var-drag; }\n.#{$ionicons-prefix}earth:before { content: $ionicon-var-earth; }\n.#{$ionicons-prefix}easel:before { content: $ionicon-var-easel; }\n.#{$ionicons-prefix}edit:before { content: $ionicon-var-edit; }\n.#{$ionicons-prefix}egg:before { content: $ionicon-var-egg; }\n.#{$ionicons-prefix}eject:before { content: $ionicon-var-eject; }\n.#{$ionicons-prefix}email:before { content: $ionicon-var-email; }\n.#{$ionicons-prefix}email-unread:before { content: $ionicon-var-email-unread; }\n.#{$ionicons-prefix}erlenmeyer-flask:before { content: $ionicon-var-erlenmeyer-flask; }\n.#{$ionicons-prefix}erlenmeyer-flask-bubbles:before { content: $ionicon-var-erlenmeyer-flask-bubbles; }\n.#{$ionicons-prefix}eye:before { content: $ionicon-var-eye; }\n.#{$ionicons-prefix}eye-disabled:before { content: $ionicon-var-eye-disabled; }\n.#{$ionicons-prefix}female:before { content: $ionicon-var-female; }\n.#{$ionicons-prefix}filing:before { content: $ionicon-var-filing; }\n.#{$ionicons-prefix}film-marker:before { content: $ionicon-var-film-marker; }\n.#{$ionicons-prefix}fireball:before { content: $ionicon-var-fireball; }\n.#{$ionicons-prefix}flag:before { content: $ionicon-var-flag; }\n.#{$ionicons-prefix}flame:before { content: $ionicon-var-flame; }\n.#{$ionicons-prefix}flash:before { content: $ionicon-var-flash; }\n.#{$ionicons-prefix}flash-off:before { content: $ionicon-var-flash-off; }\n.#{$ionicons-prefix}folder:before { content: $ionicon-var-folder; }\n.#{$ionicons-prefix}fork:before { content: $ionicon-var-fork; }\n.#{$ionicons-prefix}fork-repo:before { content: $ionicon-var-fork-repo; }\n.#{$ionicons-prefix}forward:before { content: $ionicon-var-forward; }\n.#{$ionicons-prefix}funnel:before { content: $ionicon-var-funnel; }\n.#{$ionicons-prefix}gear-a:before { content: $ionicon-var-gear-a; }\n.#{$ionicons-prefix}gear-b:before { content: $ionicon-var-gear-b; }\n.#{$ionicons-prefix}grid:before { content: $ionicon-var-grid; }\n.#{$ionicons-prefix}hammer:before { content: $ionicon-var-hammer; }\n.#{$ionicons-prefix}happy:before { content: $ionicon-var-happy; }\n.#{$ionicons-prefix}happy-outline:before { content: $ionicon-var-happy-outline; }\n.#{$ionicons-prefix}headphone:before { content: $ionicon-var-headphone; }\n.#{$ionicons-prefix}heart:before { content: $ionicon-var-heart; }\n.#{$ionicons-prefix}heart-broken:before { content: $ionicon-var-heart-broken; }\n.#{$ionicons-prefix}help:before { content: $ionicon-var-help; }\n.#{$ionicons-prefix}help-buoy:before { content: $ionicon-var-help-buoy; }\n.#{$ionicons-prefix}help-circled:before { content: $ionicon-var-help-circled; }\n.#{$ionicons-prefix}home:before { content: $ionicon-var-home; }\n.#{$ionicons-prefix}icecream:before { content: $ionicon-var-icecream; }\n.#{$ionicons-prefix}image:before { content: $ionicon-var-image; }\n.#{$ionicons-prefix}images:before { content: $ionicon-var-images; }\n.#{$ionicons-prefix}information:before { content: $ionicon-var-information; }\n.#{$ionicons-prefix}information-circled:before { content: $ionicon-var-information-circled; }\n.#{$ionicons-prefix}ionic:before { content: $ionicon-var-ionic; }\n.#{$ionicons-prefix}ios-alarm:before { content: $ionicon-var-ios-alarm; }\n.#{$ionicons-prefix}ios-alarm-outline:before { content: $ionicon-var-ios-alarm-outline; }\n.#{$ionicons-prefix}ios-albums:before { content: $ionicon-var-ios-albums; }\n.#{$ionicons-prefix}ios-albums-outline:before { content: $ionicon-var-ios-albums-outline; }\n.#{$ionicons-prefix}ios-americanfootball:before { content: $ionicon-var-ios-americanfootball; }\n.#{$ionicons-prefix}ios-americanfootball-outline:before { content: $ionicon-var-ios-americanfootball-outline; }\n.#{$ionicons-prefix}ios-analytics:before { content: $ionicon-var-ios-analytics; }\n.#{$ionicons-prefix}ios-analytics-outline:before { content: $ionicon-var-ios-analytics-outline; }\n.#{$ionicons-prefix}ios-arrow-back:before { content: $ionicon-var-ios-arrow-back; }\n.#{$ionicons-prefix}ios-arrow-down:before { content: $ionicon-var-ios-arrow-down; }\n.#{$ionicons-prefix}ios-arrow-forward:before { content: $ionicon-var-ios-arrow-forward; }\n.#{$ionicons-prefix}ios-arrow-left:before { content: $ionicon-var-ios-arrow-left; }\n.#{$ionicons-prefix}ios-arrow-right:before { content: $ionicon-var-ios-arrow-right; }\n.#{$ionicons-prefix}ios-arrow-thin-down:before { content: $ionicon-var-ios-arrow-thin-down; }\n.#{$ionicons-prefix}ios-arrow-thin-left:before { content: $ionicon-var-ios-arrow-thin-left; }\n.#{$ionicons-prefix}ios-arrow-thin-right:before { content: $ionicon-var-ios-arrow-thin-right; }\n.#{$ionicons-prefix}ios-arrow-thin-up:before { content: $ionicon-var-ios-arrow-thin-up; }\n.#{$ionicons-prefix}ios-arrow-up:before { content: $ionicon-var-ios-arrow-up; }\n.#{$ionicons-prefix}ios-at:before { content: $ionicon-var-ios-at; }\n.#{$ionicons-prefix}ios-at-outline:before { content: $ionicon-var-ios-at-outline; }\n.#{$ionicons-prefix}ios-barcode:before { content: $ionicon-var-ios-barcode; }\n.#{$ionicons-prefix}ios-barcode-outline:before { content: $ionicon-var-ios-barcode-outline; }\n.#{$ionicons-prefix}ios-baseball:before { content: $ionicon-var-ios-baseball; }\n.#{$ionicons-prefix}ios-baseball-outline:before { content: $ionicon-var-ios-baseball-outline; }\n.#{$ionicons-prefix}ios-basketball:before { content: $ionicon-var-ios-basketball; }\n.#{$ionicons-prefix}ios-basketball-outline:before { content: $ionicon-var-ios-basketball-outline; }\n.#{$ionicons-prefix}ios-bell:before { content: $ionicon-var-ios-bell; }\n.#{$ionicons-prefix}ios-bell-outline:before { content: $ionicon-var-ios-bell-outline; }\n.#{$ionicons-prefix}ios-body:before { content: $ionicon-var-ios-body; }\n.#{$ionicons-prefix}ios-body-outline:before { content: $ionicon-var-ios-body-outline; }\n.#{$ionicons-prefix}ios-bolt:before { content: $ionicon-var-ios-bolt; }\n.#{$ionicons-prefix}ios-bolt-outline:before { content: $ionicon-var-ios-bolt-outline; }\n.#{$ionicons-prefix}ios-book:before { content: $ionicon-var-ios-book; }\n.#{$ionicons-prefix}ios-book-outline:before { content: $ionicon-var-ios-book-outline; }\n.#{$ionicons-prefix}ios-bookmarks:before { content: $ionicon-var-ios-bookmarks; }\n.#{$ionicons-prefix}ios-bookmarks-outline:before { content: $ionicon-var-ios-bookmarks-outline; }\n.#{$ionicons-prefix}ios-box:before { content: $ionicon-var-ios-box; }\n.#{$ionicons-prefix}ios-box-outline:before { content: $ionicon-var-ios-box-outline; }\n.#{$ionicons-prefix}ios-briefcase:before { content: $ionicon-var-ios-briefcase; }\n.#{$ionicons-prefix}ios-briefcase-outline:before { content: $ionicon-var-ios-briefcase-outline; }\n.#{$ionicons-prefix}ios-browsers:before { content: $ionicon-var-ios-browsers; }\n.#{$ionicons-prefix}ios-browsers-outline:before { content: $ionicon-var-ios-browsers-outline; }\n.#{$ionicons-prefix}ios-calculator:before { content: $ionicon-var-ios-calculator; }\n.#{$ionicons-prefix}ios-calculator-outline:before { content: $ionicon-var-ios-calculator-outline; }\n.#{$ionicons-prefix}ios-calendar:before { content: $ionicon-var-ios-calendar; }\n.#{$ionicons-prefix}ios-calendar-outline:before { content: $ionicon-var-ios-calendar-outline; }\n.#{$ionicons-prefix}ios-camera:before { content: $ionicon-var-ios-camera; }\n.#{$ionicons-prefix}ios-camera-outline:before { content: $ionicon-var-ios-camera-outline; }\n.#{$ionicons-prefix}ios-cart:before { content: $ionicon-var-ios-cart; }\n.#{$ionicons-prefix}ios-cart-outline:before { content: $ionicon-var-ios-cart-outline; }\n.#{$ionicons-prefix}ios-chatboxes:before { content: $ionicon-var-ios-chatboxes; }\n.#{$ionicons-prefix}ios-chatboxes-outline:before { content: $ionicon-var-ios-chatboxes-outline; }\n.#{$ionicons-prefix}ios-chatbubble:before { content: $ionicon-var-ios-chatbubble; }\n.#{$ionicons-prefix}ios-chatbubble-outline:before { content: $ionicon-var-ios-chatbubble-outline; }\n.#{$ionicons-prefix}ios-checkmark:before { content: $ionicon-var-ios-checkmark; }\n.#{$ionicons-prefix}ios-checkmark-empty:before { content: $ionicon-var-ios-checkmark-empty; }\n.#{$ionicons-prefix}ios-checkmark-outline:before { content: $ionicon-var-ios-checkmark-outline; }\n.#{$ionicons-prefix}ios-circle-filled:before { content: $ionicon-var-ios-circle-filled; }\n.#{$ionicons-prefix}ios-circle-outline:before { content: $ionicon-var-ios-circle-outline; }\n.#{$ionicons-prefix}ios-clock:before { content: $ionicon-var-ios-clock; }\n.#{$ionicons-prefix}ios-clock-outline:before { content: $ionicon-var-ios-clock-outline; }\n.#{$ionicons-prefix}ios-close:before { content: $ionicon-var-ios-close; }\n.#{$ionicons-prefix}ios-close-empty:before { content: $ionicon-var-ios-close-empty; }\n.#{$ionicons-prefix}ios-close-outline:before { content: $ionicon-var-ios-close-outline; }\n.#{$ionicons-prefix}ios-cloud:before { content: $ionicon-var-ios-cloud; }\n.#{$ionicons-prefix}ios-cloud-download:before { content: $ionicon-var-ios-cloud-download; }\n.#{$ionicons-prefix}ios-cloud-download-outline:before { content: $ionicon-var-ios-cloud-download-outline; }\n.#{$ionicons-prefix}ios-cloud-outline:before { content: $ionicon-var-ios-cloud-outline; }\n.#{$ionicons-prefix}ios-cloud-upload:before { content: $ionicon-var-ios-cloud-upload; }\n.#{$ionicons-prefix}ios-cloud-upload-outline:before { content: $ionicon-var-ios-cloud-upload-outline; }\n.#{$ionicons-prefix}ios-cloudy:before { content: $ionicon-var-ios-cloudy; }\n.#{$ionicons-prefix}ios-cloudy-night:before { content: $ionicon-var-ios-cloudy-night; }\n.#{$ionicons-prefix}ios-cloudy-night-outline:before { content: $ionicon-var-ios-cloudy-night-outline; }\n.#{$ionicons-prefix}ios-cloudy-outline:before { content: $ionicon-var-ios-cloudy-outline; }\n.#{$ionicons-prefix}ios-cog:before { content: $ionicon-var-ios-cog; }\n.#{$ionicons-prefix}ios-cog-outline:before { content: $ionicon-var-ios-cog-outline; }\n.#{$ionicons-prefix}ios-color-filter:before { content: $ionicon-var-ios-color-filter; }\n.#{$ionicons-prefix}ios-color-filter-outline:before { content: $ionicon-var-ios-color-filter-outline; }\n.#{$ionicons-prefix}ios-color-wand:before { content: $ionicon-var-ios-color-wand; }\n.#{$ionicons-prefix}ios-color-wand-outline:before { content: $ionicon-var-ios-color-wand-outline; }\n.#{$ionicons-prefix}ios-compose:before { content: $ionicon-var-ios-compose; }\n.#{$ionicons-prefix}ios-compose-outline:before { content: $ionicon-var-ios-compose-outline; }\n.#{$ionicons-prefix}ios-contact:before { content: $ionicon-var-ios-contact; }\n.#{$ionicons-prefix}ios-contact-outline:before { content: $ionicon-var-ios-contact-outline; }\n.#{$ionicons-prefix}ios-copy:before { content: $ionicon-var-ios-copy; }\n.#{$ionicons-prefix}ios-copy-outline:before { content: $ionicon-var-ios-copy-outline; }\n.#{$ionicons-prefix}ios-crop:before { content: $ionicon-var-ios-crop; }\n.#{$ionicons-prefix}ios-crop-strong:before { content: $ionicon-var-ios-crop-strong; }\n.#{$ionicons-prefix}ios-download:before { content: $ionicon-var-ios-download; }\n.#{$ionicons-prefix}ios-download-outline:before { content: $ionicon-var-ios-download-outline; }\n.#{$ionicons-prefix}ios-drag:before { content: $ionicon-var-ios-drag; }\n.#{$ionicons-prefix}ios-email:before { content: $ionicon-var-ios-email; }\n.#{$ionicons-prefix}ios-email-outline:before { content: $ionicon-var-ios-email-outline; }\n.#{$ionicons-prefix}ios-eye:before { content: $ionicon-var-ios-eye; }\n.#{$ionicons-prefix}ios-eye-outline:before { content: $ionicon-var-ios-eye-outline; }\n.#{$ionicons-prefix}ios-fastforward:before { content: $ionicon-var-ios-fastforward; }\n.#{$ionicons-prefix}ios-fastforward-outline:before { content: $ionicon-var-ios-fastforward-outline; }\n.#{$ionicons-prefix}ios-filing:before { content: $ionicon-var-ios-filing; }\n.#{$ionicons-prefix}ios-filing-outline:before { content: $ionicon-var-ios-filing-outline; }\n.#{$ionicons-prefix}ios-film:before { content: $ionicon-var-ios-film; }\n.#{$ionicons-prefix}ios-film-outline:before { content: $ionicon-var-ios-film-outline; }\n.#{$ionicons-prefix}ios-flag:before { content: $ionicon-var-ios-flag; }\n.#{$ionicons-prefix}ios-flag-outline:before { content: $ionicon-var-ios-flag-outline; }\n.#{$ionicons-prefix}ios-flame:before { content: $ionicon-var-ios-flame; }\n.#{$ionicons-prefix}ios-flame-outline:before { content: $ionicon-var-ios-flame-outline; }\n.#{$ionicons-prefix}ios-flask:before { content: $ionicon-var-ios-flask; }\n.#{$ionicons-prefix}ios-flask-outline:before { content: $ionicon-var-ios-flask-outline; }\n.#{$ionicons-prefix}ios-flower:before { content: $ionicon-var-ios-flower; }\n.#{$ionicons-prefix}ios-flower-outline:before { content: $ionicon-var-ios-flower-outline; }\n.#{$ionicons-prefix}ios-folder:before { content: $ionicon-var-ios-folder; }\n.#{$ionicons-prefix}ios-folder-outline:before { content: $ionicon-var-ios-folder-outline; }\n.#{$ionicons-prefix}ios-football:before { content: $ionicon-var-ios-football; }\n.#{$ionicons-prefix}ios-football-outline:before { content: $ionicon-var-ios-football-outline; }\n.#{$ionicons-prefix}ios-game-controller-a:before { content: $ionicon-var-ios-game-controller-a; }\n.#{$ionicons-prefix}ios-game-controller-a-outline:before { content: $ionicon-var-ios-game-controller-a-outline; }\n.#{$ionicons-prefix}ios-game-controller-b:before { content: $ionicon-var-ios-game-controller-b; }\n.#{$ionicons-prefix}ios-game-controller-b-outline:before { content: $ionicon-var-ios-game-controller-b-outline; }\n.#{$ionicons-prefix}ios-gear:before { content: $ionicon-var-ios-gear; }\n.#{$ionicons-prefix}ios-gear-outline:before { content: $ionicon-var-ios-gear-outline; }\n.#{$ionicons-prefix}ios-glasses:before { content: $ionicon-var-ios-glasses; }\n.#{$ionicons-prefix}ios-glasses-outline:before { content: $ionicon-var-ios-glasses-outline; }\n.#{$ionicons-prefix}ios-grid-view:before { content: $ionicon-var-ios-grid-view; }\n.#{$ionicons-prefix}ios-grid-view-outline:before { content: $ionicon-var-ios-grid-view-outline; }\n.#{$ionicons-prefix}ios-heart:before { content: $ionicon-var-ios-heart; }\n.#{$ionicons-prefix}ios-heart-outline:before { content: $ionicon-var-ios-heart-outline; }\n.#{$ionicons-prefix}ios-help:before { content: $ionicon-var-ios-help; }\n.#{$ionicons-prefix}ios-help-empty:before { content: $ionicon-var-ios-help-empty; }\n.#{$ionicons-prefix}ios-help-outline:before { content: $ionicon-var-ios-help-outline; }\n.#{$ionicons-prefix}ios-home:before { content: $ionicon-var-ios-home; }\n.#{$ionicons-prefix}ios-home-outline:before { content: $ionicon-var-ios-home-outline; }\n.#{$ionicons-prefix}ios-infinite:before { content: $ionicon-var-ios-infinite; }\n.#{$ionicons-prefix}ios-infinite-outline:before { content: $ionicon-var-ios-infinite-outline; }\n.#{$ionicons-prefix}ios-information:before { content: $ionicon-var-ios-information; }\n.#{$ionicons-prefix}ios-information-empty:before { content: $ionicon-var-ios-information-empty; }\n.#{$ionicons-prefix}ios-information-outline:before { content: $ionicon-var-ios-information-outline; }\n.#{$ionicons-prefix}ios-ionic-outline:before { content: $ionicon-var-ios-ionic-outline; }\n.#{$ionicons-prefix}ios-keypad:before { content: $ionicon-var-ios-keypad; }\n.#{$ionicons-prefix}ios-keypad-outline:before { content: $ionicon-var-ios-keypad-outline; }\n.#{$ionicons-prefix}ios-lightbulb:before { content: $ionicon-var-ios-lightbulb; }\n.#{$ionicons-prefix}ios-lightbulb-outline:before { content: $ionicon-var-ios-lightbulb-outline; }\n.#{$ionicons-prefix}ios-list:before { content: $ionicon-var-ios-list; }\n.#{$ionicons-prefix}ios-list-outline:before { content: $ionicon-var-ios-list-outline; }\n.#{$ionicons-prefix}ios-location:before { content: $ionicon-var-ios-location; }\n.#{$ionicons-prefix}ios-location-outline:before { content: $ionicon-var-ios-location-outline; }\n.#{$ionicons-prefix}ios-locked:before { content: $ionicon-var-ios-locked; }\n.#{$ionicons-prefix}ios-locked-outline:before { content: $ionicon-var-ios-locked-outline; }\n.#{$ionicons-prefix}ios-loop:before { content: $ionicon-var-ios-loop; }\n.#{$ionicons-prefix}ios-loop-strong:before { content: $ionicon-var-ios-loop-strong; }\n.#{$ionicons-prefix}ios-medical:before { content: $ionicon-var-ios-medical; }\n.#{$ionicons-prefix}ios-medical-outline:before { content: $ionicon-var-ios-medical-outline; }\n.#{$ionicons-prefix}ios-medkit:before { content: $ionicon-var-ios-medkit; }\n.#{$ionicons-prefix}ios-medkit-outline:before { content: $ionicon-var-ios-medkit-outline; }\n.#{$ionicons-prefix}ios-mic:before { content: $ionicon-var-ios-mic; }\n.#{$ionicons-prefix}ios-mic-off:before { content: $ionicon-var-ios-mic-off; }\n.#{$ionicons-prefix}ios-mic-outline:before { content: $ionicon-var-ios-mic-outline; }\n.#{$ionicons-prefix}ios-minus:before { content: $ionicon-var-ios-minus; }\n.#{$ionicons-prefix}ios-minus-empty:before { content: $ionicon-var-ios-minus-empty; }\n.#{$ionicons-prefix}ios-minus-outline:before { content: $ionicon-var-ios-minus-outline; }\n.#{$ionicons-prefix}ios-monitor:before { content: $ionicon-var-ios-monitor; }\n.#{$ionicons-prefix}ios-monitor-outline:before { content: $ionicon-var-ios-monitor-outline; }\n.#{$ionicons-prefix}ios-moon:before { content: $ionicon-var-ios-moon; }\n.#{$ionicons-prefix}ios-moon-outline:before { content: $ionicon-var-ios-moon-outline; }\n.#{$ionicons-prefix}ios-more:before { content: $ionicon-var-ios-more; }\n.#{$ionicons-prefix}ios-more-outline:before { content: $ionicon-var-ios-more-outline; }\n.#{$ionicons-prefix}ios-musical-note:before { content: $ionicon-var-ios-musical-note; }\n.#{$ionicons-prefix}ios-musical-notes:before { content: $ionicon-var-ios-musical-notes; }\n.#{$ionicons-prefix}ios-navigate:before { content: $ionicon-var-ios-navigate; }\n.#{$ionicons-prefix}ios-navigate-outline:before { content: $ionicon-var-ios-navigate-outline; }\n.#{$ionicons-prefix}ios-nutrition:before { content: $ionicon-var-ios-nutrition; }\n.#{$ionicons-prefix}ios-nutrition-outline:before { content: $ionicon-var-ios-nutrition-outline; }\n.#{$ionicons-prefix}ios-paper:before { content: $ionicon-var-ios-paper; }\n.#{$ionicons-prefix}ios-paper-outline:before { content: $ionicon-var-ios-paper-outline; }\n.#{$ionicons-prefix}ios-paperplane:before { content: $ionicon-var-ios-paperplane; }\n.#{$ionicons-prefix}ios-paperplane-outline:before { content: $ionicon-var-ios-paperplane-outline; }\n.#{$ionicons-prefix}ios-partlysunny:before { content: $ionicon-var-ios-partlysunny; }\n.#{$ionicons-prefix}ios-partlysunny-outline:before { content: $ionicon-var-ios-partlysunny-outline; }\n.#{$ionicons-prefix}ios-pause:before { content: $ionicon-var-ios-pause; }\n.#{$ionicons-prefix}ios-pause-outline:before { content: $ionicon-var-ios-pause-outline; }\n.#{$ionicons-prefix}ios-paw:before { content: $ionicon-var-ios-paw; }\n.#{$ionicons-prefix}ios-paw-outline:before { content: $ionicon-var-ios-paw-outline; }\n.#{$ionicons-prefix}ios-people:before { content: $ionicon-var-ios-people; }\n.#{$ionicons-prefix}ios-people-outline:before { content: $ionicon-var-ios-people-outline; }\n.#{$ionicons-prefix}ios-person:before { content: $ionicon-var-ios-person; }\n.#{$ionicons-prefix}ios-person-outline:before { content: $ionicon-var-ios-person-outline; }\n.#{$ionicons-prefix}ios-personadd:before { content: $ionicon-var-ios-personadd; }\n.#{$ionicons-prefix}ios-personadd-outline:before { content: $ionicon-var-ios-personadd-outline; }\n.#{$ionicons-prefix}ios-photos:before { content: $ionicon-var-ios-photos; }\n.#{$ionicons-prefix}ios-photos-outline:before { content: $ionicon-var-ios-photos-outline; }\n.#{$ionicons-prefix}ios-pie:before { content: $ionicon-var-ios-pie; }\n.#{$ionicons-prefix}ios-pie-outline:before { content: $ionicon-var-ios-pie-outline; }\n.#{$ionicons-prefix}ios-pint:before { content: $ionicon-var-ios-pint; }\n.#{$ionicons-prefix}ios-pint-outline:before { content: $ionicon-var-ios-pint-outline; }\n.#{$ionicons-prefix}ios-play:before { content: $ionicon-var-ios-play; }\n.#{$ionicons-prefix}ios-play-outline:before { content: $ionicon-var-ios-play-outline; }\n.#{$ionicons-prefix}ios-plus:before { content: $ionicon-var-ios-plus; }\n.#{$ionicons-prefix}ios-plus-empty:before { content: $ionicon-var-ios-plus-empty; }\n.#{$ionicons-prefix}ios-plus-outline:before { content: $ionicon-var-ios-plus-outline; }\n.#{$ionicons-prefix}ios-pricetag:before { content: $ionicon-var-ios-pricetag; }\n.#{$ionicons-prefix}ios-pricetag-outline:before { content: $ionicon-var-ios-pricetag-outline; }\n.#{$ionicons-prefix}ios-pricetags:before { content: $ionicon-var-ios-pricetags; }\n.#{$ionicons-prefix}ios-pricetags-outline:before { content: $ionicon-var-ios-pricetags-outline; }\n.#{$ionicons-prefix}ios-printer:before { content: $ionicon-var-ios-printer; }\n.#{$ionicons-prefix}ios-printer-outline:before { content: $ionicon-var-ios-printer-outline; }\n.#{$ionicons-prefix}ios-pulse:before { content: $ionicon-var-ios-pulse; }\n.#{$ionicons-prefix}ios-pulse-strong:before { content: $ionicon-var-ios-pulse-strong; }\n.#{$ionicons-prefix}ios-rainy:before { content: $ionicon-var-ios-rainy; }\n.#{$ionicons-prefix}ios-rainy-outline:before { content: $ionicon-var-ios-rainy-outline; }\n.#{$ionicons-prefix}ios-recording:before { content: $ionicon-var-ios-recording; }\n.#{$ionicons-prefix}ios-recording-outline:before { content: $ionicon-var-ios-recording-outline; }\n.#{$ionicons-prefix}ios-redo:before { content: $ionicon-var-ios-redo; }\n.#{$ionicons-prefix}ios-redo-outline:before { content: $ionicon-var-ios-redo-outline; }\n.#{$ionicons-prefix}ios-refresh:before { content: $ionicon-var-ios-refresh; }\n.#{$ionicons-prefix}ios-refresh-empty:before { content: $ionicon-var-ios-refresh-empty; }\n.#{$ionicons-prefix}ios-refresh-outline:before { content: $ionicon-var-ios-refresh-outline; }\n.#{$ionicons-prefix}ios-reload:before { content: $ionicon-var-ios-reload; }\n.#{$ionicons-prefix}ios-reverse-camera:before { content: $ionicon-var-ios-reverse-camera; }\n.#{$ionicons-prefix}ios-reverse-camera-outline:before { content: $ionicon-var-ios-reverse-camera-outline; }\n.#{$ionicons-prefix}ios-rewind:before { content: $ionicon-var-ios-rewind; }\n.#{$ionicons-prefix}ios-rewind-outline:before { content: $ionicon-var-ios-rewind-outline; }\n.#{$ionicons-prefix}ios-rose:before { content: $ionicon-var-ios-rose; }\n.#{$ionicons-prefix}ios-rose-outline:before { content: $ionicon-var-ios-rose-outline; }\n.#{$ionicons-prefix}ios-search:before { content: $ionicon-var-ios-search; }\n.#{$ionicons-prefix}ios-search-strong:before { content: $ionicon-var-ios-search-strong; }\n.#{$ionicons-prefix}ios-settings:before { content: $ionicon-var-ios-settings; }\n.#{$ionicons-prefix}ios-settings-strong:before { content: $ionicon-var-ios-settings-strong; }\n.#{$ionicons-prefix}ios-shuffle:before { content: $ionicon-var-ios-shuffle; }\n.#{$ionicons-prefix}ios-shuffle-strong:before { content: $ionicon-var-ios-shuffle-strong; }\n.#{$ionicons-prefix}ios-skipbackward:before { content: $ionicon-var-ios-skipbackward; }\n.#{$ionicons-prefix}ios-skipbackward-outline:before { content: $ionicon-var-ios-skipbackward-outline; }\n.#{$ionicons-prefix}ios-skipforward:before { content: $ionicon-var-ios-skipforward; }\n.#{$ionicons-prefix}ios-skipforward-outline:before { content: $ionicon-var-ios-skipforward-outline; }\n.#{$ionicons-prefix}ios-snowy:before { content: $ionicon-var-ios-snowy; }\n.#{$ionicons-prefix}ios-speedometer:before { content: $ionicon-var-ios-speedometer; }\n.#{$ionicons-prefix}ios-speedometer-outline:before { content: $ionicon-var-ios-speedometer-outline; }\n.#{$ionicons-prefix}ios-star:before { content: $ionicon-var-ios-star; }\n.#{$ionicons-prefix}ios-star-half:before { content: $ionicon-var-ios-star-half; }\n.#{$ionicons-prefix}ios-star-outline:before { content: $ionicon-var-ios-star-outline; }\n.#{$ionicons-prefix}ios-stopwatch:before { content: $ionicon-var-ios-stopwatch; }\n.#{$ionicons-prefix}ios-stopwatch-outline:before { content: $ionicon-var-ios-stopwatch-outline; }\n.#{$ionicons-prefix}ios-sunny:before { content: $ionicon-var-ios-sunny; }\n.#{$ionicons-prefix}ios-sunny-outline:before { content: $ionicon-var-ios-sunny-outline; }\n.#{$ionicons-prefix}ios-telephone:before { content: $ionicon-var-ios-telephone; }\n.#{$ionicons-prefix}ios-telephone-outline:before { content: $ionicon-var-ios-telephone-outline; }\n.#{$ionicons-prefix}ios-tennisball:before { content: $ionicon-var-ios-tennisball; }\n.#{$ionicons-prefix}ios-tennisball-outline:before { content: $ionicon-var-ios-tennisball-outline; }\n.#{$ionicons-prefix}ios-thunderstorm:before { content: $ionicon-var-ios-thunderstorm; }\n.#{$ionicons-prefix}ios-thunderstorm-outline:before { content: $ionicon-var-ios-thunderstorm-outline; }\n.#{$ionicons-prefix}ios-time:before { content: $ionicon-var-ios-time; }\n.#{$ionicons-prefix}ios-time-outline:before { content: $ionicon-var-ios-time-outline; }\n.#{$ionicons-prefix}ios-timer:before { content: $ionicon-var-ios-timer; }\n.#{$ionicons-prefix}ios-timer-outline:before { content: $ionicon-var-ios-timer-outline; }\n.#{$ionicons-prefix}ios-toggle:before { content: $ionicon-var-ios-toggle; }\n.#{$ionicons-prefix}ios-toggle-outline:before { content: $ionicon-var-ios-toggle-outline; }\n.#{$ionicons-prefix}ios-trash:before { content: $ionicon-var-ios-trash; }\n.#{$ionicons-prefix}ios-trash-outline:before { content: $ionicon-var-ios-trash-outline; }\n.#{$ionicons-prefix}ios-undo:before { content: $ionicon-var-ios-undo; }\n.#{$ionicons-prefix}ios-undo-outline:before { content: $ionicon-var-ios-undo-outline; }\n.#{$ionicons-prefix}ios-unlocked:before { content: $ionicon-var-ios-unlocked; }\n.#{$ionicons-prefix}ios-unlocked-outline:before { content: $ionicon-var-ios-unlocked-outline; }\n.#{$ionicons-prefix}ios-upload:before { content: $ionicon-var-ios-upload; }\n.#{$ionicons-prefix}ios-upload-outline:before { content: $ionicon-var-ios-upload-outline; }\n.#{$ionicons-prefix}ios-videocam:before { content: $ionicon-var-ios-videocam; }\n.#{$ionicons-prefix}ios-videocam-outline:before { content: $ionicon-var-ios-videocam-outline; }\n.#{$ionicons-prefix}ios-volume-high:before { content: $ionicon-var-ios-volume-high; }\n.#{$ionicons-prefix}ios-volume-low:before { content: $ionicon-var-ios-volume-low; }\n.#{$ionicons-prefix}ios-wineglass:before { content: $ionicon-var-ios-wineglass; }\n.#{$ionicons-prefix}ios-wineglass-outline:before { content: $ionicon-var-ios-wineglass-outline; }\n.#{$ionicons-prefix}ios-world:before { content: $ionicon-var-ios-world; }\n.#{$ionicons-prefix}ios-world-outline:before { content: $ionicon-var-ios-world-outline; }\n.#{$ionicons-prefix}ipad:before { content: $ionicon-var-ipad; }\n.#{$ionicons-prefix}iphone:before { content: $ionicon-var-iphone; }\n.#{$ionicons-prefix}ipod:before { content: $ionicon-var-ipod; }\n.#{$ionicons-prefix}jet:before { content: $ionicon-var-jet; }\n.#{$ionicons-prefix}key:before { content: $ionicon-var-key; }\n.#{$ionicons-prefix}knife:before { content: $ionicon-var-knife; }\n.#{$ionicons-prefix}laptop:before { content: $ionicon-var-laptop; }\n.#{$ionicons-prefix}leaf:before { content: $ionicon-var-leaf; }\n.#{$ionicons-prefix}levels:before { content: $ionicon-var-levels; }\n.#{$ionicons-prefix}lightbulb:before { content: $ionicon-var-lightbulb; }\n.#{$ionicons-prefix}link:before { content: $ionicon-var-link; }\n.#{$ionicons-prefix}load-a:before { content: $ionicon-var-load-a; }\n.#{$ionicons-prefix}load-b:before { content: $ionicon-var-load-b; }\n.#{$ionicons-prefix}load-c:before { content: $ionicon-var-load-c; }\n.#{$ionicons-prefix}load-d:before { content: $ionicon-var-load-d; }\n.#{$ionicons-prefix}location:before { content: $ionicon-var-location; }\n.#{$ionicons-prefix}lock-combination:before { content: $ionicon-var-lock-combination; }\n.#{$ionicons-prefix}locked:before { content: $ionicon-var-locked; }\n.#{$ionicons-prefix}log-in:before { content: $ionicon-var-log-in; }\n.#{$ionicons-prefix}log-out:before { content: $ionicon-var-log-out; }\n.#{$ionicons-prefix}loop:before { content: $ionicon-var-loop; }\n.#{$ionicons-prefix}magnet:before { content: $ionicon-var-magnet; }\n.#{$ionicons-prefix}male:before { content: $ionicon-var-male; }\n.#{$ionicons-prefix}man:before { content: $ionicon-var-man; }\n.#{$ionicons-prefix}map:before { content: $ionicon-var-map; }\n.#{$ionicons-prefix}medkit:before { content: $ionicon-var-medkit; }\n.#{$ionicons-prefix}merge:before { content: $ionicon-var-merge; }\n.#{$ionicons-prefix}mic-a:before { content: $ionicon-var-mic-a; }\n.#{$ionicons-prefix}mic-b:before { content: $ionicon-var-mic-b; }\n.#{$ionicons-prefix}mic-c:before { content: $ionicon-var-mic-c; }\n.#{$ionicons-prefix}minus:before { content: $ionicon-var-minus; }\n.#{$ionicons-prefix}minus-circled:before { content: $ionicon-var-minus-circled; }\n.#{$ionicons-prefix}minus-round:before { content: $ionicon-var-minus-round; }\n.#{$ionicons-prefix}model-s:before { content: $ionicon-var-model-s; }\n.#{$ionicons-prefix}monitor:before { content: $ionicon-var-monitor; }\n.#{$ionicons-prefix}more:before { content: $ionicon-var-more; }\n.#{$ionicons-prefix}mouse:before { content: $ionicon-var-mouse; }\n.#{$ionicons-prefix}music-note:before { content: $ionicon-var-music-note; }\n.#{$ionicons-prefix}navicon:before { content: $ionicon-var-navicon; }\n.#{$ionicons-prefix}navicon-round:before { content: $ionicon-var-navicon-round; }\n.#{$ionicons-prefix}navigate:before { content: $ionicon-var-navigate; }\n.#{$ionicons-prefix}network:before { content: $ionicon-var-network; }\n.#{$ionicons-prefix}no-smoking:before { content: $ionicon-var-no-smoking; }\n.#{$ionicons-prefix}nuclear:before { content: $ionicon-var-nuclear; }\n.#{$ionicons-prefix}outlet:before { content: $ionicon-var-outlet; }\n.#{$ionicons-prefix}paintbrush:before { content: $ionicon-var-paintbrush; }\n.#{$ionicons-prefix}paintbucket:before { content: $ionicon-var-paintbucket; }\n.#{$ionicons-prefix}paper-airplane:before { content: $ionicon-var-paper-airplane; }\n.#{$ionicons-prefix}paperclip:before { content: $ionicon-var-paperclip; }\n.#{$ionicons-prefix}pause:before { content: $ionicon-var-pause; }\n.#{$ionicons-prefix}person:before { content: $ionicon-var-person; }\n.#{$ionicons-prefix}person-add:before { content: $ionicon-var-person-add; }\n.#{$ionicons-prefix}person-stalker:before { content: $ionicon-var-person-stalker; }\n.#{$ionicons-prefix}pie-graph:before { content: $ionicon-var-pie-graph; }\n.#{$ionicons-prefix}pin:before { content: $ionicon-var-pin; }\n.#{$ionicons-prefix}pinpoint:before { content: $ionicon-var-pinpoint; }\n.#{$ionicons-prefix}pizza:before { content: $ionicon-var-pizza; }\n.#{$ionicons-prefix}plane:before { content: $ionicon-var-plane; }\n.#{$ionicons-prefix}planet:before { content: $ionicon-var-planet; }\n.#{$ionicons-prefix}play:before { content: $ionicon-var-play; }\n.#{$ionicons-prefix}playstation:before { content: $ionicon-var-playstation; }\n.#{$ionicons-prefix}plus:before { content: $ionicon-var-plus; }\n.#{$ionicons-prefix}plus-circled:before { content: $ionicon-var-plus-circled; }\n.#{$ionicons-prefix}plus-round:before { content: $ionicon-var-plus-round; }\n.#{$ionicons-prefix}podium:before { content: $ionicon-var-podium; }\n.#{$ionicons-prefix}pound:before { content: $ionicon-var-pound; }\n.#{$ionicons-prefix}power:before { content: $ionicon-var-power; }\n.#{$ionicons-prefix}pricetag:before { content: $ionicon-var-pricetag; }\n.#{$ionicons-prefix}pricetags:before { content: $ionicon-var-pricetags; }\n.#{$ionicons-prefix}printer:before { content: $ionicon-var-printer; }\n.#{$ionicons-prefix}pull-request:before { content: $ionicon-var-pull-request; }\n.#{$ionicons-prefix}qr-scanner:before { content: $ionicon-var-qr-scanner; }\n.#{$ionicons-prefix}quote:before { content: $ionicon-var-quote; }\n.#{$ionicons-prefix}radio-waves:before { content: $ionicon-var-radio-waves; }\n.#{$ionicons-prefix}record:before { content: $ionicon-var-record; }\n.#{$ionicons-prefix}refresh:before { content: $ionicon-var-refresh; }\n.#{$ionicons-prefix}reply:before { content: $ionicon-var-reply; }\n.#{$ionicons-prefix}reply-all:before { content: $ionicon-var-reply-all; }\n.#{$ionicons-prefix}ribbon-a:before { content: $ionicon-var-ribbon-a; }\n.#{$ionicons-prefix}ribbon-b:before { content: $ionicon-var-ribbon-b; }\n.#{$ionicons-prefix}sad:before { content: $ionicon-var-sad; }\n.#{$ionicons-prefix}sad-outline:before { content: $ionicon-var-sad-outline; }\n.#{$ionicons-prefix}scissors:before { content: $ionicon-var-scissors; }\n.#{$ionicons-prefix}search:before { content: $ionicon-var-search; }\n.#{$ionicons-prefix}settings:before { content: $ionicon-var-settings; }\n.#{$ionicons-prefix}share:before { content: $ionicon-var-share; }\n.#{$ionicons-prefix}shuffle:before { content: $ionicon-var-shuffle; }\n.#{$ionicons-prefix}skip-backward:before { content: $ionicon-var-skip-backward; }\n.#{$ionicons-prefix}skip-forward:before { content: $ionicon-var-skip-forward; }\n.#{$ionicons-prefix}social-android:before { content: $ionicon-var-social-android; }\n.#{$ionicons-prefix}social-android-outline:before { content: $ionicon-var-social-android-outline; }\n.#{$ionicons-prefix}social-angular:before { content: $ionicon-var-social-angular; }\n.#{$ionicons-prefix}social-angular-outline:before { content: $ionicon-var-social-angular-outline; }\n.#{$ionicons-prefix}social-apple:before { content: $ionicon-var-social-apple; }\n.#{$ionicons-prefix}social-apple-outline:before { content: $ionicon-var-social-apple-outline; }\n.#{$ionicons-prefix}social-bitcoin:before { content: $ionicon-var-social-bitcoin; }\n.#{$ionicons-prefix}social-bitcoin-outline:before { content: $ionicon-var-social-bitcoin-outline; }\n.#{$ionicons-prefix}social-buffer:before { content: $ionicon-var-social-buffer; }\n.#{$ionicons-prefix}social-buffer-outline:before { content: $ionicon-var-social-buffer-outline; }\n.#{$ionicons-prefix}social-chrome:before { content: $ionicon-var-social-chrome; }\n.#{$ionicons-prefix}social-chrome-outline:before { content: $ionicon-var-social-chrome-outline; }\n.#{$ionicons-prefix}social-codepen:before { content: $ionicon-var-social-codepen; }\n.#{$ionicons-prefix}social-codepen-outline:before { content: $ionicon-var-social-codepen-outline; }\n.#{$ionicons-prefix}social-css3:before { content: $ionicon-var-social-css3; }\n.#{$ionicons-prefix}social-css3-outline:before { content: $ionicon-var-social-css3-outline; }\n.#{$ionicons-prefix}social-designernews:before { content: $ionicon-var-social-designernews; }\n.#{$ionicons-prefix}social-designernews-outline:before { content: $ionicon-var-social-designernews-outline; }\n.#{$ionicons-prefix}social-dribbble:before { content: $ionicon-var-social-dribbble; }\n.#{$ionicons-prefix}social-dribbble-outline:before { content: $ionicon-var-social-dribbble-outline; }\n.#{$ionicons-prefix}social-dropbox:before { content: $ionicon-var-social-dropbox; }\n.#{$ionicons-prefix}social-dropbox-outline:before { content: $ionicon-var-social-dropbox-outline; }\n.#{$ionicons-prefix}social-euro:before { content: $ionicon-var-social-euro; }\n.#{$ionicons-prefix}social-euro-outline:before { content: $ionicon-var-social-euro-outline; }\n.#{$ionicons-prefix}social-facebook:before { content: $ionicon-var-social-facebook; }\n.#{$ionicons-prefix}social-facebook-outline:before { content: $ionicon-var-social-facebook-outline; }\n.#{$ionicons-prefix}social-foursquare:before { content: $ionicon-var-social-foursquare; }\n.#{$ionicons-prefix}social-foursquare-outline:before { content: $ionicon-var-social-foursquare-outline; }\n.#{$ionicons-prefix}social-freebsd-devil:before { content: $ionicon-var-social-freebsd-devil; }\n.#{$ionicons-prefix}social-github:before { content: $ionicon-var-social-github; }\n.#{$ionicons-prefix}social-github-outline:before { content: $ionicon-var-social-github-outline; }\n.#{$ionicons-prefix}social-google:before { content: $ionicon-var-social-google; }\n.#{$ionicons-prefix}social-google-outline:before { content: $ionicon-var-social-google-outline; }\n.#{$ionicons-prefix}social-googleplus:before { content: $ionicon-var-social-googleplus; }\n.#{$ionicons-prefix}social-googleplus-outline:before { content: $ionicon-var-social-googleplus-outline; }\n.#{$ionicons-prefix}social-hackernews:before { content: $ionicon-var-social-hackernews; }\n.#{$ionicons-prefix}social-hackernews-outline:before { content: $ionicon-var-social-hackernews-outline; }\n.#{$ionicons-prefix}social-html5:before { content: $ionicon-var-social-html5; }\n.#{$ionicons-prefix}social-html5-outline:before { content: $ionicon-var-social-html5-outline; }\n.#{$ionicons-prefix}social-instagram:before { content: $ionicon-var-social-instagram; }\n.#{$ionicons-prefix}social-instagram-outline:before { content: $ionicon-var-social-instagram-outline; }\n.#{$ionicons-prefix}social-javascript:before { content: $ionicon-var-social-javascript; }\n.#{$ionicons-prefix}social-javascript-outline:before { content: $ionicon-var-social-javascript-outline; }\n.#{$ionicons-prefix}social-linkedin:before { content: $ionicon-var-social-linkedin; }\n.#{$ionicons-prefix}social-linkedin-outline:before { content: $ionicon-var-social-linkedin-outline; }\n.#{$ionicons-prefix}social-markdown:before { content: $ionicon-var-social-markdown; }\n.#{$ionicons-prefix}social-nodejs:before { content: $ionicon-var-social-nodejs; }\n.#{$ionicons-prefix}social-octocat:before { content: $ionicon-var-social-octocat; }\n.#{$ionicons-prefix}social-pinterest:before { content: $ionicon-var-social-pinterest; }\n.#{$ionicons-prefix}social-pinterest-outline:before { content: $ionicon-var-social-pinterest-outline; }\n.#{$ionicons-prefix}social-python:before { content: $ionicon-var-social-python; }\n.#{$ionicons-prefix}social-reddit:before { content: $ionicon-var-social-reddit; }\n.#{$ionicons-prefix}social-reddit-outline:before { content: $ionicon-var-social-reddit-outline; }\n.#{$ionicons-prefix}social-rss:before { content: $ionicon-var-social-rss; }\n.#{$ionicons-prefix}social-rss-outline:before { content: $ionicon-var-social-rss-outline; }\n.#{$ionicons-prefix}social-sass:before { content: $ionicon-var-social-sass; }\n.#{$ionicons-prefix}social-skype:before { content: $ionicon-var-social-skype; }\n.#{$ionicons-prefix}social-skype-outline:before { content: $ionicon-var-social-skype-outline; }\n.#{$ionicons-prefix}social-snapchat:before { content: $ionicon-var-social-snapchat; }\n.#{$ionicons-prefix}social-snapchat-outline:before { content: $ionicon-var-social-snapchat-outline; }\n.#{$ionicons-prefix}social-tumblr:before { content: $ionicon-var-social-tumblr; }\n.#{$ionicons-prefix}social-tumblr-outline:before { content: $ionicon-var-social-tumblr-outline; }\n.#{$ionicons-prefix}social-tux:before { content: $ionicon-var-social-tux; }\n.#{$ionicons-prefix}social-twitch:before { content: $ionicon-var-social-twitch; }\n.#{$ionicons-prefix}social-twitch-outline:before { content: $ionicon-var-social-twitch-outline; }\n.#{$ionicons-prefix}social-twitter:before { content: $ionicon-var-social-twitter; }\n.#{$ionicons-prefix}social-twitter-outline:before { content: $ionicon-var-social-twitter-outline; }\n.#{$ionicons-prefix}social-usd:before { content: $ionicon-var-social-usd; }\n.#{$ionicons-prefix}social-usd-outline:before { content: $ionicon-var-social-usd-outline; }\n.#{$ionicons-prefix}social-vimeo:before { content: $ionicon-var-social-vimeo; }\n.#{$ionicons-prefix}social-vimeo-outline:before { content: $ionicon-var-social-vimeo-outline; }\n.#{$ionicons-prefix}social-whatsapp:before { content: $ionicon-var-social-whatsapp; }\n.#{$ionicons-prefix}social-whatsapp-outline:before { content: $ionicon-var-social-whatsapp-outline; }\n.#{$ionicons-prefix}social-windows:before { content: $ionicon-var-social-windows; }\n.#{$ionicons-prefix}social-windows-outline:before { content: $ionicon-var-social-windows-outline; }\n.#{$ionicons-prefix}social-wordpress:before { content: $ionicon-var-social-wordpress; }\n.#{$ionicons-prefix}social-wordpress-outline:before { content: $ionicon-var-social-wordpress-outline; }\n.#{$ionicons-prefix}social-yahoo:before { content: $ionicon-var-social-yahoo; }\n.#{$ionicons-prefix}social-yahoo-outline:before { content: $ionicon-var-social-yahoo-outline; }\n.#{$ionicons-prefix}social-yen:before { content: $ionicon-var-social-yen; }\n.#{$ionicons-prefix}social-yen-outline:before { content: $ionicon-var-social-yen-outline; }\n.#{$ionicons-prefix}social-youtube:before { content: $ionicon-var-social-youtube; }\n.#{$ionicons-prefix}social-youtube-outline:before { content: $ionicon-var-social-youtube-outline; }\n.#{$ionicons-prefix}soup-can:before { content: $ionicon-var-soup-can; }\n.#{$ionicons-prefix}soup-can-outline:before { content: $ionicon-var-soup-can-outline; }\n.#{$ionicons-prefix}speakerphone:before { content: $ionicon-var-speakerphone; }\n.#{$ionicons-prefix}speedometer:before { content: $ionicon-var-speedometer; }\n.#{$ionicons-prefix}spoon:before { content: $ionicon-var-spoon; }\n.#{$ionicons-prefix}star:before { content: $ionicon-var-star; }\n.#{$ionicons-prefix}stats-bars:before { content: $ionicon-var-stats-bars; }\n.#{$ionicons-prefix}steam:before { content: $ionicon-var-steam; }\n.#{$ionicons-prefix}stop:before { content: $ionicon-var-stop; }\n.#{$ionicons-prefix}thermometer:before { content: $ionicon-var-thermometer; }\n.#{$ionicons-prefix}thumbsdown:before { content: $ionicon-var-thumbsdown; }\n.#{$ionicons-prefix}thumbsup:before { content: $ionicon-var-thumbsup; }\n.#{$ionicons-prefix}toggle:before { content: $ionicon-var-toggle; }\n.#{$ionicons-prefix}toggle-filled:before { content: $ionicon-var-toggle-filled; }\n.#{$ionicons-prefix}transgender:before { content: $ionicon-var-transgender; }\n.#{$ionicons-prefix}trash-a:before { content: $ionicon-var-trash-a; }\n.#{$ionicons-prefix}trash-b:before { content: $ionicon-var-trash-b; }\n.#{$ionicons-prefix}trophy:before { content: $ionicon-var-trophy; }\n.#{$ionicons-prefix}tshirt:before { content: $ionicon-var-tshirt; }\n.#{$ionicons-prefix}tshirt-outline:before { content: $ionicon-var-tshirt-outline; }\n.#{$ionicons-prefix}umbrella:before { content: $ionicon-var-umbrella; }\n.#{$ionicons-prefix}university:before { content: $ionicon-var-university; }\n.#{$ionicons-prefix}unlocked:before { content: $ionicon-var-unlocked; }\n.#{$ionicons-prefix}upload:before { content: $ionicon-var-upload; }\n.#{$ionicons-prefix}usb:before { content: $ionicon-var-usb; }\n.#{$ionicons-prefix}videocamera:before { content: $ionicon-var-videocamera; }\n.#{$ionicons-prefix}volume-high:before { content: $ionicon-var-volume-high; }\n.#{$ionicons-prefix}volume-low:before { content: $ionicon-var-volume-low; }\n.#{$ionicons-prefix}volume-medium:before { content: $ionicon-var-volume-medium; }\n.#{$ionicons-prefix}volume-mute:before { content: $ionicon-var-volume-mute; }\n.#{$ionicons-prefix}wand:before { content: $ionicon-var-wand; }\n.#{$ionicons-prefix}waterdrop:before { content: $ionicon-var-waterdrop; }\n.#{$ionicons-prefix}wifi:before { content: $ionicon-var-wifi; }\n.#{$ionicons-prefix}wineglass:before { content: $ionicon-var-wineglass; }\n.#{$ionicons-prefix}woman:before { content: $ionicon-var-woman; }\n.#{$ionicons-prefix}wrench:before { content: $ionicon-var-wrench; }\n.#{$ionicons-prefix}xbox:before { content: $ionicon-var-xbox; }","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n @include box-sizing(border-box);\n}\n*:before,\n*:after {\n @include box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: $font-family-base;\n font-size: $font-size-base;\n line-height: $line-height-base;\n color: $text-color;\n background-color: $body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus {\n @include tab-focus;\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n @include img-responsive;\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: $border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: $thumbnail-padding;\n line-height: $line-height-base;\n background-color: $thumbnail-bg;\n border: 1px solid $thumbnail-border;\n border-radius: $thumbnail-border-radius;\n @include transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n @include img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: $line-height-computed;\n margin-bottom: $line-height-computed;\n border: 0;\n border-top: 1px solid $hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n@mixin animation($animation) {\n -webkit-animation: $animation;\n -o-animation: $animation;\n animation: $animation;\n}\n@mixin animation-name($name) {\n -webkit-animation-name: $name;\n animation-name: $name;\n}\n@mixin animation-duration($duration) {\n -webkit-animation-duration: $duration;\n animation-duration: $duration;\n}\n@mixin animation-timing-function($timing-function) {\n -webkit-animation-timing-function: $timing-function;\n animation-timing-function: $timing-function;\n}\n@mixin animation-delay($delay) {\n -webkit-animation-delay: $delay;\n animation-delay: $delay;\n}\n@mixin animation-iteration-count($iteration-count) {\n -webkit-animation-iteration-count: $iteration-count;\n animation-iteration-count: $iteration-count;\n}\n@mixin animation-direction($direction) {\n -webkit-animation-direction: $direction;\n animation-direction: $direction;\n}\n@mixin animation-fill-mode($fill-mode) {\n -webkit-animation-fill-mode: $fill-mode;\n animation-fill-mode: $fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n@mixin backface-visibility($visibility) {\n -webkit-backface-visibility: $visibility;\n -moz-backface-visibility: $visibility;\n backface-visibility: $visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n@mixin box-shadow($shadow...) {\n -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1\n box-shadow: $shadow;\n}\n\n// Box sizing\n@mixin box-sizing($boxmodel) {\n -webkit-box-sizing: $boxmodel;\n -moz-box-sizing: $boxmodel;\n box-sizing: $boxmodel;\n}\n\n// CSS3 Content Columns\n@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {\n -webkit-column-count: $column-count;\n -moz-column-count: $column-count;\n column-count: $column-count;\n -webkit-column-gap: $column-gap;\n -moz-column-gap: $column-gap;\n column-gap: $column-gap;\n}\n\n// Optional hyphenation\n@mixin hyphens($mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: $mode;\n -moz-hyphens: $mode;\n -ms-hyphens: $mode; // IE10+\n -o-hyphens: $mode;\n hyphens: $mode;\n}\n\n// Placeholder text\n@mixin placeholder($color: $input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: $color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: $color; } // Safari and Chrome\n}\n\n// Transformations\n@mixin scale($ratio...) {\n -webkit-transform: scale($ratio);\n -ms-transform: scale($ratio); // IE9 only\n -o-transform: scale($ratio);\n transform: scale($ratio);\n}\n\n@mixin scaleX($ratio) {\n -webkit-transform: scaleX($ratio);\n -ms-transform: scaleX($ratio); // IE9 only\n -o-transform: scaleX($ratio);\n transform: scaleX($ratio);\n}\n@mixin scaleY($ratio) {\n -webkit-transform: scaleY($ratio);\n -ms-transform: scaleY($ratio); // IE9 only\n -o-transform: scaleY($ratio);\n transform: scaleY($ratio);\n}\n@mixin skew($x, $y) {\n -webkit-transform: skewX($x) skewY($y);\n -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX($x) skewY($y);\n transform: skewX($x) skewY($y);\n}\n@mixin translate($x, $y) {\n -webkit-transform: translate($x, $y);\n -ms-transform: translate($x, $y); // IE9 only\n -o-transform: translate($x, $y);\n transform: translate($x, $y);\n}\n@mixin translate3d($x, $y, $z) {\n -webkit-transform: translate3d($x, $y, $z);\n transform: translate3d($x, $y, $z);\n}\n@mixin rotate($degrees) {\n -webkit-transform: rotate($degrees);\n -ms-transform: rotate($degrees); // IE9 only\n -o-transform: rotate($degrees);\n transform: rotate($degrees);\n}\n@mixin rotateX($degrees) {\n -webkit-transform: rotateX($degrees);\n -ms-transform: rotateX($degrees); // IE9 only\n -o-transform: rotateX($degrees);\n transform: rotateX($degrees);\n}\n@mixin rotateY($degrees) {\n -webkit-transform: rotateY($degrees);\n -ms-transform: rotateY($degrees); // IE9 only\n -o-transform: rotateY($degrees);\n transform: rotateY($degrees);\n}\n@mixin perspective($perspective) {\n -webkit-perspective: $perspective;\n -moz-perspective: $perspective;\n perspective: $perspective;\n}\n@mixin perspective-origin($perspective) {\n -webkit-perspective-origin: $perspective;\n -moz-perspective-origin: $perspective;\n perspective-origin: $perspective;\n}\n@mixin transform-origin($origin) {\n -webkit-transform-origin: $origin;\n -moz-transform-origin: $origin;\n -ms-transform-origin: $origin; // IE9 only\n transform-origin: $origin;\n}\n\n\n// Transitions\n\n@mixin transition($transition...) {\n -webkit-transition: $transition;\n -o-transition: $transition;\n transition: $transition;\n}\n@mixin transition-property($transition-property...) {\n -webkit-transition-property: $transition-property;\n transition-property: $transition-property;\n}\n@mixin transition-delay($transition-delay) {\n -webkit-transition-delay: $transition-delay;\n transition-delay: $transition-delay;\n}\n@mixin transition-duration($transition-duration...) {\n -webkit-transition-duration: $transition-duration;\n transition-duration: $transition-duration;\n}\n@mixin transition-timing-function($timing-function) {\n -webkit-transition-timing-function: $timing-function;\n transition-timing-function: $timing-function;\n}\n@mixin transition-transform($transition...) {\n -webkit-transition: -webkit-transform $transition;\n -moz-transition: -moz-transform $transition;\n -o-transition: -o-transform $transition;\n transition: transform $transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n@mixin user-select($select) {\n -webkit-user-select: $select;\n -moz-user-select: $select;\n -ms-user-select: $select; // IE10+\n user-select: $select;\n}\n","$bootstrap-sass-asset-helper: false !default;\n//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n$gray-base: #000 !default;\n$gray-darker: lighten($gray-base, 13.5%) !default; // #222\n$gray-dark: lighten($gray-base, 20%) !default; // #333\n$gray: lighten($gray-base, 33.5%) !default; // #555\n$gray-light: lighten($gray-base, 46.7%) !default; // #777\n$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee\n\n$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7\n$brand-success: #5cb85c !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-danger: #d9534f !default;\n\n\n//== Scaffolding\n//\n//## Settings for some of the most global styles.\n\n//** Background color for ``.\n$body-bg: #fff !default;\n//** Global text color on ``.\n$text-color: $gray-dark !default;\n\n//** Global textual link color.\n$link-color: $brand-primary !default;\n//** Link hover color set via `darken()` function.\n$link-hover-color: darken($link-color, 15%) !default;\n//** Link hover decoration.\n$link-hover-decoration: underline !default;\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n$font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif !default;\n$font-family-serif: Georgia, \"Times New Roman\", Times, serif !default;\n//** Default monospace fonts for ``, ``, and `
`.\n$font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace !default;\n$font-family-base:        $font-family-sans-serif !default;\n\n$font-size-base:          14px !default;\n$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px\n\n$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px\n$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px\n$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px\n$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-h5:            $font-size-base !default;\n$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n$line-height-base:        1.428571429 !default; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px\n\n//** By default, this inherits from the ``.\n$headings-font-family:    inherit !default;\n$headings-font-weight:    500 !default;\n$headings-line-height:    1.1 !default;\n$headings-color:          inherit !default;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n\n// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.\n// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.\n$icon-font-path: if($bootstrap-sass-asset-helper, \"bootstrap/\", \"../fonts/bootstrap/\") !default;\n\n//** File name for all font files.\n$icon-font-name:          \"glyphicons-halflings-regular\" !default;\n//** Element ID within SVG icon file.\n$icon-font-svg-id:        \"glyphicons_halflingsregular\" !default;\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n$padding-base-vertical:     6px !default;\n$padding-base-horizontal:   12px !default;\n\n$padding-large-vertical:    10px !default;\n$padding-large-horizontal:  16px !default;\n\n$padding-small-vertical:    5px !default;\n$padding-small-horizontal:  10px !default;\n\n$padding-xs-vertical:       1px !default;\n$padding-xs-horizontal:     5px !default;\n\n$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome\n$line-height-small:         1.5 !default;\n\n$border-radius-base:        4px !default;\n$border-radius-large:       6px !default;\n$border-radius-small:       3px !default;\n\n//** Global color for active items (e.g., navs or dropdowns).\n$component-active-color:    #fff !default;\n//** Global background color for active items (e.g., navs or dropdowns).\n$component-active-bg:       $brand-primary !default;\n\n//** Width of the `border` for generating carets that indicate dropdowns.\n$caret-width-base:          4px !default;\n//** Carets increase slightly in size for larger components.\n$caret-width-large:         5px !default;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n$table-cell-padding:            8px !default;\n//** Padding for cells in `.table-condensed`.\n$table-condensed-cell-padding:  5px !default;\n\n//** Default background color used for all tables.\n$table-bg:                      transparent !default;\n//** Background color used for `.table-striped`.\n$table-bg-accent:               #f9f9f9 !default;\n//** Background color used for `.table-hover`.\n$table-bg-hover:                #f5f5f5 !default;\n$table-bg-active:               $table-bg-hover !default;\n\n//** Border color for table and cell borders.\n$table-border-color:            #ddd !default;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n$btn-font-weight:                normal !default;\n\n$btn-default-color:              #333 !default;\n$btn-default-bg:                 #fff !default;\n$btn-default-border:             #ccc !default;\n\n$btn-primary-color:              #fff !default;\n$btn-primary-bg:                 $brand-primary !default;\n$btn-primary-border:             darken($btn-primary-bg, 5%) !default;\n\n$btn-success-color:              #fff !default;\n$btn-success-bg:                 $brand-success !default;\n$btn-success-border:             darken($btn-success-bg, 5%) !default;\n\n$btn-info-color:                 #fff !default;\n$btn-info-bg:                    $brand-info !default;\n$btn-info-border:                darken($btn-info-bg, 5%) !default;\n\n$btn-warning-color:              #fff !default;\n$btn-warning-bg:                 $brand-warning !default;\n$btn-warning-border:             darken($btn-warning-bg, 5%) !default;\n\n$btn-danger-color:               #fff !default;\n$btn-danger-bg:                  $brand-danger !default;\n$btn-danger-border:              darken($btn-danger-bg, 5%) !default;\n\n$btn-link-disabled-color:        $gray-light !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius-base:         $border-radius-base !default;\n$btn-border-radius-large:        $border-radius-large !default;\n$btn-border-radius-small:        $border-radius-small !default;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n$input-bg:                       #fff !default;\n//** `` background color\n$input-bg-disabled:              $gray-lighter !default;\n\n//** Text color for ``s\n$input-color:                    $gray !default;\n//** `` border color\n$input-border:                   #ccc !default;\n\n// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4\n//** Default `.form-control` border radius\n// This has no effect on ``s in CSS.\n$input-border-radius:            $border-radius-base !default;\n//** Large `.form-control` border radius\n$input-border-radius-large:      $border-radius-large !default;\n//** Small `.form-control` border radius\n$input-border-radius-small:      $border-radius-small !default;\n\n//** Border color for inputs on focus\n$input-border-focus:             #66afe9 !default;\n\n//** Placeholder text color\n$input-color-placeholder:        #999 !default;\n\n//** Default `.form-control` height\n$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;\n//** Large `.form-control` height\n$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;\n//** Small `.form-control` height\n$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;\n\n//** `.form-group` margin\n$form-group-margin-bottom:       15px !default;\n\n$legend-color:                   $gray-dark !default;\n$legend-border-color:            #e5e5e5 !default;\n\n//** Background color for textual input addons\n$input-group-addon-bg:           $gray-lighter !default;\n//** Border color for textual input addons\n$input-group-addon-border-color: $input-border !default;\n\n//** Disabled cursor for form controls and buttons.\n$cursor-disabled:                not-allowed !default;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n$dropdown-bg:                    #fff !default;\n//** Dropdown menu `border-color`.\n$dropdown-border:                rgba(0,0,0,.15) !default;\n//** Dropdown menu `border-color` **for IE8**.\n$dropdown-fallback-border:       #ccc !default;\n//** Divider color for between dropdown items.\n$dropdown-divider-bg:            #e5e5e5 !default;\n\n//** Dropdown link text color.\n$dropdown-link-color:            $gray-dark !default;\n//** Hover color for dropdown links.\n$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;\n//** Hover background for dropdown links.\n$dropdown-link-hover-bg:         #f5f5f5 !default;\n\n//** Active dropdown menu item text color.\n$dropdown-link-active-color:     $component-active-color !default;\n//** Active dropdown menu item background color.\n$dropdown-link-active-bg:        $component-active-bg !default;\n\n//** Disabled dropdown menu item background color.\n$dropdown-link-disabled-color:   $gray-light !default;\n\n//** Text color for headers within dropdown menus.\n$dropdown-header-color:          $gray-light !default;\n\n//** Deprecated `$dropdown-caret-color` as of v3.1.0\n$dropdown-caret-color:           #000 !default;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n$zindex-navbar:            1000 !default;\n$zindex-dropdown:          1000 !default;\n$zindex-popover:           1060 !default;\n$zindex-tooltip:           1070 !default;\n$zindex-navbar-fixed:      1030 !default;\n$zindex-modal-background:  1040 !default;\n$zindex-modal:             1050 !default;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `$screen-xs` as of v3.0.1\n$screen-xs:                  480px !default;\n//** Deprecated `$screen-xs-min` as of v3.2.0\n$screen-xs-min:              $screen-xs !default;\n//** Deprecated `$screen-phone` as of v3.0.1\n$screen-phone:               $screen-xs-min !default;\n\n// Small screen / tablet\n//** Deprecated `$screen-sm` as of v3.0.1\n$screen-sm:                  768px !default;\n$screen-sm-min:              $screen-sm !default;\n//** Deprecated `$screen-tablet` as of v3.0.1\n$screen-tablet:              $screen-sm-min !default;\n\n// Medium screen / desktop\n//** Deprecated `$screen-md` as of v3.0.1\n$screen-md:                  992px !default;\n$screen-md-min:              $screen-md !default;\n//** Deprecated `$screen-desktop` as of v3.0.1\n$screen-desktop:             $screen-md-min !default;\n\n// Large screen / wide desktop\n//** Deprecated `$screen-lg` as of v3.0.1\n$screen-lg:                  1200px !default;\n$screen-lg-min:              $screen-lg !default;\n//** Deprecated `$screen-lg-desktop` as of v3.0.1\n$screen-lg-desktop:          $screen-lg-min !default;\n\n// So media queries don't overlap when required, provide a maximum\n$screen-xs-max:              ($screen-sm-min - 1) !default;\n$screen-sm-max:              ($screen-md-min - 1) !default;\n$screen-md-max:              ($screen-lg-min - 1) !default;\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n$grid-columns:              12 !default;\n//** Padding between columns. Gets divided in half for the left and right.\n$grid-gutter-width:         30px !default;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n$grid-float-breakpoint:     $screen-sm-min !default;\n//** Point at which the navbar begins collapsing.\n$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n$container-tablet:             (720px + $grid-gutter-width) !default;\n//** For `$screen-sm-min` and up.\n$container-sm:                 $container-tablet !default;\n\n// Medium screen / desktop\n$container-desktop:            (940px + $grid-gutter-width) !default;\n//** For `$screen-md-min` and up.\n$container-md:                 $container-desktop !default;\n\n// Large screen / wide desktop\n$container-large-desktop:      (1140px + $grid-gutter-width) !default;\n//** For `$screen-lg-min` and up.\n$container-lg:                 $container-large-desktop !default;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n$navbar-height:                    50px !default;\n$navbar-margin-bottom:             $line-height-computed !default;\n$navbar-border-radius:             $border-radius-base !default;\n$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;\n$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;\n$navbar-collapse-max-height:       340px !default;\n\n$navbar-default-color:             #777 !default;\n$navbar-default-bg:                #f8f8f8 !default;\n$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;\n\n// Navbar links\n$navbar-default-link-color:                #777 !default;\n$navbar-default-link-hover-color:          #333 !default;\n$navbar-default-link-hover-bg:             transparent !default;\n$navbar-default-link-active-color:         #555 !default;\n$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;\n$navbar-default-link-disabled-color:       #ccc !default;\n$navbar-default-link-disabled-bg:          transparent !default;\n\n// Navbar brand label\n$navbar-default-brand-color:               $navbar-default-link-color !default;\n$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;\n$navbar-default-brand-hover-bg:            transparent !default;\n\n// Navbar toggle\n$navbar-default-toggle-hover-bg:           #ddd !default;\n$navbar-default-toggle-icon-bar-bg:        #888 !default;\n$navbar-default-toggle-border-color:       #ddd !default;\n\n\n//=== Inverted navbar\n// Reset inverted navbar basics\n$navbar-inverse-color:                      lighten($gray-light, 15%) !default;\n$navbar-inverse-bg:                         #222 !default;\n$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;\n\n// Inverted navbar links\n$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;\n$navbar-inverse-link-hover-color:           #fff !default;\n$navbar-inverse-link-hover-bg:              transparent !default;\n$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;\n$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;\n$navbar-inverse-link-disabled-color:        #444 !default;\n$navbar-inverse-link-disabled-bg:           transparent !default;\n\n// Inverted navbar brand label\n$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;\n$navbar-inverse-brand-hover-color:          #fff !default;\n$navbar-inverse-brand-hover-bg:             transparent !default;\n\n// Inverted navbar toggle\n$navbar-inverse-toggle-hover-bg:            #333 !default;\n$navbar-inverse-toggle-icon-bar-bg:         #fff !default;\n$navbar-inverse-toggle-border-color:        #333 !default;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n$nav-link-padding:                          10px 15px !default;\n$nav-link-hover-bg:                         $gray-lighter !default;\n\n$nav-disabled-link-color:                   $gray-light !default;\n$nav-disabled-link-hover-color:             $gray-light !default;\n\n//== Tabs\n$nav-tabs-border-color:                     #ddd !default;\n\n$nav-tabs-link-hover-border-color:          $gray-lighter !default;\n\n$nav-tabs-active-link-hover-bg:             $body-bg !default;\n$nav-tabs-active-link-hover-color:          $gray !default;\n$nav-tabs-active-link-hover-border-color:   #ddd !default;\n\n$nav-tabs-justified-link-border-color:            #ddd !default;\n$nav-tabs-justified-active-link-border-color:     $body-bg !default;\n\n//== Pills\n$nav-pills-border-radius:                   $border-radius-base !default;\n$nav-pills-active-link-hover-bg:            $component-active-bg !default;\n$nav-pills-active-link-hover-color:         $component-active-color !default;\n\n\n//== Pagination\n//\n//##\n\n$pagination-color:                     $link-color !default;\n$pagination-bg:                        #fff !default;\n$pagination-border:                    #ddd !default;\n\n$pagination-hover-color:               $link-hover-color !default;\n$pagination-hover-bg:                  $gray-lighter !default;\n$pagination-hover-border:              #ddd !default;\n\n$pagination-active-color:              #fff !default;\n$pagination-active-bg:                 $brand-primary !default;\n$pagination-active-border:             $brand-primary !default;\n\n$pagination-disabled-color:            $gray-light !default;\n$pagination-disabled-bg:               #fff !default;\n$pagination-disabled-border:           #ddd !default;\n\n\n//== Pager\n//\n//##\n\n$pager-bg:                             $pagination-bg !default;\n$pager-border:                         $pagination-border !default;\n$pager-border-radius:                  15px !default;\n\n$pager-hover-bg:                       $pagination-hover-bg !default;\n\n$pager-active-bg:                      $pagination-active-bg !default;\n$pager-active-color:                   $pagination-active-color !default;\n\n$pager-disabled-color:                 $pagination-disabled-color !default;\n\n\n//== Jumbotron\n//\n//##\n\n$jumbotron-padding:              30px !default;\n$jumbotron-color:                inherit !default;\n$jumbotron-bg:                   $gray-lighter !default;\n$jumbotron-heading-color:        inherit !default;\n$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;\n$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n$state-success-text:             #3c763d !default;\n$state-success-bg:               #dff0d8 !default;\n$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;\n\n$state-info-text:                #31708f !default;\n$state-info-bg:                  #d9edf7 !default;\n$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;\n\n$state-warning-text:             #8a6d3b !default;\n$state-warning-bg:               #fcf8e3 !default;\n$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;\n\n$state-danger-text:              #a94442 !default;\n$state-danger-bg:                #f2dede !default;\n$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n$tooltip-max-width:           200px !default;\n//** Tooltip text color\n$tooltip-color:               #fff !default;\n//** Tooltip background color\n$tooltip-bg:                  #000 !default;\n$tooltip-opacity:             .9 !default;\n\n//** Tooltip arrow width\n$tooltip-arrow-width:         5px !default;\n//** Tooltip arrow color\n$tooltip-arrow-color:         $tooltip-bg !default;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n$popover-bg:                          #fff !default;\n//** Popover maximum width\n$popover-max-width:                   276px !default;\n//** Popover border color\n$popover-border-color:                rgba(0,0,0,.2) !default;\n//** Popover fallback border color\n$popover-fallback-border-color:       #ccc !default;\n\n//** Popover title background color\n$popover-title-bg:                    darken($popover-bg, 3%) !default;\n\n//** Popover arrow width\n$popover-arrow-width:                 10px !default;\n//** Popover arrow color\n$popover-arrow-color:                 $popover-bg !default;\n\n//** Popover outer arrow width\n$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;\n//** Popover outer arrow color\n$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;\n//** Popover outer arrow fallback color\n$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n$label-default-bg:            $gray-light !default;\n//** Primary label background color\n$label-primary-bg:            $brand-primary !default;\n//** Success label background color\n$label-success-bg:            $brand-success !default;\n//** Info label background color\n$label-info-bg:               $brand-info !default;\n//** Warning label background color\n$label-warning-bg:            $brand-warning !default;\n//** Danger label background color\n$label-danger-bg:             $brand-danger !default;\n\n//** Default label text color\n$label-color:                 #fff !default;\n//** Default text color of a linked label\n$label-link-hover-color:      #fff !default;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n$modal-inner-padding:         15px !default;\n\n//** Padding applied to the modal title\n$modal-title-padding:         15px !default;\n//** Modal title line-height\n$modal-title-line-height:     $line-height-base !default;\n\n//** Background color of modal content area\n$modal-content-bg:                             #fff !default;\n//** Modal content border color\n$modal-content-border-color:                   rgba(0,0,0,.2) !default;\n//** Modal content border color **for IE8**\n$modal-content-fallback-border-color:          #999 !default;\n\n//** Modal backdrop background color\n$modal-backdrop-bg:           #000 !default;\n//** Modal backdrop opacity\n$modal-backdrop-opacity:      .5 !default;\n//** Modal header border color\n$modal-header-border-color:   #e5e5e5 !default;\n//** Modal footer border color\n$modal-footer-border-color:   $modal-header-border-color !default;\n\n$modal-lg:                    900px !default;\n$modal-md:                    600px !default;\n$modal-sm:                    300px !default;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n$alert-padding:               15px !default;\n$alert-border-radius:         $border-radius-base !default;\n$alert-link-font-weight:      bold !default;\n\n$alert-success-bg:            $state-success-bg !default;\n$alert-success-text:          $state-success-text !default;\n$alert-success-border:        $state-success-border !default;\n\n$alert-info-bg:               $state-info-bg !default;\n$alert-info-text:             $state-info-text !default;\n$alert-info-border:           $state-info-border !default;\n\n$alert-warning-bg:            $state-warning-bg !default;\n$alert-warning-text:          $state-warning-text !default;\n$alert-warning-border:        $state-warning-border !default;\n\n$alert-danger-bg:             $state-danger-bg !default;\n$alert-danger-text:           $state-danger-text !default;\n$alert-danger-border:         $state-danger-border !default;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n$progress-bg:                 #f5f5f5 !default;\n//** Progress bar text color\n$progress-bar-color:          #fff !default;\n//** Variable for setting rounded corners on progress bar.\n$progress-border-radius:      $border-radius-base !default;\n\n//** Default progress bar color\n$progress-bar-bg:             $brand-primary !default;\n//** Success progress bar color\n$progress-bar-success-bg:     $brand-success !default;\n//** Warning progress bar color\n$progress-bar-warning-bg:     $brand-warning !default;\n//** Danger progress bar color\n$progress-bar-danger-bg:      $brand-danger !default;\n//** Info progress bar color\n$progress-bar-info-bg:        $brand-info !default;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n$list-group-bg:                 #fff !default;\n//** `.list-group-item` border color\n$list-group-border:             #ddd !default;\n//** List group border radius\n$list-group-border-radius:      $border-radius-base !default;\n\n//** Background color of single list items on hover\n$list-group-hover-bg:           #f5f5f5 !default;\n//** Text color of active list items\n$list-group-active-color:       $component-active-color !default;\n//** Background color of active list items\n$list-group-active-bg:          $component-active-bg !default;\n//** Border color of active list elements\n$list-group-active-border:      $list-group-active-bg !default;\n//** Text color for content within active list items\n$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;\n\n//** Text color of disabled list items\n$list-group-disabled-color:      $gray-light !default;\n//** Background color of disabled list items\n$list-group-disabled-bg:         $gray-lighter !default;\n//** Text color for content within disabled list items\n$list-group-disabled-text-color: $list-group-disabled-color !default;\n\n$list-group-link-color:         #555 !default;\n$list-group-link-hover-color:   $list-group-link-color !default;\n$list-group-link-heading-color: #333 !default;\n\n\n//== Panels\n//\n//##\n\n$panel-bg:                    #fff !default;\n$panel-body-padding:          15px !default;\n$panel-heading-padding:       10px 15px !default;\n$panel-footer-padding:        $panel-heading-padding !default;\n$panel-border-radius:         $border-radius-base !default;\n\n//** Border color for elements within panels\n$panel-inner-border:          #ddd !default;\n$panel-footer-bg:             #f5f5f5 !default;\n\n$panel-default-text:          $gray-dark !default;\n$panel-default-border:        #ddd !default;\n$panel-default-heading-bg:    #f5f5f5 !default;\n\n$panel-primary-text:          #fff !default;\n$panel-primary-border:        $brand-primary !default;\n$panel-primary-heading-bg:    $brand-primary !default;\n\n$panel-success-text:          $state-success-text !default;\n$panel-success-border:        $state-success-border !default;\n$panel-success-heading-bg:    $state-success-bg !default;\n\n$panel-info-text:             $state-info-text !default;\n$panel-info-border:           $state-info-border !default;\n$panel-info-heading-bg:       $state-info-bg !default;\n\n$panel-warning-text:          $state-warning-text !default;\n$panel-warning-border:        $state-warning-border !default;\n$panel-warning-heading-bg:    $state-warning-bg !default;\n\n$panel-danger-text:           $state-danger-text !default;\n$panel-danger-border:         $state-danger-border !default;\n$panel-danger-heading-bg:     $state-danger-bg !default;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n$thumbnail-padding:           4px !default;\n//** Thumbnail background color\n$thumbnail-bg:                $body-bg !default;\n//** Thumbnail border color\n$thumbnail-border:            #ddd !default;\n//** Thumbnail border radius\n$thumbnail-border-radius:     $border-radius-base !default;\n\n//** Custom text color for thumbnail captions\n$thumbnail-caption-color:     $text-color !default;\n//** Padding around the thumbnail caption\n$thumbnail-caption-padding:   9px !default;\n\n\n//== Wells\n//\n//##\n\n$well-bg:                     #f5f5f5 !default;\n$well-border:                 darken($well-bg, 7%) !default;\n\n\n//== Badges\n//\n//##\n\n$badge-color:                 #fff !default;\n//** Linked badge text color on hover\n$badge-link-hover-color:      #fff !default;\n$badge-bg:                    $gray-light !default;\n\n//** Badge text color in active nav link\n$badge-active-color:          $link-color !default;\n//** Badge background color in active nav link\n$badge-active-bg:             #fff !default;\n\n$badge-font-weight:           bold !default;\n$badge-line-height:           1 !default;\n$badge-border-radius:         10px !default;\n\n\n//== Breadcrumbs\n//\n//##\n\n$breadcrumb-padding-vertical:   8px !default;\n$breadcrumb-padding-horizontal: 15px !default;\n//** Breadcrumb background color\n$breadcrumb-bg:                 #f5f5f5 !default;\n//** Breadcrumb text color\n$breadcrumb-color:              #ccc !default;\n//** Text color of current page in the breadcrumb\n$breadcrumb-active-color:       $gray-light !default;\n//** Textual separator for between breadcrumb elements\n$breadcrumb-separator:          \"/\" !default;\n\n\n//== Carousel\n//\n//##\n\n$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;\n\n$carousel-control-color:                      #fff !default;\n$carousel-control-width:                      15% !default;\n$carousel-control-opacity:                    .5 !default;\n$carousel-control-font-size:                  20px !default;\n\n$carousel-indicator-active-bg:                #fff !default;\n$carousel-indicator-border-color:             #fff !default;\n\n$carousel-caption-color:                      #fff !default;\n\n\n//== Close\n//\n//##\n\n$close-font-weight:           bold !default;\n$close-color:                 #000 !default;\n$close-text-shadow:           0 1px 0 #fff !default;\n\n\n//== Code\n//\n//##\n\n$code-color:                  #c7254e !default;\n$code-bg:                     #f9f2f4 !default;\n\n$kbd-color:                   #fff !default;\n$kbd-bg:                      #333 !default;\n\n$pre-bg:                      #f5f5f5 !default;\n$pre-color:                   $gray-dark !default;\n$pre-border-color:            #ccc !default;\n$pre-scrollable-max-height:   340px !default;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n$component-offset-horizontal: 180px !default;\n//** Text muted color\n$text-muted:                  $gray-light !default;\n//** Abbreviations and acronyms border color\n$abbr-border-color:           $gray-light !default;\n//** Headings small color\n$headings-small-color:        $gray-light !default;\n//** Blockquote small color\n$blockquote-small-color:      $gray-light !default;\n//** Blockquote font size\n$blockquote-font-size:        ($font-size-base * 1.25) !default;\n//** Blockquote border color\n$blockquote-border-color:     $gray-lighter !default;\n//** Page header border color\n$page-header-border-color:    $gray-lighter !default;\n//** Width of horizontal description list titles\n$dl-horizontal-offset:        $component-offset-horizontal !default;\n//** Point at which .dl-horizontal becomes horizontal\n$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;\n//** Horizontal line color.\n$hr-border:                   $gray-lighter !default;\n","// Brand colours.\n$brand-primary:             darken(#78909c, 6.5%) !default;\n$brand-success:             $cachet-primary !default;\n$brand-info:                $cachet-blue !default;\n$brand-warning:             $cachet-orange !default;\n$brand-danger:              $cachet-red !default;\n\n// Default border radius\n$border-radius-base:        3px !default;\n$border-radius-large:       4px !default;\n$border-radius-small:       2px !default;\n\n//** Tooltip background color\n$tooltip-bg:                #333 !default;\n$tooltip-opacity:           .9 !default;\n$base-background-color:     #f1f1f1;\n\n$base-font-family:          -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n$base-font-weight:          400;\n$base-letter-spacing:       0.08em;\n$base-font-size:            15px;\n$base-line-height:          1.42857143;\n\n$base-link-color:           #ffffff;\n$base-link-hover-color:     #e9e9e9;\n\n$header-background-color:   lighten(#00695C, 10%);\n$header-border-color:       1px solid darken($header-background-color, 10%);\n\n$sidebar-transition-speed:  .2s;\n$sidebar-background-color:  #78909c;\n$sidebar-border-color:      1px solid #6c818c;\n$sidebar-border-shadow:     inset 0px -2px 3px rgba(0,0,0,0.25);\n$sidebar-text-size:         0.9em;\n$sidebar-text-color:        #ffffff;\n$sidebar-text-active-color: #ffffff;\n$sidebar-normal-width:      230px;\n$sidebar-phone-width:       75%;\n$sidebar-active-color:      #00695C;\n","// WebKit-style focus\n\n@mixin tab-focus() {\n  // WebKit-specific. Other browsers will keep their default outline style.\n  // (Initially tried to also force default via `outline: initial`,\n  // but that seems to erroneously remove the outline in Firefox altogether.)\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n@mixin img-responsive($display: block) {\n  display: $display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n  background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-1x}\"), \"#{$file-1x}\"));\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-2x}\"), \"#{$file-2x}\"));\n    background-size: $width-1x $height-1x;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: $headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: $headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: $line-height-computed;\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: ($line-height-computed / 2);\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: $font-size-h1; }\nh2, .h2 { font-size: $font-size-h2; }\nh3, .h3 { font-size: $font-size-h3; }\nh4, .h4 { font-size: $font-size-h4; }\nh5, .h5 { font-size: $font-size-h5; }\nh6, .h6 { font-size: $font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 ($line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: $line-height-computed;\n  font-size: floor(($font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: ($font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * $font-size-small / $font-size-base));\n}\n\nmark,\n.mark {\n  background-color: $state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: $text-muted;\n}\n\n@include text-emphasis-variant('.text-primary', $brand-primary);\n\n@include text-emphasis-variant('.text-success', $state-success-text);\n\n@include text-emphasis-variant('.text-info', $state-info-text);\n\n@include text-emphasis-variant('.text-warning', $state-warning-text);\n\n@include text-emphasis-variant('.text-danger', $state-danger-text);\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n}\n@include bg-variant('.bg-primary', $brand-primary);\n\n@include bg-variant('.bg-success', $state-success-bg);\n\n@include bg-variant('.bg-info', $state-info-bg);\n\n@include bg-variant('.bg-warning', $state-warning-bg);\n\n@include bg-variant('.bg-danger', $state-danger-bg);\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: (($line-height-computed / 2) - 1);\n  margin: ($line-height-computed * 2) 0 $line-height-computed;\n  border-bottom: 1px solid $page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: ($line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// [converter] extracted from `.list-unstyled` for libsass compatibility\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n// [converter] extracted as `@mixin list-unstyled` for libsass compatibility\n.list-unstyled {\n  @include list-unstyled;\n}\n\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled;\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: $line-height-computed;\n}\ndt,\ndd {\n  line-height: $line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    @include clearfix; // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: $dl-horizontal-breakpoint) {\n    dt {\n      float: left;\n      width: ($dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      @include text-overflow;\n    }\n    dd {\n      margin-left: $dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted $abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  @extend .text-uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: ($line-height-computed / 2) $line-height-computed;\n  margin: 0 0 $line-height-computed;\n  font-size: $blockquote-font-size;\n  border-left: 5px solid $blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: $line-height-base;\n    color: $blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid $blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Addresses\naddress {\n  margin-bottom: $line-height-computed;\n  font-style: normal;\n  line-height: $line-height-base;\n}\n","// Typography\n\n// [converter] $parent hack\n@mixin text-emphasis-variant($parent, $color) {\n  #{$parent} {\n    color: $color;\n  }\n  a#{$parent}:hover,\n  a#{$parent}:focus {\n    color: darken($color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n// [converter] $parent hack\n@mixin bg-variant($parent, $color) {\n  #{$parent} {\n    background-color: $color;\n  }\n  a#{$parent}:hover,\n  a#{$parent}:focus {\n    background-color: darken($color, 10%);\n  }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n@mixin text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $code-color;\n  background-color: $code-bg;\n  border-radius: $border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  border-radius: $border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: bold;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: (($line-height-computed - 1) / 2);\n  margin: 0 0 ($line-height-computed / 2);\n  font-size: ($font-size-base - 1); // 14px to 13px\n  line-height: $line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: $pre-color;\n  background-color: $pre-bg;\n  border: 1px solid $pre-border-color;\n  border-radius: $border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: $pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  @include container-fixed;\n\n  @media (min-width: $screen-sm-min) {\n    width: $container-sm;\n  }\n  @media (min-width: $screen-md-min) {\n    width: $container-md;\n  }\n  @media (min-width: $screen-lg-min) {\n    width: $container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  @include container-fixed;\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  @include make-row;\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@include make-grid-columns;\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n@include make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: $screen-sm-min) {\n  @include make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: $screen-md-min) {\n  @include make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: $screen-lg-min) {\n  @include make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n@mixin container-fixed($gutter: $grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  floor(($gutter / 2));\n  padding-right: ceil(($gutter / 2));\n  @include clearfix;\n}\n\n// Creates a wrapper for a series of columns\n@mixin make-row($gutter: $grid-gutter-width) {\n  margin-left:  ceil(($gutter / -2));\n  margin-right: floor(($gutter / -2));\n  @include clearfix;\n}\n\n// Generate the extra small columns\n@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage(($columns / $grid-columns));\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n}\n@mixin make-xs-column-offset($columns) {\n  margin-left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-push($columns) {\n  left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-pull($columns) {\n  right: percentage(($columns / $grid-columns));\n}\n\n// Generate the small columns\n@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-sm-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-offset($columns) {\n  @media (min-width: $screen-sm-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-push($columns) {\n  @media (min-width: $screen-sm-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-pull($columns) {\n  @media (min-width: $screen-sm-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the medium columns\n@mixin make-md-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-md-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-offset($columns) {\n  @media (min-width: $screen-md-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-push($columns) {\n  @media (min-width: $screen-md-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-pull($columns) {\n  @media (min-width: $screen-md-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large columns\n@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-lg-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-offset($columns) {\n  @media (min-width: $screen-lg-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-push($columns) {\n  @media (min-width: $screen-lg-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-pull($columns) {\n  @media (min-width: $screen-lg-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin make-grid-columns($i: 1, $list: \".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \"#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\";\n  }\n  #{$list} {\n    position: relative;\n    // Prevent columns from collapsing when empty\n    min-height: 1px;\n    // Inner gutter via padding\n    padding-left:  ceil(($grid-gutter-width / 2));\n    padding-right: floor(($grid-gutter-width / 2));\n  }\n}\n\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin float-grid-columns($class, $i: 1, $list: \".col-#{$class}-#{$i}\") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \"#{$list}, .col-#{$class}-#{$i}\";\n  }\n  #{$list} {\n    float: left;\n  }\n}\n\n\n@mixin calc-grid-column($index, $class, $type) {\n  @if ($type == width) and ($index > 0) {\n    .col-#{$class}-#{$index} {\n      width: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index > 0) {\n    .col-#{$class}-push-#{$index} {\n      left: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index == 0) {\n    .col-#{$class}-push-0 {\n      left: auto;\n    }\n  }\n  @if ($type == pull) and ($index > 0) {\n    .col-#{$class}-pull-#{$index} {\n      right: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == pull) and ($index == 0) {\n    .col-#{$class}-pull-0 {\n      right: auto;\n    }\n  }\n  @if ($type == offset) {\n    .col-#{$class}-offset-#{$index} {\n      margin-left: percentage(($index / $grid-columns));\n    }\n  }\n}\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin loop-grid-columns($columns, $class, $type) {\n  @for $i from 0 through $columns {\n    @include calc-grid-column($i, $class, $type);\n  }\n}\n\n\n// Create grid for specific class\n@mixin make-grid($class) {\n  @include float-grid-columns($class);\n  @include loop-grid-columns($grid-columns, $class, width);\n  @include loop-grid-columns($grid-columns, $class, pull);\n  @include loop-grid-columns($grid-columns, $class, push);\n  @include loop-grid-columns($grid-columns, $class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: $table-bg;\n}\ncaption {\n  padding-top: $table-cell-padding;\n  padding-bottom: $table-cell-padding;\n  color: $text-muted;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: $line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-cell-padding;\n        line-height: $line-height-base;\n        vertical-align: top;\n        border-top: 1px solid $table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid $table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid $table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: $body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid $table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid $table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-of-type(odd) {\n    background-color: $table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    background-color: $table-bg-hover;\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n@include table-row-variant('active', $table-bg-active);\n@include table-row-variant('success', $state-success-bg);\n@include table-row-variant('info', $state-info-bg);\n@include table-row-variant('warning', $state-warning-bg);\n@include table-row-variant('danger', $state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n  @media screen and (max-width: $screen-xs-max) {\n    width: 100%;\n    margin-bottom: ($line-height-computed * 0.75);\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid $table-border-color;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.#{$state},\n    > th.#{$state},\n    &.#{$state} > td,\n    &.#{$state} > th {\n      background-color: $background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.#{$state}:hover,\n    > th.#{$state}:hover,\n    &.#{$state}:hover > td,\n    &:hover > .#{$state},\n    &.#{$state}:hover > th {\n      background-color: darken($background, 5%);\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: $line-height-computed;\n  font-size: ($font-size-base * 1.5);\n  line-height: inherit;\n  color: $legend-color;\n  border: 0;\n  border-bottom: 1px solid $legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  @include box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  @include tab-focus;\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: ($padding-base-vertical + 1);\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n  background-color: $input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid $input-border;\n  border-radius: $input-border-radius; // Note: This has no effect on s in CSS.\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  @include form-control-focus;\n\n  // Placeholder\n  @include placeholder;\n\n  // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n// [converter] $parent hack\n@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  #{$parent} {\n    height: $input-height;\n    padding: $padding-vertical $padding-horizontal;\n    font-size: $font-size;\n    line-height: $line-height;\n    border-radius: $border-radius;\n  }\n\n  select#{$parent} {\n    height: $input-height;\n    line-height: $input-height;\n  }\n\n  textarea#{$parent},\n  select[multiple]#{$parent} {\n    height: auto;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: $btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);\n  @include user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      @include tab-focus;\n    }\n  }\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: $btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n    @include opacity(.65);\n    @include box-shadow(none);\n  }\n\n  // [converter] extracted a& to a.btn\n}\n\na.btn {\n  &.disabled,\n  fieldset[disabled] & {\n    pointer-events: none; // Future-proof disabling of clicks on `` elements\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);\n}\n.btn-primary {\n  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: $link-color;\n  font-weight: normal;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    @include box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: $btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n.btn-xs {\n  @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($color, $background, $border) {\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n\n  &:focus,\n  &.focus {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 25%);\n  }\n  &:hover {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: $color;\n      background-color: darken($background, 17%);\n          border-color: darken($border, 25%);\n    }\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus,\n    &.focus {\n      background-color: $background;\n          border-color: $border;\n    }\n  }\n\n  .badge {\n    color: $background;\n    background-color: $color;\n  }\n}\n\n// Button sizes\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius;\n}\n","// Opacity\n\n@mixin opacity($opacity) {\n  opacity: $opacity;\n  // IE8 filter\n  $opacity-ie: ($opacity * 100);\n  filter: alpha(opacity=$opacity-ie);\n}\n","// Theme colours.\n$cachet-base-light: #fff;\n$cachet-base-medium: #f0f3f4;\n$cachet-base-dark: #333;\n\n$cachet-primary: #7ED321;\n$cachet-secondary: #6DB81C;\n\n$cachet-link: #7ed321;\n$cachet-link-hover: #01579b;\n\n$cachet-gray-light: #e8e8e8;\n$cachet-gray: #999;\n$cachet-gray-darker: #666;\n\n$cachet-icons: #5e5e5e;\n\n// Statuses\n$cachet-green: $cachet-primary;\n$cachet-dark-green: darken($cachet-green, 10%);\n\n$cachet-blue: #3498db;\n$cachet-dark-blue: darken($cachet-blue, 10%);\n\n$cachet-red: #ff6f6f;\n$cachet-dark-red: darken($cachet-red, 10%);\n\n$cachet-teal: #0dccc0;\n$cachet-dark-teal: darken($cachet-teal, 10%);\n\n$cachet-yellow: #F7CA18;\n$cachet-dark-yellow: darken($cachet-yellow, 10%);\n\n$cachet-pink: #b23f73;\n$cachet-dark-pink: darken($cachet-pink, 10%);\n\n$cachet-grey: #ecf0f1;\n$cachet-dark-grey: darken($cachet-grey, 10%);\n\n$cachet-orange: #FF8800;\n$dark-orange: darken($cachet-orange, 10%);\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  @include transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  // [converter] extracted tr&.in to tr.collapse.in\n  // [converter] extracted tbody&.in to tbody.collapse.in\n}\n\ntr.collapse.in    { display: table-row; }\n\ntbody.collapse.in { display: table-row-group; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  @include transition-property(height, visibility);\n  @include transition-duration(.35s);\n  @include transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   $caret-width-base dashed;\n  border-top:   $caret-width-base solid \\9; // IE8\n  border-right: $caret-width-base solid transparent;\n  border-left:  $caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: $zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: $font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: $dropdown-bg;\n  border: 1px solid $dropdown-fallback-border; // IE8 fallback\n  border: 1px solid $dropdown-border;\n  border-radius: $border-radius-base;\n  @include box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    @include nav-divider($dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: $line-height-base;\n    color: $dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: $dropdown-link-hover-color;\n    background-color: $dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: $dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-disabled-color;\n  }\n\n  // Nuke hover/focus effects\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    @include reset-filter;\n    cursor: $cursor-disabled;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: $font-size-small;\n  line-height: $line-height-base;\n  color: $dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: ($zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: $caret-width-base dashed;\n    border-bottom: $caret-width-base solid \\9; // IE8\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      right: 0; left: auto;\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      left: 0; right: auto;\n    }\n  }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5e5) {\n  height: 1px;\n  margin: (($line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: $color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n@mixin reset-filter() {\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  @include clearfix;\n\n  .btn,\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    @include border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { @extend .btn-xs; }\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: $caret-width-large $caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 $caret-width-large $caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    @include clearfix;\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    @include border-top-radius($btn-border-radius-base);\n    @include border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    @include border-top-radius(0);\n    @include border-bottom-radius($btn-border-radius-base);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\"radio\"],\n    input[type=\"checkbox\"] {\n      position: absolute;\n      clip: rect(0,0,0,0);\n      pointer-events: none;\n    }\n  }\n}\n","// Single side border-radius\n\n@mixin border-top-radius($radius) {\n  border-top-right-radius: $radius;\n   border-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius) {\n  border-bottom-right-radius: $radius;\n     border-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius) {\n  border-bottom-right-radius: $radius;\n   border-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius) {\n  border-bottom-left-radius: $radius;\n     border-top-left-radius: $radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n\n    &:focus {\n      z-index: 3;\n    }\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  @extend .input-lg;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  @extend .input-sm;\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: $input-color;\n  text-align: center;\n  background-color: $input-group-addon-bg;\n  border: 1px solid $input-group-addon-border-color;\n  border-radius: $input-border-radius;\n\n  // Sizing\n  &.input-sm {\n    padding: $padding-small-vertical $padding-small-horizontal;\n    font-size: $font-size-small;\n    border-radius: $input-border-radius-small;\n  }\n  &.input-lg {\n    padding: $padding-large-vertical $padding-large-horizontal;\n    font-size: $font-size-large;\n    border-radius: $input-border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  @include border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  @include border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      z-index: 2;\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  @include clearfix;\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: $nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: $nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: $nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: $nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: $cursor-disabled;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: $nav-link-hover-bg;\n      border-color: $link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    @include nav-divider;\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid $nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: $line-height-base;\n      border: 1px solid transparent;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n      &:hover {\n        border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-tabs-active-link-hover-color;\n        background-color: $nav-tabs-active-link-hover-bg;\n        border: 1px solid $nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    @extend .nav-justified;\n    @extend .nav-tabs-justified;\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: $nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-pills-active-link-hover-color;\n        background-color: $nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: $border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid $nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid $nav-tabs-justified-link-border-color;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: $nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  @include border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: $navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: $navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: $navbar-padding-horizontal;\n  padding-left:  $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  @include clearfix;\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: $navbar-collapse-max-height;\n\n    @media (max-device-width: $screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -$navbar-padding-horizontal;\n    margin-left:  -$navbar-padding-horizontal;\n\n    @media (min-width: $grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: $zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: $zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: $navbar-padding-vertical $navbar-padding-horizontal;\n  font-size: $font-size-large;\n  line-height: $line-height-computed;\n  height: $navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  > img {\n    display: block;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -$navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: $navbar-padding-horizontal;\n  padding: 9px 10px;\n  @include navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: $border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: $line-height-computed;\n  }\n\n  @media (max-width: $grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: $line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    $navbar-padding-vertical;\n        padding-bottom: $navbar-padding-vertical;\n      }\n    }\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -$navbar-padding-horizontal;\n  margin-right: -$navbar-padding-horizontal;\n  padding: 10px $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  @include box-shadow($shadow);\n\n  // Mixin behavior for optimum display\n  @include form-inline;\n\n  .form-group {\n    @media (max-width: $grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  @include navbar-vertical-align($input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    @include box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  @include border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  @include border-top-radius($navbar-border-radius);\n  @include border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  @include navbar-vertical-align($input-height-base);\n\n  &.btn-sm {\n    @include navbar-vertical-align($input-height-small);\n  }\n  &.btn-xs {\n    @include navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  @include navbar-vertical-align($line-height-computed);\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin-left: $navbar-padding-horizontal;\n    margin-right: $navbar-padding-horizontal;\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  margin-right: -$navbar-padding-horizontal;\n\n    ~ .navbar-right {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;\n\n  .navbar-brand {\n    color: $navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-brand-hover-color;\n      background-color: $navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-hover-color;\n        background-color: $navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-active-color;\n        background-color: $navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n        background-color: $navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: $navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: $navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-default-link-active-bg;\n        color: $navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: $navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-hover-color;\n            background-color: $navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-active-color;\n            background-color: $navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-disabled-color;\n            background-color: $navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: $navbar-default-link-color;\n    &:hover {\n      color: $navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: $navbar-inverse-bg;\n  border-color: $navbar-inverse-border;\n\n  .navbar-brand {\n    color: $navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-brand-hover-color;\n      background-color: $navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-hover-color;\n        background-color: $navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-active-color;\n        background-color: $navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n        background-color: $navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: $navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken($navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-inverse-link-active-bg;\n        color: $navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: $navbar-inverse-border;\n        }\n        .divider {\n          background-color: $navbar-inverse-border;\n        }\n        > li > a {\n          color: $navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-hover-color;\n            background-color: $navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-active-color;\n            background-color: $navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-disabled-color;\n            background-color: $navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: $navbar-inverse-link-color;\n    &:hover {\n      color: $navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n@mixin navbar-vertical-align($element-height) {\n  margin-top: (($navbar-height - $element-height) / 2);\n  margin-bottom: (($navbar-height - $element-height) / 2);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;\n  margin-bottom: $line-height-computed;\n  list-style: none;\n  background-color: $breadcrumb-bg;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      // [converter] Workaround for https://github.com/sass/libsass/issues/1115\n      $nbsp: \"\\00a0\";\n      content: \"#{$breadcrumb-separator}#{$nbsp}\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: $breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: $breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: $padding-base-vertical $padding-base-horizontal;\n      line-height: $line-height-base;\n      text-decoration: none;\n      color: $pagination-color;\n      background-color: $pagination-bg;\n      border: 1px solid $pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        @include border-left-radius($border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: $pagination-hover-color;\n      background-color: $pagination-hover-bg;\n      border-color: $pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 3;\n      color: $pagination-active-color;\n      background-color: $pagination-active-bg;\n      border-color: $pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: $pagination-disabled-color;\n      background-color: $pagination-disabled-bg;\n      border-color: $pagination-disabled-border;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n","// Pagination\n\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: $padding-vertical $padding-horizontal;\n      font-size: $font-size;\n      line-height: $line-height;\n    }\n    &:first-child {\n      > a,\n      > span {\n        @include border-left-radius($border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius);\n      }\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  @include clearfix;\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: $pager-bg;\n      border: 1px solid $pager-border;\n      border-radius: $pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: $pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: $pager-disabled-color;\n      background-color: $pager-bg;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: $label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // [converter] extracted a& to a.label\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Add hover effects, but only for links\na.label {\n  &:hover,\n  &:focus {\n    color: $label-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  @include label-variant($label-default-bg);\n}\n\n.label-primary {\n  @include label-variant($label-primary-bg);\n}\n\n.label-success {\n  @include label-variant($label-success-bg);\n}\n\n.label-info {\n  @include label-variant($label-info-bg);\n}\n\n.label-warning {\n  @include label-variant($label-warning-bg);\n}\n\n.label-danger {\n  @include label-variant($label-danger-bg);\n}\n","// Labels\n\n@mixin label-variant($color) {\n  background-color: $color;\n\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken($color, 10%);\n    }\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: $font-size-small;\n  font-weight: $badge-font-weight;\n  color: $badge-color;\n  line-height: $badge-line-height;\n  vertical-align: middle;\n  white-space: nowrap;\n  text-align: center;\n  background-color: $badge-bg;\n  border-radius: $badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n\n  .btn-xs &,\n  .btn-group-xs > .btn & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // [converter] extracted a& to a.badge\n\n  // Account for badges in navs\n  .list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: $badge-active-color;\n    background-color: $badge-active-bg;\n  }\n\n  .list-group-item > & {\n    float: right;\n  }\n\n  .list-group-item > & + & {\n    margin-right: 5px;\n  }\n\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: $badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding-top:    $jumbotron-padding;\n  padding-bottom: $jumbotron-padding;\n  margin-bottom: $jumbotron-padding;\n  color: $jumbotron-color;\n  background-color: $jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: $jumbotron-heading-color;\n  }\n\n  p {\n    margin-bottom: ($jumbotron-padding / 2);\n    font-size: $jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken($jumbotron-bg, 10%);\n  }\n\n  .container &,\n  .container-fluid & {\n    border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container\n    padding-left:  ($grid-gutter-width / 2);\n    padding-right: ($grid-gutter-width / 2);\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: $screen-sm-min) {\n    padding-top:    ($jumbotron-padding * 1.6);\n    padding-bottom: ($jumbotron-padding * 1.6);\n\n    .container &,\n    .container-fluid & {\n      padding-left:  ($jumbotron-padding * 2);\n      padding-right: ($jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: $jumbotron-heading-font-size;\n    }\n  }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: $thumbnail-padding;\n  margin-bottom: $line-height-computed;\n  line-height: $line-height-base;\n  background-color: $thumbnail-bg;\n  border: 1px solid $thumbnail-border;\n  border-radius: $thumbnail-border-radius;\n  @include transition(border .2s ease-in-out);\n\n  > img,\n  a > img {\n    @include img-responsive;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active\n\n  // Image captions\n  .caption {\n    padding: $thumbnail-caption-padding;\n    color: $thumbnail-caption-color;\n  }\n}\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: $link-color;\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: $alert-padding;\n  margin-bottom: $line-height-computed;\n  border: 1px solid transparent;\n  border-radius: $alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing $headings-color\n    color: inherit;\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: $alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: ($alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n\n.alert-info {\n  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n\n.alert-warning {\n  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n\n.alert-danger {\n  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n","// Alerts\n\n@mixin alert-variant($background, $border, $text-color) {\n  background-color: $background;\n  border-color: $border;\n  color: $text-color;\n\n  hr {\n    border-top-color: darken($border, 5%);\n  }\n  .alert-link {\n    color: darken($text-color, 10%);\n  }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: $line-height-computed;\n  margin-bottom: $line-height-computed;\n  background-color: $progress-bg;\n  border-radius: $progress-border-radius;\n  @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: $font-size-small;\n  line-height: $line-height-computed;\n  color: $progress-bar-color;\n  text-align: center;\n  background-color: $progress-bar-bg;\n  @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  @include transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  @include gradient-striped;\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  @include animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  @include progress-bar-variant($progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  @include progress-bar-variant($progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  @include progress-bar-variant($progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  @include progress-bar-variant($progress-bar-danger-bg);\n}\n","// Gradients\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Opera 12\n  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n  background-repeat: repeat-x;\n  background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12\n  background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n}\n@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n  background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n  background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {\n  background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// Progress bars\n\n@mixin progress-bar-variant($color) {\n  background-color: $color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    @include gradient-striped;\n  }\n}\n",".media {\n  // Proper spacing between instances of .media\n  margin-top: 15px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n}\n\n.media,\n.media-body {\n  zoom: 1;\n  overflow: hidden;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-object {\n  display: block;\n\n  // Fix collapse in webkit from max-width: 100% and display: table-cell.\n  &.img-thumbnail {\n    max-width: none;\n  }\n}\n\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
    ,
      , or
      .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: $list-group-bg;\n border: 1px solid $list-group-border;\n\n // Round the first and last items\n &:first-child {\n @include border-top-radius($list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n @include border-bottom-radius($list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: $list-group-link-color;\n\n .list-group-item-heading {\n color: $list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: $list-group-link-hover-color;\n background-color: $list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: $list-group-disabled-bg;\n color: $list-group-disabled-color;\n cursor: $cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: $list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: $list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@include list-group-item-variant(success, $state-success-bg, $state-success-text);\n@include list-group-item-variant(info, $state-info-bg, $state-info-text);\n@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);\n@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n // [converter] extracted a&, button& to a.list-group-item-#{$state}, button.list-group-item-#{$state}\n }\n\n a.list-group-item-#{$state},\n button.list-group-item-#{$state} {\n color: $color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: $color;\n background-color: darken($background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: $color;\n border-color: $color;\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: $line-height-computed;\n background-color: $panel-bg;\n border: 1px solid transparent;\n border-radius: $panel-border-radius;\n @include box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: $panel-body-padding;\n @include clearfix;\n}\n\n// Optional heading\n.panel-heading {\n padding: $panel-heading-padding;\n border-bottom: 1px solid transparent;\n @include border-top-radius(($panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil(($font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: $panel-footer-padding;\n background-color: $panel-footer-bg;\n border-top: 1px solid $panel-inner-border;\n @include border-bottom-radius(($panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n @include border-top-radius(($panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n @include border-bottom-radius(($panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n @include border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: $panel-body-padding;\n padding-right: $panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n @include border-top-radius(($panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: ($panel-border-radius - 1);\n border-top-right-radius: ($panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: ($panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: ($panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n @include border-bottom-radius(($panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: ($panel-border-radius - 1);\n border-bottom-right-radius: ($panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: ($panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: ($panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid $table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: $line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: $panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid $panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid $panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);\n}\n.panel-primary {\n @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);\n}\n.panel-success {\n @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);\n}\n.panel-info {\n @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);\n}\n.panel-warning {\n @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);\n}\n.panel-danger {\n @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);\n}\n","// Panels\n\n@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {\n border-color: $border;\n\n & > .panel-heading {\n color: $heading-text-color;\n background-color: $heading-bg-color;\n border-color: $heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: $border;\n }\n .badge {\n color: $heading-bg-color;\n background-color: $heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: $border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: $well-bg;\n border: 1px solid $well-border;\n border-radius: $border-radius-base;\n @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: $border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: $border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: ($font-size-base * 1.5);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n @include opacity(.2);\n\n &:hover,\n &:focus {\n color: $close-color;\n text-decoration: none;\n cursor: pointer;\n @include opacity(.5);\n }\n\n // [converter] extracted button& to button.close\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n @include translate(0, -25%);\n @include transition-transform(0.3s ease-out);\n }\n &.in .modal-dialog { @include translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: $modal-content-bg;\n border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid $modal-content-border-color;\n border-radius: $border-radius-large;\n @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal-background;\n background-color: $modal-backdrop-bg;\n // Fade for backdrop\n &.fade { @include opacity(0); }\n &.in { @include opacity($modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: $modal-title-padding;\n border-bottom: 1px solid $modal-header-border-color;\n @include clearfix;\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: $modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid $modal-footer-border-color;\n @include clearfix; // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: $screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: $modal-md;\n margin: 30px auto;\n }\n .modal-content {\n @include box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: $modal-sm; }\n}\n\n@media (min-width: $screen-md-min) {\n .modal-lg { width: $modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text;\n font-size: $font-size-small;\n\n @include opacity(0);\n\n &.in { @include opacity($tooltip-opacity); }\n &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: 3px 8px;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n border-radius: $border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: $tooltip-arrow-width;\n margin-bottom: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: $tooltip-arrow-width;\n margin-bottom: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n border-right-color: $tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-left-color: $tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: $tooltip-arrow-width;\n margin-top: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: $tooltip-arrow-width;\n margin-top: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: none;\n max-width: $popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text;\n font-size: $font-size-base;\n\n background-color: $popover-bg;\n background-clip: padding-box;\n border: 1px solid $popover-fallback-border-color;\n border: 1px solid $popover-border-color;\n border-radius: $border-radius-large;\n @include box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -$popover-arrow-width; }\n &.right { margin-left: $popover-arrow-width; }\n &.bottom { margin-top: $popover-arrow-width; }\n &.left { margin-left: -$popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: $font-size-base;\n background-color: $popover-title-bg;\n border-bottom: 1px solid darken($popover-title-bg, 5%);\n border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: $popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: $popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -$popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: $popover-arrow-outer-color;\n bottom: -$popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -$popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: $popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -$popover-arrow-outer-width;\n margin-top: -$popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: $popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -$popover-arrow-width;\n border-left-width: 0;\n border-right-color: $popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -$popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: $popover-arrow-outer-color;\n top: -$popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -$popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -$popover-arrow-outer-width;\n margin-top: -$popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: $popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: $popover-arrow-color;\n bottom: -$popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n @include transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n @include img-responsive;\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n @include transition-transform(0.6s ease-in-out);\n @include backface-visibility(hidden);\n @include perspective(1000px);\n\n &.next,\n &.active.right {\n @include translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n @include translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n @include translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: $carousel-control-width;\n @include opacity($carousel-control-opacity);\n font-size: $carousel-control-font-size;\n color: $carousel-control-color;\n text-align: center;\n text-shadow: $carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: $carousel-control-color;\n text-decoration: none;\n @include opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid $carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: $carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n text-shadow: $carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: $screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: ($carousel-control-font-size * 1.5);\n height: ($carousel-control-font-size * 1.5);\n margin-top: ($carousel-control-font-size / -2);\n font-size: ($carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: ($carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: ($carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n @include clearfix;\n}\n.center-block {\n @include center-block;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n @include text-hide;\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","// Center-align a block level element\n\n@mixin center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n@mixin hide-text() {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n@mixin text-hide() {\n @include hide-text;\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n\n@include responsive-invisibility('.visible-xs');\n@include responsive-invisibility('.visible-sm');\n@include responsive-invisibility('.visible-md');\n@include responsive-invisibility('.visible-lg');\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n@media (max-width: $screen-xs-max) {\n @include responsive-visibility('.visible-xs');\n}\n.visible-xs-block {\n @media (max-width: $screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: $screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: $screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n @include responsive-visibility('.visible-sm');\n}\n.visible-sm-block {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n @include responsive-visibility('.visible-md');\n}\n.visible-md-block {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-lg-min) {\n @include responsive-visibility('.visible-lg');\n}\n.visible-lg-block {\n @media (min-width: $screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: $screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: $screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n@media (max-width: $screen-xs-max) {\n @include responsive-invisibility('.hidden-xs');\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n @include responsive-invisibility('.hidden-sm');\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n @include responsive-invisibility('.hidden-md');\n}\n\n@media (min-width: $screen-lg-min) {\n @include responsive-invisibility('.hidden-lg');\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n\n@include responsive-invisibility('.visible-print');\n\n@media print {\n @include responsive-visibility('.visible-print');\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n@media print {\n @include responsive-invisibility('.hidden-print');\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n// [converter] $parent hack\n@mixin responsive-visibility($parent) {\n #{$parent} {\n display: block !important;\n }\n table#{$parent} { display: table !important; }\n tr#{$parent} { display: table-row !important; }\n th#{$parent},\n td#{$parent} { display: table-cell !important; }\n}\n\n// [converter] $parent hack\n@mixin responsive-invisibility($parent) {\n #{$parent} {\n display: none !important;\n }\n}\n","@import \"palette\";\n\n$ionicons-font-path: \"../../../fonts\" !default;\n@import \"./node_modules/ionicons/scss/ionicons\";\n\n@import \"modules/bootstrap\";\n\nhtml {\n position: relative;\n min-height: 100%;\n -webkit-font-smoothing: antialiased;\n // always show up-down scrollbar to prevent content from jumping left/right\n // depending on whether the page is taller than 100% of viewport height\n overflow-y: scroll;\n}\n\nbody {\n margin-bottom: 60px;\n padding-bottom: 60px;\n}\n\n@import \"helpers\";\n\n// Module overrides\n@import \"modules/tabs\";\n@import \"modules/forms\";\n@import \"modules/well\";\n@import \"modules/alerts\";\n@import \"modules/panels\";\n@import \"modules/btns\";\n@import \"modules/pager\";\n\n// Error pages can have their own overrides.\n@import \"errors\";\n",".uppercase {\n text-transform: uppercase;\n}\n\n.margin-top {\n margin-top: 20px;\n}\n\n.margin-bottom {\n margin-bottom: 20px;\n}\n\n.no-select {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n","div[role=tabpanel] {\n ul.nav-tabs {\n border-bottom: 1px solid #d5d8d7;\n li {\n a {\n font-weight: 400;\n display: inline-block;\n padding: 10px 25px;\n border-radius: 0;\n font-size: 0.9em;\n letter-spacing: 0.01em;\n }\n }\n }\n\n .tab-content {\n border: {\n left: 1px solid #d5d8d7;\n bottom: 1px solid #d5d8d7;\n right: 1px solid #d5d8d7;\n }\n background-color: white;\n .tab-pane {\n padding: 10px;\n }\n }\n}\n","label {\n font-size: 14px;\n}\n\ntextarea {\n resize: none;\n overflow: auto;\n}\n\n.markdown-control {\n position: relative;\n\n &:before {\n position:absolute;\n display:block;\n right:0%;\n bottom:0%;\n width:40px;\n height:40px;\n font-size: 2em;\n font-family: \"Ionicons\";\n content: \"\\f4e6\";\n }\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: 45px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n @include box-shadow(none !important);\n @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n &:focus {\n border-color: #66afe9;\n }\n}\n\n.component-inline {\n @media (max-width: $screen-xs-max) {\n .radio-items {\n text-align: left;\n .radio-inline {\n margin-left: 0;\n width: 100%;\n }\n }\n }\n}\n\n.minicolors-theme-bootstrap .minicolors-swatch {\n top: 9px;\n left: 9px;\n}\n",".well {\n border-radius: 0;\n}\n",".alert {\n border-radius: 4px;\n background: $cachet_yellow;\n border: solid 2px $cachet_dark-yellow;\n\n &.alert-success {\n background-color: $cachet_green;\n border: solid 2px $cachet_dark-green;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n\n &.alert-info {\n background: $cachet_blue;\n border: solid 2px $cachet_dark-blue;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n\n &.alert-danger {\n background: $cachet_red;\n border: solid 2px $cachet_dark-red;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n}\n",".panel-danger {\n @include panel-variant($cachet_dark-red, white, $cachet-red, $cachet_dark-red);\n}\n\n.panel-success {\n @include panel-variant($cachet_dark-green, white, $cachet-green, $cachet_dark-green);\n}\n\n.panel-info {\n @include panel-variant($cachet_dark-blue, white, $cachet-blue, $cachet_dark-blue);\n}\n\n.panel-warning {\n @include panel-variant($cachet_dark-yellow, $panel-warning-text, $cachet-yellow, $cachet_dark-yellow);\n}\n","@mixin pretty-buttons($color, $background, $text-shadow: none) {\n color: $color;\n background: $background;\n border: solid 1px darken($background, 10%);\n\n &:hover,\n &:focus,\n &:active,\n &.active {\n background: darken($background, 5%);\n border-color: darken($background, 10%);\n color: $color;\n outline: none;\n outline-offset: 0;\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: lighten($background, 5%);\n border-color: darken($background, 10%);\n }\n }\n}\n\n.btn {\n &.btn-default {\n @include pretty-buttons($btn-default-color, $btn-default-bg);\n }\n &.btn-primary {\n @include pretty-buttons($btn-primary-color, $btn-primary-bg);\n }\n &.btn-success {\n @include pretty-buttons($btn-success-color, $btn-success-bg);\n }\n &.btn-info {\n @include pretty-buttons($btn-info-color, $btn-info-bg);\n }\n &.btn-warning {\n @include pretty-buttons($btn-warning-color, $btn-warning-bg);\n }\n &.btn-danger {\n @include pretty-buttons($btn-danger-color, $btn-danger-bg);\n }\n &.btn-inverse {\n @include pretty-buttons(white, #474949);\n }\n}\n\n.btn-outline {\n background-color: transparent;\n background-image: none !important;\n color: inherit;\n transition: all .5s;\n}\n\n.btn-default.btn-outline {\n color: #999;\n}\n\n.btn-primary.btn-outline {\n color: #428bca;\n}\n\n.btn-success.btn-outline {\n color: #5cb85c;\n}\n\n.btn-info.btn-outline {\n color: #5bc0de;\n}\n\n.btn-warning.btn-outline {\n color: #f0ad4e;\n}\n\n.btn-danger.btn-outline {\n color: #d9534f;\n}\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff;\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n li {\n > a, > span {\n border-radius: 3px;\n }\n }\n}\n","body.error-page {\n background-color: #f3f3f4;\n\n .middle-box {\n height: 400px;\n width: 400px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -200px;\n z-index: 100;\n\n h1 {\n font-size: 9em;\n }\n }\n\n h3 {\n &.font-bold {\n font-weight: 600;\n }\n }\n}\n","// SweetAlert2\n// github.com/limonte/sweetalert2\n\n$white: #fff;\n\n.swal2-overlay {\n background-color: rgba(#000, .4);\n\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n\n display: none;\n z-index: 1000;\n}\n\n.swal2-modal {\n background-color: $white;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n border-radius: 5px;\n box-sizing: border-box;\n text-align: center;\n\n position: fixed;\n left: 50%;\n top: 50%;\n margin-top: -200px;\n\n max-height: 90%;\n overflow-x: hidden;\n overflow-y: auto;\n display: none;\n z-index: 2000;\n\n &:focus {\n outline: none;\n }\n\n &.loading {\n overflow-y: hidden;\n }\n\n h2 {\n color: #575757;\n font-size: 30px;\n text-align: center;\n font-weight: 600;\n text-transform: none;\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 60px;\n display: block;\n }\n\n .swal2-spacer {\n height: 10px;\n color: transparent;\n border: 0;\n }\n\n button.styled {\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: $white;\n cursor: pointer;\n font-size: 17px;\n font-weight: 500;\n margin: 0 5px;\n padding: 10px 32px;\n\n &:not(.loading)[disabled] {\n opacity: .4;\n cursor: no-drop;\n }\n\n &.loading {\n box-sizing: border-box;\n border: 4px solid transparent;\n border-color: transparent;\n width: 40px;\n height: 40px;\n padding: 0;\n margin: -2px 30px;\n vertical-align: top;\n background-color: transparent !important;\n color: transparent;\n cursor: default;\n border-radius: 100%;\n animation: rotate-loading 1.5s linear 0s infinite normal;\n }\n }\n\n button:not(.styled) {\n &.loading:after {\n display: inline-block;\n content: \"\";\n margin-left: 5px;\n vertical-align: -1px;\n height: 6px;\n width: 6px;\n border: 3px solid #999;\n border-right-color: transparent;\n border-radius: 50%;\n animation: rotate-loading 1.5s linear 0s infinite normal;\n }\n }\n\n .swal2-image {\n margin: 20px auto;\n max-width: 100%;\n }\n\n .swal2-close {\n font-size: 36px;\n line-height: 36px;\n font-family: serif;\n position: absolute;\n top: 5px;\n right: 13px;\n cursor: pointer;\n color: #cfcfcf;\n transition: all 0.1s ease;\n\n &:hover {\n color: #d55;\n }\n }\n\n > .swal2-input,\n > .swal2-textarea,\n > .swal2-select,\n > .swal2-radio,\n > .swal2-checkbox {\n display: none;\n }\n\n .swal2-content {\n font-size: 18px;\n text-align: center;\n font-weight: 300;\n position: relative;\n float: none;\n margin: 0;\n padding: 0;\n line-height: normal;\n color: #555;\n }\n\n .swal2-input,\n .swal2-textarea,\n .swal2-select,\n .swal2-radio,\n .swal2-checkbox,\n .swal2-range input,\n .swal2-range output {\n margin: 20px auto;\n }\n\n .swal2-input:not([type=\"file\"]), .swal2-textarea {\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n border: 1px solid rgb(215, 215, 215);\n font-size: 18px;\n box-shadow: inset 0px 1px 1px rgba(black, 0.06);\n transition: all 0.3s;\n &.error {\n border-color: #f06e57 !important;\n }\n &:focus {\n outline: none;\n box-shadow: 0px 0px 3px rgb(196, 230, 245);\n border: 1px solid rgb(180, 219, 237);\n &::-moz-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n &:-ms-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n &::-webkit-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n }\n &::-moz-placeholder {\n color: lighten(#575757, 40);\n }\n &:-ms-input-placeholder {\n color: lighten(#575757, 40);\n }\n &::-webkit-input-placeholder {\n color: lighten(#575757, 40);\n }\n }\n\n .swal2-range {\n input {\n float: left;\n padding: 0 !important;\n width: 80% !important;\n }\n\n output {\n float: right;\n font-size: 20px;\n font-weight: 600;\n }\n }\n\n .swal2-input:not([type=\"file\"]),\n .swal2-range input,\n .swal2-range output {\n height: 43px;\n line-height: 43px;\n vertical-align: middle;\n padding: 0 12px;\n }\n\n .swal2-input[type=\"file\"] {\n font-size: 20px;\n }\n\n .swal2-input[type=\"number\"] {\n max-width: 150px;\n }\n\n .swal2-textarea {\n height: 108px;\n padding: 12px;\n }\n\n .swal2-select {\n color: #555;\n font-size: inherit;\n padding: 5px 10px;\n min-width: 40%;\n max-width: 100%;\n }\n\n .swal2-radio {\n border: 0;\n\n label:not(:first-child) {\n margin-left: 20px;\n }\n\n input, span {\n vertical-align: middle;\n }\n\n input {\n margin: 0 3px 0 0;\n }\n }\n\n .swal2-checkbox {\n color: #555;\n input, span {\n vertical-align: middle;\n }\n }\n\n .swal2-validationerror {\n background-color: #f1f1f1;\n margin: 0 -20px;\n overflow: hidden;\n padding: 10px;\n color: #797979;\n font-size: 16px;\n font-weight: 300;\n display: none;\n\n &::before {\n content: \"!\";\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: rgb(234, 125, 125);\n color: white;\n line-height: 24px;\n text-align: center;\n margin-right: 10px;\n }\n }\n}\n\n.swal2-icon {\n $red: #f27474;\n $orange: #f8bb86;\n $cyan: #3fc3ee;\n $blue: #c9dae1;\n $green: #a5dc86;\n\n width: 80px;\n height: 80px;\n border: 4px solid #808080;\n border-radius: 50%;\n margin: 20px auto 30px;\n padding: 0;\n position: relative;\n box-sizing: content-box;\n cursor: default;\n\n /* http://stackoverflow.com/a/4407335/1331425 */\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &.swal2-error {\n border-color: $red;\n\n .x-mark {\n position: relative;\n display: block;\n }\n\n .line {\n position: absolute;\n height: 5px;\n width: 47px;\n background-color: $red;\n display: block;\n top: 37px;\n border-radius: 2px;\n\n &.left {\n transform: rotate(45deg);\n left: 17px;\n }\n\n &.right {\n transform: rotate(-45deg);\n right: 16px;\n }\n }\n }\n\n &.swal2-warning {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: $orange;\n border-color: $orange;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-info {\n font-family: \"Open Sans\", sans-serif;\n color: $cyan;\n border-color: $cyan;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-question {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: $blue;\n border-color: $blue;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-success {\n border-color: $green;\n\n &::before,\n &::after { // Emulate moving circular line\n content: '';\n border-radius: 50%;\n position: absolute;\n width: 60px;\n height: 120px;\n background: $white;\n transform: rotate(45deg);\n }\n\n &::before {\n border-radius: 120px 0 0 120px;\n top: -7px;\n left: -33px;\n\n transform: rotate(-45deg);\n transform-origin: 60px 60px;\n }\n\n &::after {\n border-radius: 0 120px 120px 0;\n top: -11px;\n left: 30px;\n\n transform: rotate(-45deg);\n transform-origin: 0 60px;\n }\n\n .placeholder { // Ring\n width: 80px;\n height: 80px;\n border: 4px solid rgba($green, .2);\n border-radius: 50%;\n box-sizing: content-box;\n\n position: absolute;\n left: -4px;\n top: -4px;\n z-index: 2;\n }\n\n .fix { // Hide corners left from animation\n width: 7px;\n height: 90px;\n background-color: $white;\n\n position: absolute;\n left: 28px;\n top: 8px;\n z-index: 1;\n\n transform: rotate(-45deg);\n }\n\n .line {\n height: 5px;\n background-color: $green;\n display: block;\n border-radius: 2px;\n\n position: absolute;\n z-index: 2;\n\n &.tip {\n width: 25px;\n\n left: 14px;\n top: 46px;\n\n transform: rotate(45deg);\n }\n\n &.long {\n width: 47px;\n\n right: 8px;\n top: 38px;\n\n transform: rotate(-45deg);\n }\n }\n }\n}\n\n.swal2-progresssteps {\n $lightblue: #add8e6;\n $blue: #3085d6;\n\n font-weight: 600;\n margin: 0 0 20px;\n padding: 0;\n\n li {\n display: inline-block;\n position: relative;\n }\n\n .swal2-progresscircle {\n background: $blue;\n border-radius: 2em;\n color: $white;\n height: 2em;\n line-height: 2em;\n text-align: center;\n width: 2em;\n z-index: 20;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:last-child {\n margin-right: 0;\n }\n\n &.swal2-activeprogressstep {\n background: $blue;\n\n ~ .swal2-progresscircle {\n background: $lightblue;\n }\n\n ~ .swal2-progressline {\n background: $lightblue;\n }\n }\n }\n\n .swal2-progressline {\n background: $blue;\n height: 0.4em;\n margin: 0 -1px;\n z-index: 10;\n }\n}\n\n\n/* github.com/limonte/sweetalert2/issues/268 */\n[class^=swal2] {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n// Animations\n\n@mixin keyframes($animation-name) {\n @keyframes #{$animation-name} {\n @content;\n }\n}\n\n@mixin animation($str) {\n animation: #{$str};\n}\n\n\n// Modal animation\n\n@include keyframes(showSweetAlert) {\n 0% {\n transform: scale(.7);\n }\n\n 45% {\n transform: scale(1.05);\n }\n\n 80% {\n transform: scale(.95);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n@include keyframes(hideSweetAlert) {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n\n 100% {\n transform: scale(.5);\n opacity: 0;\n }\n}\n\n.show-swal2 {\n @include animation('showSweetAlert 0.3s');\n\n &.no-animation {\n @include animation('none');\n }\n}\n\n.hide-swal2 {\n @include animation('hideSweetAlert 0.15s forwards');\n\n &.no-animation {\n @include animation('none');\n }\n}\n\n\n\n// Success icon animation\n\n@include keyframes(animate-success-tip) {\n 0% {\n width: 0;\n left: 1px;\n top: 19px;\n }\n\n 54% {\n width: 0;\n left: 1px;\n top: 19px;\n }\n\n 70% {\n width: 50px;\n left: -8px;\n top: 37px;\n }\n\n 84% {\n width: 17px;\n left: 21px;\n top: 48px;\n }\n\n 100% {\n width: 25px;\n left: 14px;\n top: 45px;\n }\n}\n\n@include keyframes(animate-success-long) {\n 0% {\n width: 0;\n right: 46px;\n top: 54px;\n }\n\n 65% {\n width: 0;\n right: 46px;\n top: 54px;\n }\n\n 84% {\n width: 55px;\n right: 0;\n top: 35px;\n }\n\n 100% {\n width: 47px;\n right: 8px;\n top: 38px;\n }\n}\n\n@include keyframes(rotatePlaceholder) {\n 0% {\n transform: rotate(-45deg);\n }\n\n 5% {\n transform: rotate(-45deg);\n }\n\n 12% {\n transform: rotate(-405deg);\n }\n\n 100% {\n transform: rotate(-405deg);\n }\n}\n\n.animate-success-tip {\n @include animation('animate-success-tip 0.75s');\n}\n\n.animate-success-long {\n @include animation('animate-success-long 0.75s');\n}\n\n.swal2-icon.swal2-success.animate::after {\n @include animation('rotatePlaceholder 4.25s ease-in');\n}\n\n\n// Error icon animation\n\n@include keyframes(animate-error-icon) {\n 0% {\n transform: rotateX(100deg);\n opacity: 0;\n }\n\n 100% {\n transform: rotateX(0deg);\n opacity: 1;\n }\n}\n\n.animate-error-icon {\n @include animation('animate-error-icon 0.5s');\n}\n\n@include keyframes(animate-x-mark) {\n 0% {\n transform: scale(.4);\n margin-top: 26px;\n opacity: 0;\n }\n\n 50% {\n transform: scale(.4);\n margin-top: 26px;\n opacity: 0;\n }\n\n 80% {\n transform: scale(1.15);\n margin-top: -6px;\n }\n\n 100% {\n transform: scale(1);\n margin-top: 0;\n opacity: 1;\n }\n}\n\n.animate-x-mark {\n @include animation('animate-x-mark 0.5s');\n}\n\n@include keyframes(pulse-warning) {\n 0% {\n border-color: #f8d486;\n }\n\n 100% {\n border-color: #f8bb86;\n }\n}\n\n.pulse-warning {\n @include animation('pulse-warning 0.75s infinite alternate');\n}\n\n@include keyframes(rotate-loading) {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n","@import \"./node_modules/sweetalert2/src/sweetalert2\";\n\n.swal2-modal button {\n margin-right: 8px;\n}\n","body.status-page {\n padding-top: 40px;\n font-family: $base-font-family;\n background-color: #F0F3F4;\n color: #333333;\n font-size: 1.4em;\n font-weight: $base-font-weight;\n -webkit-font-smoothing: antialiased;\n\n &.no-padding {\n padding-top: 0 !important;\n }\n\n hr {\n margin-top: 10px;\n margin-bottom: 10px;\n }\n\n h1, h2, h3, h4, h5 {\n margin-bottom: 20px;\n }\n\n img {\n box-sizing: border-box;\n\n &.emoji {\n height: 20px;\n width: 20px;\n vertical-align: middle;\n max-width: none;\n }\n }\n\n p, strong {\n color: $cachet-base-dark;\n }\n\n .tooltip {\n .tooltip-inner {\n padding: 8px 12px;\n font-size: 14px;\n word-wrap: break-word;\n }\n }\n\n .help-icon {\n cursor: help;\n }\n\n .text-success, .text-component-1 {\n color: $cachet_green;\n }\n\n .text-info, .text-component-2 {\n color: $cachet_blue;\n }\n\n .text-alert, .text-component-3 {\n color: $cachet_yellow;\n }\n\n .text-danger, .text-component-4 {\n color: $cachet_red;\n }\n\n .container {\n max-width: 960px;\n }\n\n .page-header {\n margin-top: 10px;\n }\n\n .app-banner {\n margin-bottom: 30px;\n }\n\n .about-app {\n margin-bottom: 40px;\n p {\n font-size: 1.2em;\n }\n }\n\n .alert {\n font-size: 1.2em;\n font-weight: 600;\n }\n\n .timeline {\n .content-wrapper {\n margin-top: 40px;\n margin-bottom: 40px;\n }\n h3 {\n margin-top: 30px;\n margin-bottom: 40px;\n font-size: 22px;\n small {\n margin-left: 15px;\n }\n }\n\n .panel {\n .panel-body {\n h1 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 2em;\n }\n h2 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.8em;\n }\n h3 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.6em;\n }\n h4 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.4em;\n }\n h5 {\n margin-top: 0;\n margin-bottom: 4px;\n font-size: 1.2em;\n }\n p {\n margin: 0;\n }\n }\n }\n\n .moment {\n width: 100%;\n padding-bottom: 10px;\n position: relative;\n &.first {\n &:before {\n // height: 130%;\n top: -5px;\n }\n }\n &:before {\n content: '';\n position: absolute;\n left: 26px;\n top: -5px;\n width: 2px;\n height: 100%;\n background: #7266BA;\n }\n .status-icon {\n background: #fff;\n width: 35px;\n height: 35px;\n border-radius: 50%;\n border: 1px solid #e8e8e8;\n position: absolute;\n left: 25px;\n top: 14px;\n .icon {\n position: absolute;\n top: 7px;\n left: 11px;\n\n &.ion-alert {\n left: 15px;\n }\n }\n &.status-0 {\n color: $cachet_pink;\n }\n &.status-1 {\n color: $cachet_orange;\n }\n &.status-2 {\n color: $cachet_yellow;\n }\n &.status-3 {\n color: $cachet_blue;\n }\n &.status-4 {\n color: $cachet_green;\n }\n }\n &.last:before {\n background: #fff;\n }\n .panel {\n margin: 0;\n border-radius: 2px;\n\n &.panel-message {\n border: 1px solid #e8e8e8;\n .date {\n color: darken(#c7c7c7, 20%);\n }\n\n &:before {\n position: absolute;\n top: 16px;\n left: 1px;\n display: inline-block;\n border-top: 15px solid transparent;\n border-left: 0 solid #e8e8e8;\n border-right: 15px solid #e8e8e8;\n border-bottom: 15px solid transparent;\n content: \" \";\n }\n\n &:after {\n position: absolute;\n top: 17px;\n left: 2px;\n display: inline-block;\n border-top: 14px solid transparent;\n border-left: 0 solid #fff;\n border-right: 14px solid #fff;\n border-bottom: 14px solid transparent;\n content: \" \";\n }\n }\n\n .panel-heading {\n strong {\n font-size: 1.1em;\n }\n }\n\n .panel-body {\n border-top: 1px solid #eee;\n p {\n &:not(:last-child) {\n margin-bottom: 10px;\n }\n font-size: 1.1em;\n }\n }\n }\n }\n }\n @media (max-width: 767px) {\n .timeline .moment .content {\n width: 100%;\n }\n }\n\n .list-group {\n // margin-bottom: 20px;\n padding-left: 0;\n // border-radius: 0;\n\n .list-group-item {\n border-radius: 0;\n background-color: #ffffff;\n border: 1px solid $cachet_gray_light;\n font-size: 1.1em;\n padding: 15px 15px;\n\n a {\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 400;\n max-width: 90%;\n }\n\n p, time {\n &:not(:last-child) {\n margin-bottom: 10px;\n }\n }\n\n time {\n margin-bottom: 0;\n }\n\n i.icon {\n font-size: 21px;\n line-height: 24px;\n text-align: center;\n display: inline-block;\n min-width: 20px;\n }\n\n &.group-name {\n background-color: $cachet_gray_light;\n padding: {\n top: 0.6em;\n bottom: 0.6em;\n }\n cursor: pointer;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n &.break {\n padding: 1px;\n background-color: $cachet-base-medium;\n }\n }\n\n &.components {\n @extend .panel;\n border-color: $cachet_gray_light;\n\n &:last-child {\n margin-bottom: 30px;\n }\n\n + .components {\n margin-top: 5px;\n }\n\n p {\n margin-bottom: 10px;\n }\n .badge {\n color: transparent;\n }\n\n a {\n color: $cachet-base-dark !important;\n }\n\n }\n }\n\n footer {\n position: absolute;\n width: 100%;\n bottom: 0;\n height: 60px;\n padding: 30px 0 60px 0;\n border-top: 1px solid $cachet_gray_light;\n color: $cachet-gray-darker;\n font-size: 13px;\n line-height: 30px;\n text-align: center;\n text-shadow: 0 1px 0 rgba(255,255,255,0.5);\n\n .btn {\n text-shadow: none;\n }\n\n .icons {\n a.icon-link {\n display: inline-block;\n min-width: 30px;\n height: 30px;\n border-radius: 3px;\n background-color: $cachet-gray-darker;\n text-align: center;\n color: $cachet_gray_light;\n transition: all 0.15s;\n padding: 0 10px 0 10px;\n\n &.rss {\n background-color: $cachet-orange;\n }\n\n &:hover {\n text-decoration: none;\n background-color: darken($cachet-gray-darker, 10%);\n }\n }\n }\n\n .list-inline > li {\n padding-right: 0;\n }\n\n @media (min-width: 768px) {\n text-align: left;\n\n .list-inline {\n text-align: right;\n > li {\n padding-right: 0;\n }\n }\n\n .icons {\n margin-top: 0;\n text-align: right;\n }\n }\n }\n\n // Individual section styling.\n .section-timeline, .section-components, .section-metrics, .section-scheduled {\n margin-top: 40px;\n }\n\n .navbar-custom {\n padding-top: 10px;\n padding-bottom: 10px;\n width: 100%;\n border-radius: 0px;\n margin-bottom: 10px;\n\n a.navbar-brand {\n font-size: 30px;\n font-weight: 600;\n }\n\n .navbar-nav li a {\n color: $cachet-base-dark;\n font-size: 1.7rem;\n\n &:hover {\n background-color: transparent;\n }\n }\n }\n}\n"]} \ No newline at end of file diff --git a/public/build/dist/css/dashboard-cba9885298.css b/public/build/dist/css/dashboard-cba9885298.css deleted file mode 100644 index f656864c1dcf..000000000000 --- a/public/build/dist/css/dashboard-cba9885298.css +++ /dev/null @@ -1,15 +0,0 @@ -/*! - Ionicons, v2.0.1 - Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ - https://twitter.com/benjsperry https://twitter.com/ionicframework - MIT License: https://github.com/driftyco/ionicons - - Android-style icons originally built by Google’s - Material Design Icons: https://github.com/google/material-design-icons - used under CC BY http://creativecommons.org/licenses/by/4.0/ - Modified icons to fit ionicon’s grid from original. -*/.label,sub,sup{vertical-align:baseline}hr,img{border:0}body,figure{margin:0}.btn,.no-select,.swal2-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.markdown-body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}[class^=swal2],html{-webkit-tap-highlight-color:transparent}@font-face{font-family:Ionicons;src:url(../../../fonts/ionicons.eot?v=2.0.1);src:url(../../../fonts/ionicons.eot?v=2.0.1#iefix) format("embedded-opentype"),url(../../../fonts/ionicons.ttf?v=2.0.1) format("truetype"),url(../../../fonts/ionicons.woff?v=2.0.1) format("woff"),url(../../../fonts/ionicons.svg?v=2.0.1#Ionicons) format("svg");font-weight:400;font-style:normal}.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-circle:before,.ion-android-add:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-cloud:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done-all:before,.ion-android-done:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite-outline:before,.ion-android-favorite:before,.ion-android-film:before,.ion-android-folder-open:before,.ion-android-folder:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone-off:before,.ion-android-microphone:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-notifications:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person-add:before,.ion-android-person:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove-circle:before,.ion-android-remove:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share-alt:before,.ion-android-share:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace-outline:before,.ion-backspace:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email-unread:before,.ion-email:before,.ion-erlenmeyer-flask-bubbles:before,.ion-erlenmeyer-flask:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy-outline:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios-alarm-outline:before,.ion-ios-alarm:before,.ion-ios-albums-outline:before,.ion-ios-albums:before,.ion-ios-americanfootball-outline:before,.ion-ios-americanfootball:before,.ion-ios-analytics-outline:before,.ion-ios-analytics:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at-outline:before,.ion-ios-at:before,.ion-ios-barcode-outline:before,.ion-ios-barcode:before,.ion-ios-baseball-outline:before,.ion-ios-baseball:before,.ion-ios-basketball-outline:before,.ion-ios-basketball:before,.ion-ios-bell-outline:before,.ion-ios-bell:before,.ion-ios-body-outline:before,.ion-ios-body:before,.ion-ios-bolt-outline:before,.ion-ios-bolt:before,.ion-ios-book-outline:before,.ion-ios-book:before,.ion-ios-bookmarks-outline:before,.ion-ios-bookmarks:before,.ion-ios-box-outline:before,.ion-ios-box:before,.ion-ios-briefcase-outline:before,.ion-ios-briefcase:before,.ion-ios-browsers-outline:before,.ion-ios-browsers:before,.ion-ios-calculator-outline:before,.ion-ios-calculator:before,.ion-ios-calendar-outline:before,.ion-ios-calendar:before,.ion-ios-camera-outline:before,.ion-ios-camera:before,.ion-ios-cart-outline:before,.ion-ios-cart:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatbubble-outline:before,.ion-ios-chatbubble:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-checkmark:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock-outline:before,.ion-ios-clock:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-close:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-outline:before,.ion-ios-cloudy:before,.ion-ios-cog-outline:before,.ion-ios-cog:before,.ion-ios-color-filter-outline:before,.ion-ios-color-filter:before,.ion-ios-color-wand-outline:before,.ion-ios-color-wand:before,.ion-ios-compose-outline:before,.ion-ios-compose:before,.ion-ios-contact-outline:before,.ion-ios-contact:before,.ion-ios-copy-outline:before,.ion-ios-copy:before,.ion-ios-crop-strong:before,.ion-ios-crop:before,.ion-ios-download-outline:before,.ion-ios-download:before,.ion-ios-drag:before,.ion-ios-email-outline:before,.ion-ios-email:before,.ion-ios-eye-outline:before,.ion-ios-eye:before,.ion-ios-fastforward-outline:before,.ion-ios-fastforward:before,.ion-ios-filing-outline:before,.ion-ios-filing:before,.ion-ios-film-outline:before,.ion-ios-film:before,.ion-ios-flag-outline:before,.ion-ios-flag:before,.ion-ios-flame-outline:before,.ion-ios-flame:before,.ion-ios-flask-outline:before,.ion-ios-flask:before,.ion-ios-flower-outline:before,.ion-ios-flower:before,.ion-ios-folder-outline:before,.ion-ios-folder:before,.ion-ios-football-outline:before,.ion-ios-football:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-b-outline:before,.ion-ios-game-controller-b:before,.ion-ios-gear-outline:before,.ion-ios-gear:before,.ion-ios-glasses-outline:before,.ion-ios-glasses:before,.ion-ios-grid-view-outline:before,.ion-ios-grid-view:before,.ion-ios-heart-outline:before,.ion-ios-heart:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-help:before,.ion-ios-home-outline:before,.ion-ios-home:before,.ion-ios-infinite-outline:before,.ion-ios-infinite:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-information:before,.ion-ios-ionic-outline:before,.ion-ios-keypad-outline:before,.ion-ios-keypad:before,.ion-ios-lightbulb-outline:before,.ion-ios-lightbulb:before,.ion-ios-list-outline:before,.ion-ios-list:before,.ion-ios-location-outline:before,.ion-ios-location:before,.ion-ios-locked-outline:before,.ion-ios-locked:before,.ion-ios-loop-strong:before,.ion-ios-loop:before,.ion-ios-medical-outline:before,.ion-ios-medical:before,.ion-ios-medkit-outline:before,.ion-ios-medkit:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-mic:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-minus:before,.ion-ios-monitor-outline:before,.ion-ios-monitor:before,.ion-ios-moon-outline:before,.ion-ios-moon:before,.ion-ios-more-outline:before,.ion-ios-more:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate-outline:before,.ion-ios-navigate:before,.ion-ios-nutrition-outline:before,.ion-ios-nutrition:before,.ion-ios-paper-outline:before,.ion-ios-paper:before,.ion-ios-paperplane-outline:before,.ion-ios-paperplane:before,.ion-ios-partlysunny-outline:before,.ion-ios-partlysunny:before,.ion-ios-pause-outline:before,.ion-ios-pause:before,.ion-ios-paw-outline:before,.ion-ios-paw:before,.ion-ios-people-outline:before,.ion-ios-people:before,.ion-ios-person-outline:before,.ion-ios-person:before,.ion-ios-personadd-outline:before,.ion-ios-personadd:before,.ion-ios-photos-outline:before,.ion-ios-photos:before,.ion-ios-pie-outline:before,.ion-ios-pie:before,.ion-ios-pint-outline:before,.ion-ios-pint:before,.ion-ios-play-outline:before,.ion-ios-play:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-plus:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetags-outline:before,.ion-ios-pricetags:before,.ion-ios-printer-outline:before,.ion-ios-printer:before,.ion-ios-pulse-strong:before,.ion-ios-pulse:before,.ion-ios-rainy-outline:before,.ion-ios-rainy:before,.ion-ios-recording-outline:before,.ion-ios-recording:before,.ion-ios-redo-outline:before,.ion-ios-redo:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-refresh:before,.ion-ios-reload:before,.ion-ios-reverse-camera-outline:before,.ion-ios-reverse-camera:before,.ion-ios-rewind-outline:before,.ion-ios-rewind:before,.ion-ios-rose-outline:before,.ion-ios-rose:before,.ion-ios-search-strong:before,.ion-ios-search:before,.ion-ios-settings-strong:before,.ion-ios-settings:before,.ion-ios-shuffle-strong:before,.ion-ios-shuffle:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipbackward:before,.ion-ios-skipforward-outline:before,.ion-ios-skipforward:before,.ion-ios-snowy:before,.ion-ios-speedometer-outline:before,.ion-ios-speedometer:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-star:before,.ion-ios-stopwatch-outline:before,.ion-ios-stopwatch:before,.ion-ios-sunny-outline:before,.ion-ios-sunny:before,.ion-ios-telephone-outline:before,.ion-ios-telephone:before,.ion-ios-tennisball-outline:before,.ion-ios-tennisball:before,.ion-ios-thunderstorm-outline:before,.ion-ios-thunderstorm:before,.ion-ios-time-outline:before,.ion-ios-time:before,.ion-ios-timer-outline:before,.ion-ios-timer:before,.ion-ios-toggle-outline:before,.ion-ios-toggle:before,.ion-ios-trash-outline:before,.ion-ios-trash:before,.ion-ios-undo-outline:before,.ion-ios-undo:before,.ion-ios-unlocked-outline:before,.ion-ios-unlocked:before,.ion-ios-upload-outline:before,.ion-ios-upload:before,.ion-ios-videocam-outline:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass-outline:before,.ion-ios-wineglass:before,.ion-ios-world-outline:before,.ion-ios-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad-outline:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-angular-outline:before,.ion-social-angular:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-chrome-outline:before,.ion-social-chrome:before,.ion-social-codepen-outline:before,.ion-social-codepen:before,.ion-social-css3-outline:before,.ion-social-css3:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-euro-outline:before,.ion-social-euro:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-html5-outline:before,.ion-social-html5:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-javascript-outline:before,.ion-social-javascript:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-python:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-sass:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-snapchat-outline:before,.ion-social-snapchat:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitch-outline:before,.ion-social-twitch:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-whatsapp-outline:before,.ion-social-whatsapp:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-yen-outline:before,.ion-social-yen:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-soup-can-outline:before,.ion-soup-can:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt-outline:before,.ion-tshirt:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:""}.ion-alert-circled:before{content:""}.ion-android-add:before{content:""}.ion-android-add-circle:before{content:""}.ion-android-alarm-clock:before{content:""}.ion-android-alert:before{content:""}.ion-android-apps:before{content:""}.ion-android-archive:before{content:""}.ion-android-arrow-back:before{content:""}.ion-android-arrow-down:before{content:""}.ion-android-arrow-dropdown:before{content:""}.ion-android-arrow-dropdown-circle:before{content:""}.ion-android-arrow-dropleft:before{content:""}.ion-android-arrow-dropleft-circle:before{content:""}.ion-android-arrow-dropright:before{content:""}.ion-android-arrow-dropright-circle:before{content:""}.ion-android-arrow-dropup:before{content:""}.ion-android-arrow-dropup-circle:before{content:""}.ion-android-arrow-forward:before{content:""}.ion-android-arrow-up:before{content:""}.ion-android-attach:before{content:""}.ion-android-bar:before{content:""}.ion-android-bicycle:before{content:""}.ion-android-boat:before{content:""}.ion-android-bookmark:before{content:""}.ion-android-bulb:before{content:""}.ion-android-bus:before{content:""}.ion-android-calendar:before{content:""}.ion-android-call:before{content:""}.ion-android-camera:before{content:""}.ion-android-cancel:before{content:""}.ion-android-car:before{content:""}.ion-android-cart:before{content:""}.ion-android-chat:before{content:""}.ion-android-checkbox:before{content:""}.ion-android-checkbox-blank:before{content:""}.ion-android-checkbox-outline:before{content:""}.ion-android-checkbox-outline-blank:before{content:""}.ion-android-checkmark-circle:before{content:""}.ion-android-clipboard:before{content:""}.ion-android-close:before{content:""}.ion-android-cloud:before{content:""}.ion-android-cloud-circle:before{content:""}.ion-android-cloud-done:before{content:""}.ion-android-cloud-outline:before{content:""}.ion-android-color-palette:before{content:""}.ion-android-compass:before{content:""}.ion-android-contact:before{content:""}.ion-android-contacts:before{content:""}.ion-android-contract:before{content:""}.ion-android-create:before{content:""}.ion-android-delete:before{content:""}.ion-android-desktop:before{content:""}.ion-android-document:before{content:""}.ion-android-done:before{content:""}.ion-android-done-all:before{content:""}.ion-android-download:before{content:""}.ion-android-drafts:before{content:""}.ion-android-exit:before{content:""}.ion-android-expand:before{content:""}.ion-android-favorite:before{content:""}.ion-android-favorite-outline:before{content:""}.ion-android-film:before{content:""}.ion-android-folder:before{content:""}.ion-android-folder-open:before{content:""}.ion-android-funnel:before{content:""}.ion-android-globe:before{content:""}.ion-android-hand:before{content:""}.ion-android-hangout:before{content:""}.ion-android-happy:before{content:""}.ion-android-home:before{content:""}.ion-android-image:before{content:""}.ion-android-laptop:before{content:""}.ion-android-list:before{content:""}.ion-android-locate:before{content:""}.ion-android-lock:before{content:""}.ion-android-mail:before{content:""}.ion-android-map:before{content:""}.ion-android-menu:before{content:""}.ion-android-microphone:before{content:""}.ion-android-microphone-off:before{content:""}.ion-android-more-horizontal:before{content:""}.ion-android-more-vertical:before{content:""}.ion-android-navigate:before{content:""}.ion-android-notifications:before{content:""}.ion-android-notifications-none:before{content:""}.ion-android-notifications-off:before{content:""}.ion-android-open:before{content:""}.ion-android-options:before{content:""}.ion-android-people:before{content:""}.ion-android-person:before{content:""}.ion-android-person-add:before{content:""}.ion-android-phone-landscape:before{content:""}.ion-android-phone-portrait:before{content:""}.ion-android-pin:before{content:""}.ion-android-plane:before{content:""}.ion-android-playstore:before{content:""}.ion-android-print:before{content:""}.ion-android-radio-button-off:before{content:""}.ion-android-radio-button-on:before{content:""}.ion-android-refresh:before{content:""}.ion-android-remove:before{content:""}.ion-android-remove-circle:before{content:""}.ion-android-restaurant:before{content:""}.ion-android-sad:before{content:""}.ion-android-search:before{content:""}.ion-android-send:before{content:""}.ion-android-settings:before{content:""}.ion-android-share:before{content:""}.ion-android-share-alt:before{content:""}.ion-android-star:before{content:""}.ion-android-star-half:before{content:""}.ion-android-star-outline:before{content:""}.ion-android-stopwatch:before{content:""}.ion-android-subway:before{content:""}.ion-android-sunny:before{content:""}.ion-android-sync:before{content:""}.ion-android-textsms:before{content:""}.ion-android-time:before{content:""}.ion-android-train:before{content:""}.ion-android-unlock:before{content:""}.ion-android-upload:before{content:""}.ion-android-volume-down:before{content:""}.ion-android-volume-mute:before{content:""}.ion-android-volume-off:before{content:""}.ion-android-volume-up:before{content:""}.ion-android-walk:before{content:""}.ion-android-warning:before{content:""}.ion-android-watch:before{content:""}.ion-android-wifi:before{content:""}.ion-aperture:before{content:""}.ion-archive:before{content:""}.ion-arrow-down-a:before{content:""}.ion-arrow-down-b:before{content:""}.ion-arrow-down-c:before{content:""}.ion-arrow-expand:before{content:""}.ion-arrow-graph-down-left:before{content:""}.ion-arrow-graph-down-right:before{content:""}.ion-arrow-graph-up-left:before{content:""}.ion-arrow-graph-up-right:before{content:""}.ion-arrow-left-a:before{content:""}.ion-arrow-left-b:before{content:""}.ion-arrow-left-c:before{content:""}.ion-arrow-move:before{content:""}.ion-arrow-resize:before{content:""}.ion-arrow-return-left:before{content:""}.ion-arrow-return-right:before{content:""}.ion-arrow-right-a:before{content:""}.ion-arrow-right-b:before{content:""}.ion-arrow-right-c:before{content:""}.ion-arrow-shrink:before{content:""}.ion-arrow-swap:before{content:""}.ion-arrow-up-a:before{content:""}.ion-arrow-up-b:before{content:""}.ion-arrow-up-c:before{content:""}.ion-asterisk:before{content:""}.ion-at:before{content:""}.ion-backspace:before{content:""}.ion-backspace-outline:before{content:""}.ion-bag:before{content:""}.ion-battery-charging:before{content:""}.ion-battery-empty:before{content:""}.ion-battery-full:before{content:""}.ion-battery-half:before{content:""}.ion-battery-low:before{content:""}.ion-beaker:before{content:""}.ion-beer:before{content:""}.ion-bluetooth:before{content:""}.ion-bonfire:before{content:""}.ion-bookmark:before{content:""}.ion-bowtie:before{content:""}.ion-briefcase:before{content:""}.ion-bug:before{content:""}.ion-calculator:before{content:""}.ion-calendar:before{content:""}.ion-camera:before{content:""}.ion-card:before{content:""}.ion-cash:before{content:""}.ion-chatbox:before{content:""}.ion-chatbox-working:before{content:""}.ion-chatboxes:before{content:""}.ion-chatbubble:before{content:""}.ion-chatbubble-working:before{content:""}.ion-chatbubbles:before{content:""}.ion-checkmark:before{content:""}.ion-checkmark-circled:before{content:""}.ion-checkmark-round:before{content:""}.ion-chevron-down:before{content:""}.ion-chevron-left:before{content:""}.ion-chevron-right:before{content:""}.ion-chevron-up:before{content:""}.ion-clipboard:before{content:""}.ion-clock:before{content:""}.ion-close:before{content:""}.ion-close-circled:before{content:""}.ion-close-round:before{content:""}.ion-closed-captioning:before{content:""}.ion-cloud:before{content:""}.ion-code:before{content:""}.ion-code-download:before{content:""}.ion-code-working:before{content:""}.ion-coffee:before{content:""}.ion-compass:before{content:""}.ion-compose:before{content:""}.ion-connection-bars:before{content:""}.ion-contrast:before{content:""}.ion-crop:before{content:""}.ion-cube:before{content:""}.ion-disc:before{content:""}.ion-document:before{content:""}.ion-document-text:before{content:""}.ion-drag:before{content:""}.ion-earth:before{content:""}.ion-easel:before{content:""}.ion-edit:before{content:""}.ion-egg:before{content:""}.ion-eject:before{content:""}.ion-email:before{content:""}.ion-email-unread:before{content:""}.ion-erlenmeyer-flask:before{content:""}.ion-erlenmeyer-flask-bubbles:before{content:""}.ion-eye:before{content:""}.ion-eye-disabled:before{content:""}.ion-female:before{content:""}.ion-filing:before{content:""}.ion-film-marker:before{content:""}.ion-fireball:before{content:""}.ion-flag:before{content:""}.ion-flame:before{content:""}.ion-flash:before{content:""}.ion-flash-off:before{content:""}.ion-folder:before{content:""}.ion-fork:before{content:""}.ion-fork-repo:before{content:""}.ion-forward:before{content:""}.ion-funnel:before{content:""}.ion-gear-a:before{content:""}.ion-gear-b:before{content:""}.ion-grid:before{content:""}.ion-hammer:before{content:""}.ion-happy:before{content:""}.ion-happy-outline:before{content:""}.ion-headphone:before{content:""}.ion-heart:before{content:""}.ion-heart-broken:before{content:""}.ion-help:before{content:""}.ion-help-buoy:before{content:""}.ion-help-circled:before{content:""}.ion-home:before{content:""}.ion-icecream:before{content:""}.ion-image:before{content:""}.ion-images:before{content:""}.ion-information:before{content:""}.ion-information-circled:before{content:""}.ion-ionic:before{content:""}.ion-ios-alarm:before{content:""}.ion-ios-alarm-outline:before{content:""}.ion-ios-albums:before{content:""}.ion-ios-albums-outline:before{content:""}.ion-ios-americanfootball:before{content:""}.ion-ios-americanfootball-outline:before{content:""}.ion-ios-analytics:before{content:""}.ion-ios-analytics-outline:before{content:""}.ion-ios-arrow-back:before{content:""}.ion-ios-arrow-down:before{content:""}.ion-ios-arrow-forward:before{content:""}.ion-ios-arrow-left:before{content:""}.ion-ios-arrow-right:before{content:""}.ion-ios-arrow-thin-down:before{content:""}.ion-ios-arrow-thin-left:before{content:""}.ion-ios-arrow-thin-right:before{content:""}.ion-ios-arrow-thin-up:before{content:""}.ion-ios-arrow-up:before{content:""}.ion-ios-at:before{content:""}.ion-ios-at-outline:before{content:""}.ion-ios-barcode:before{content:""}.ion-ios-barcode-outline:before{content:""}.ion-ios-baseball:before{content:""}.ion-ios-baseball-outline:before{content:""}.ion-ios-basketball:before{content:""}.ion-ios-basketball-outline:before{content:""}.ion-ios-bell:before{content:""}.ion-ios-bell-outline:before{content:""}.ion-ios-body:before{content:""}.ion-ios-body-outline:before{content:""}.ion-ios-bolt:before{content:""}.ion-ios-bolt-outline:before{content:""}.ion-ios-book:before{content:""}.ion-ios-book-outline:before{content:""}.ion-ios-bookmarks:before{content:""}.ion-ios-bookmarks-outline:before{content:""}.ion-ios-box:before{content:""}.ion-ios-box-outline:before{content:""}.ion-ios-briefcase:before{content:""}.ion-ios-briefcase-outline:before{content:""}.ion-ios-browsers:before{content:""}.ion-ios-browsers-outline:before{content:""}.ion-ios-calculator:before{content:""}.ion-ios-calculator-outline:before{content:""}.ion-ios-calendar:before{content:""}.ion-ios-calendar-outline:before{content:""}.ion-ios-camera:before{content:""}.ion-ios-camera-outline:before{content:""}.ion-ios-cart:before{content:""}.ion-ios-cart-outline:before{content:""}.ion-ios-chatboxes:before{content:""}.ion-ios-chatboxes-outline:before{content:""}.ion-ios-chatbubble:before{content:""}.ion-ios-chatbubble-outline:before{content:""}.ion-ios-checkmark:before{content:""}.ion-ios-checkmark-empty:before{content:""}.ion-ios-checkmark-outline:before{content:""}.ion-ios-circle-filled:before{content:""}.ion-ios-circle-outline:before{content:""}.ion-ios-clock:before{content:""}.ion-ios-clock-outline:before{content:""}.ion-ios-close:before{content:""}.ion-ios-close-empty:before{content:""}.ion-ios-close-outline:before{content:""}.ion-ios-cloud:before{content:""}.ion-ios-cloud-download:before{content:""}.ion-ios-cloud-download-outline:before{content:""}.ion-ios-cloud-outline:before{content:""}.ion-ios-cloud-upload:before{content:""}.ion-ios-cloud-upload-outline:before{content:""}.ion-ios-cloudy:before{content:""}.ion-ios-cloudy-night:before{content:""}.ion-ios-cloudy-night-outline:before{content:""}.ion-ios-cloudy-outline:before{content:""}.ion-ios-cog:before{content:""}.ion-ios-cog-outline:before{content:""}.ion-ios-color-filter:before{content:""}.ion-ios-color-filter-outline:before{content:""}.ion-ios-color-wand:before{content:""}.ion-ios-color-wand-outline:before{content:""}.ion-ios-compose:before{content:""}.ion-ios-compose-outline:before{content:""}.ion-ios-contact:before{content:""}.ion-ios-contact-outline:before{content:""}.ion-ios-copy:before{content:""}.ion-ios-copy-outline:before{content:""}.ion-ios-crop:before{content:""}.ion-ios-crop-strong:before{content:""}.ion-ios-download:before{content:""}.ion-ios-download-outline:before{content:""}.ion-ios-drag:before{content:""}.ion-ios-email:before{content:""}.ion-ios-email-outline:before{content:""}.ion-ios-eye:before{content:""}.ion-ios-eye-outline:before{content:""}.ion-ios-fastforward:before{content:""}.ion-ios-fastforward-outline:before{content:""}.ion-ios-filing:before{content:""}.ion-ios-filing-outline:before{content:""}.ion-ios-film:before{content:""}.ion-ios-film-outline:before{content:""}.ion-ios-flag:before{content:""}.ion-ios-flag-outline:before{content:""}.ion-ios-flame:before{content:""}.ion-ios-flame-outline:before{content:""}.ion-ios-flask:before{content:""}.ion-ios-flask-outline:before{content:""}.ion-ios-flower:before{content:""}.ion-ios-flower-outline:before{content:""}.ion-ios-folder:before{content:""}.ion-ios-folder-outline:before{content:""}.ion-ios-football:before{content:""}.ion-ios-football-outline:before{content:""}.ion-ios-game-controller-a:before{content:""}.ion-ios-game-controller-a-outline:before{content:""}.ion-ios-game-controller-b:before{content:""}.ion-ios-game-controller-b-outline:before{content:""}.ion-ios-gear:before{content:""}.ion-ios-gear-outline:before{content:""}.ion-ios-glasses:before{content:""}.ion-ios-glasses-outline:before{content:""}.ion-ios-grid-view:before{content:""}.ion-ios-grid-view-outline:before{content:""}.ion-ios-heart:before{content:""}.ion-ios-heart-outline:before{content:""}.ion-ios-help:before{content:""}.ion-ios-help-empty:before{content:""}.ion-ios-help-outline:before{content:""}.ion-ios-home:before{content:""}.ion-ios-home-outline:before{content:""}.ion-ios-infinite:before{content:""}.ion-ios-infinite-outline:before{content:""}.ion-ios-information:before{content:""}.ion-ios-information-empty:before{content:""}.ion-ios-information-outline:before{content:""}.ion-ios-ionic-outline:before{content:""}.ion-ios-keypad:before{content:""}.ion-ios-keypad-outline:before{content:""}.ion-ios-lightbulb:before{content:""}.ion-ios-lightbulb-outline:before{content:""}.ion-ios-list:before{content:""}.ion-ios-list-outline:before{content:""}.ion-ios-location:before{content:""}.ion-ios-location-outline:before{content:""}.ion-ios-locked:before{content:""}.ion-ios-locked-outline:before{content:""}.ion-ios-loop:before{content:""}.ion-ios-loop-strong:before{content:""}.ion-ios-medical:before{content:""}.ion-ios-medical-outline:before{content:""}.ion-ios-medkit:before{content:""}.ion-ios-medkit-outline:before{content:""}.ion-ios-mic:before{content:""}.ion-ios-mic-off:before{content:""}.ion-ios-mic-outline:before{content:""}.ion-ios-minus:before{content:""}.ion-ios-minus-empty:before{content:""}.ion-ios-minus-outline:before{content:""}.ion-ios-monitor:before{content:""}.ion-ios-monitor-outline:before{content:""}.ion-ios-moon:before{content:""}.ion-ios-moon-outline:before{content:""}.ion-ios-more:before{content:""}.ion-ios-more-outline:before{content:""}.ion-ios-musical-note:before{content:""}.ion-ios-musical-notes:before{content:""}.ion-ios-navigate:before{content:""}.ion-ios-navigate-outline:before{content:""}.ion-ios-nutrition:before{content:""}.ion-ios-nutrition-outline:before{content:""}.ion-ios-paper:before{content:""}.ion-ios-paper-outline:before{content:""}.ion-ios-paperplane:before{content:""}.ion-ios-paperplane-outline:before{content:""}.ion-ios-partlysunny:before{content:""}.ion-ios-partlysunny-outline:before{content:""}.ion-ios-pause:before{content:""}.ion-ios-pause-outline:before{content:""}.ion-ios-paw:before{content:""}.ion-ios-paw-outline:before{content:""}.ion-ios-people:before{content:""}.ion-ios-people-outline:before{content:""}.ion-ios-person:before{content:""}.ion-ios-person-outline:before{content:""}.ion-ios-personadd:before{content:""}.ion-ios-personadd-outline:before{content:""}.ion-ios-photos:before{content:""}.ion-ios-photos-outline:before{content:""}.ion-ios-pie:before{content:""}.ion-ios-pie-outline:before{content:""}.ion-ios-pint:before{content:""}.ion-ios-pint-outline:before{content:""}.ion-ios-play:before{content:""}.ion-ios-play-outline:before{content:""}.ion-ios-plus:before{content:""}.ion-ios-plus-empty:before{content:""}.ion-ios-plus-outline:before{content:""}.ion-ios-pricetag:before{content:""}.ion-ios-pricetag-outline:before{content:""}.ion-ios-pricetags:before{content:""}.ion-ios-pricetags-outline:before{content:""}.ion-ios-printer:before{content:""}.ion-ios-printer-outline:before{content:""}.ion-ios-pulse:before{content:""}.ion-ios-pulse-strong:before{content:""}.ion-ios-rainy:before{content:""}.ion-ios-rainy-outline:before{content:""}.ion-ios-recording:before{content:""}.ion-ios-recording-outline:before{content:""}.ion-ios-redo:before{content:""}.ion-ios-redo-outline:before{content:""}.ion-ios-refresh:before{content:""}.ion-ios-refresh-empty:before{content:""}.ion-ios-refresh-outline:before{content:""}.ion-ios-reload:before{content:""}.ion-ios-reverse-camera:before{content:""}.ion-ios-reverse-camera-outline:before{content:""}.ion-ios-rewind:before{content:""}.ion-ios-rewind-outline:before{content:""}.ion-ios-rose:before{content:""}.ion-ios-rose-outline:before{content:""}.ion-ios-search:before{content:""}.ion-ios-search-strong:before{content:""}.ion-ios-settings:before{content:""}.ion-ios-settings-strong:before{content:""}.ion-ios-shuffle:before{content:""}.ion-ios-shuffle-strong:before{content:""}.ion-ios-skipbackward:before{content:""}.ion-ios-skipbackward-outline:before{content:""}.ion-ios-skipforward:before{content:""}.ion-ios-skipforward-outline:before{content:""}.ion-ios-snowy:before{content:""}.ion-ios-speedometer:before{content:""}.ion-ios-speedometer-outline:before{content:""}.ion-ios-star:before{content:""}.ion-ios-star-half:before{content:""}.ion-ios-star-outline:before{content:""}.ion-ios-stopwatch:before{content:""}.ion-ios-stopwatch-outline:before{content:""}.ion-ios-sunny:before{content:""}.ion-ios-sunny-outline:before{content:""}.ion-ios-telephone:before{content:""}.ion-ios-telephone-outline:before{content:""}.ion-ios-tennisball:before{content:""}.ion-ios-tennisball-outline:before{content:""}.ion-ios-thunderstorm:before{content:""}.ion-ios-thunderstorm-outline:before{content:""}.ion-ios-time:before{content:""}.ion-ios-time-outline:before{content:""}.ion-ios-timer:before{content:""}.ion-ios-timer-outline:before{content:""}.ion-ios-toggle:before{content:""}.ion-ios-toggle-outline:before{content:""}.ion-ios-trash:before{content:""}.ion-ios-trash-outline:before{content:""}.ion-ios-undo:before{content:""}.ion-ios-undo-outline:before{content:""}.ion-ios-unlocked:before{content:""}.ion-ios-unlocked-outline:before{content:""}.ion-ios-upload:before{content:""}.ion-ios-upload-outline:before{content:""}.ion-ios-videocam:before{content:""}.ion-ios-videocam-outline:before{content:""}.ion-ios-volume-high:before{content:""}.ion-ios-volume-low:before{content:""}.ion-ios-wineglass:before{content:""}.ion-ios-wineglass-outline:before{content:""}.ion-ios-world:before{content:""}.ion-ios-world-outline:before{content:""}.ion-ipad:before{content:""}.ion-iphone:before{content:""}.ion-ipod:before{content:""}.ion-jet:before{content:""}.ion-key:before{content:""}.ion-knife:before{content:""}.ion-laptop:before{content:""}.ion-leaf:before{content:""}.ion-levels:before{content:""}.ion-lightbulb:before{content:""}.ion-link:before{content:""}.ion-load-a:before{content:""}.ion-load-b:before{content:""}.ion-load-c:before{content:""}.ion-load-d:before{content:""}.ion-location:before{content:""}.ion-lock-combination:before{content:""}.ion-locked:before{content:""}.ion-log-in:before{content:""}.ion-log-out:before{content:""}.ion-loop:before{content:""}.ion-magnet:before{content:""}.ion-male:before{content:""}.ion-man:before{content:""}.ion-map:before{content:""}.ion-medkit:before{content:""}.ion-merge:before{content:""}.ion-mic-a:before{content:""}.ion-mic-b:before{content:""}.ion-mic-c:before{content:""}.ion-minus:before{content:""}.ion-minus-circled:before{content:""}.ion-minus-round:before{content:""}.ion-model-s:before{content:""}.ion-monitor:before{content:""}.ion-more:before{content:""}.ion-mouse:before{content:""}.ion-music-note:before{content:""}.ion-navicon:before{content:""}.ion-navicon-round:before{content:""}.ion-navigate:before{content:""}.ion-network:before{content:""}.ion-no-smoking:before{content:""}.ion-nuclear:before{content:""}.ion-outlet:before{content:""}.ion-paintbrush:before{content:""}.ion-paintbucket:before{content:""}.ion-paper-airplane:before{content:""}.ion-paperclip:before{content:""}.ion-pause:before{content:""}.ion-person:before{content:""}.ion-person-add:before{content:""}.ion-person-stalker:before{content:""}.ion-pie-graph:before{content:""}.ion-pin:before{content:""}.ion-pinpoint:before{content:""}.ion-pizza:before{content:""}.ion-plane:before{content:""}.ion-planet:before{content:""}.ion-play:before{content:""}.ion-playstation:before{content:""}.ion-plus:before{content:""}.ion-plus-circled:before{content:""}.ion-plus-round:before{content:""}.ion-podium:before{content:""}.ion-pound:before{content:""}.ion-power:before{content:""}.ion-pricetag:before{content:""}.ion-pricetags:before{content:""}.ion-printer:before{content:""}.ion-pull-request:before{content:""}.ion-qr-scanner:before{content:""}.ion-quote:before{content:""}.ion-radio-waves:before{content:""}.ion-record:before{content:""}.ion-refresh:before{content:""}.ion-reply:before{content:""}.ion-reply-all:before{content:""}.ion-ribbon-a:before{content:""}.ion-ribbon-b:before{content:""}.ion-sad:before{content:""}.ion-sad-outline:before{content:""}.ion-scissors:before{content:""}.ion-search:before{content:""}.ion-settings:before{content:""}.ion-share:before{content:""}.ion-shuffle:before{content:""}.ion-skip-backward:before{content:""}.ion-skip-forward:before{content:""}.ion-social-android:before{content:""}.ion-social-android-outline:before{content:""}.ion-social-angular:before{content:""}.ion-social-angular-outline:before{content:""}.ion-social-apple:before{content:""}.ion-social-apple-outline:before{content:""}.ion-social-bitcoin:before{content:""}.ion-social-bitcoin-outline:before{content:""}.ion-social-buffer:before{content:""}.ion-social-buffer-outline:before{content:""}.ion-social-chrome:before{content:""}.ion-social-chrome-outline:before{content:""}.ion-social-codepen:before{content:""}.ion-social-codepen-outline:before{content:""}.ion-social-css3:before{content:""}.ion-social-css3-outline:before{content:""}.ion-social-designernews:before{content:""}.ion-social-designernews-outline:before{content:""}.ion-social-dribbble:before{content:""}.ion-social-dribbble-outline:before{content:""}.ion-social-dropbox:before{content:""}.ion-social-dropbox-outline:before{content:""}.ion-social-euro:before{content:""}.ion-social-euro-outline:before{content:""}.ion-social-facebook:before{content:""}.ion-social-facebook-outline:before{content:""}.ion-social-foursquare:before{content:""}.ion-social-foursquare-outline:before{content:""}.ion-social-freebsd-devil:before{content:""}.ion-social-github:before{content:""}.ion-social-github-outline:before{content:""}.ion-social-google:before{content:""}.ion-social-google-outline:before{content:""}.ion-social-googleplus:before{content:""}.ion-social-googleplus-outline:before{content:""}.ion-social-hackernews:before{content:""}.ion-social-hackernews-outline:before{content:""}.ion-social-html5:before{content:""}.ion-social-html5-outline:before{content:""}.ion-social-instagram:before{content:""}.ion-social-instagram-outline:before{content:""}.ion-social-javascript:before{content:""}.ion-social-javascript-outline:before{content:""}.ion-social-linkedin:before{content:""}.ion-social-linkedin-outline:before{content:""}.ion-social-markdown:before{content:""}.ion-social-nodejs:before{content:""}.ion-social-octocat:before{content:""}.ion-social-pinterest:before{content:""}.ion-social-pinterest-outline:before{content:""}.ion-social-python:before{content:""}.ion-social-reddit:before{content:""}.ion-social-reddit-outline:before{content:""}.ion-social-rss:before{content:""}.ion-social-rss-outline:before{content:""}.ion-social-sass:before{content:""}.ion-social-skype:before{content:""}.ion-social-skype-outline:before{content:""}.ion-social-snapchat:before{content:""}.ion-social-snapchat-outline:before{content:""}.ion-social-tumblr:before{content:""}.ion-social-tumblr-outline:before{content:""}.ion-social-tux:before{content:""}.ion-social-twitch:before{content:""}.ion-social-twitch-outline:before{content:""}.ion-social-twitter:before{content:""}.ion-social-twitter-outline:before{content:""}.ion-social-usd:before{content:""}.ion-social-usd-outline:before{content:""}.ion-social-vimeo:before{content:""}.ion-social-vimeo-outline:before{content:""}.ion-social-whatsapp:before{content:""}.ion-social-whatsapp-outline:before{content:""}.ion-social-windows:before{content:""}.ion-social-windows-outline:before{content:""}.ion-social-wordpress:before{content:""}.ion-social-wordpress-outline:before{content:""}.ion-social-yahoo:before{content:""}.ion-social-yahoo-outline:before{content:""}.ion-social-yen:before{content:""}.ion-social-yen-outline:before{content:""}.ion-social-youtube:before{content:""}.ion-social-youtube-outline:before{content:""}.ion-soup-can:before{content:""}.ion-soup-can-outline:before{content:""}.ion-speakerphone:before{content:""}.ion-speedometer:before{content:""}.ion-spoon:before{content:""}.ion-star:before{content:""}.ion-stats-bars:before{content:""}.ion-steam:before{content:""}.ion-stop:before{content:""}.ion-thermometer:before{content:""}.ion-thumbsdown:before{content:""}.ion-thumbsup:before{content:""}.ion-toggle:before{content:""}.ion-toggle-filled:before{content:""}.ion-transgender:before{content:""}.ion-trash-a:before{content:""}.ion-trash-b:before{content:""}.ion-trophy:before{content:""}.ion-tshirt:before{content:""}.ion-tshirt-outline:before{content:""}.ion-umbrella:before{content:""}.ion-university:before{content:""}.ion-unlocked:before{content:""}.ion-upload:before{content:""}.ion-usb:before{content:""}.ion-videocamera:before{content:""}.ion-volume-high:before{content:""}.ion-volume-low:before{content:""}.ion-volume-medium:before{content:""}.ion-volume-mute:before{content:""}.ion-wand:before{content:""}.ion-waterdrop:before{content:""}.ion-wifi:before{content:""}.ion-wineglass:before{content:""}.ion-woman:before{content:""}.ion-wrench:before{content:""}.ion-xbox:before{content:""}/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.popover,.tooltip,body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{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 #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-size:14px;line-height:1.428571429;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#67808c;text-decoration:none}a:focus,a:hover{color:#465760;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:4px}.img-thumbnail{padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:3px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}select[multiple],select[size],textarea.form-control{height:auto}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,output,pre{line-height:1.428571429}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.component-inline-update,.text-right{text-align:right}.text-center,body.dashboard .sidebar .sidebar-inner .quick-add-incident{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#67808c}a.text-primary:focus,a.text-primary:hover{color:#51656f}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#67808c}a.bg-primary:focus,a.bg-primary:hover{background-color:#51656f}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.markdown-body hr::after,.markdown-body::after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar:after,.pager:after,.panel-body:after,.row:after,.setup-page .steps:after,body.dashboard .sidebar .sidebar-inner ul{clear:both}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:3px}kbd{color:#fff;background-color:#333;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before,.setup-page .steps:after,.setup-page .steps:before{display:table;content:" "}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row,.setup-page .steps{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.setup-page .steps .step{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.setup-page .steps .step{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3,.setup-page .steps .step{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}.checkbox,.radio,input[type=file],output{display:block}input[type=search]{box-sizing:border-box;-webkit-appearance:none}.markdown-body hr,.minicolors-panel,.minicolors-picker{box-sizing:content-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=range]{display:block;width:100%}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px;font-size:14px;color:#555}.form-control{border-radius:3px}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=togglePeriod]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=clear]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=today]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=togglePeriod]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=clear]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=today]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after~.form-control-feedback,.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:3px;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#67808c;border-color:#5c727d}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#51656f;border-color:#262f34}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#51656f;border-color:#42525a}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#42525a;border-color:#262f34}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#67808c;border-color:#5c727d}.btn-primary .badge{color:#67808c;background-color:#fff}.btn-success{color:#fff;background-color:#7ED321;border-color:#71bd1e}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#64a71a;border-color:#2f4f0c}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#64a71a;border-color:#518815}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#518815;border-color:#2f4f0c}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#7ED321;border-color:#71bd1e}.btn-success .badge{color:#7ED321;background-color:#fff}.btn-info{color:#fff;background-color:#3498db;border-color:#258cd1}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#217dbb;border-color:#124364}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#217dbb;border-color:#1c699d}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#1c699d;border-color:#124364}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3498db;border-color:#258cd1}.btn-info .badge{color:#3498db;background-color:#fff}.btn-warning{color:#fff;background-color:#f80;border-color:#e67a00}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#cc6d00;border-color:#663600}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#cc6d00;border-color:#a85a00}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#a85a00;border-color:#663600}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f80;border-color:#e67a00}.btn-warning .badge{color:#f80;background-color:#fff}.btn-danger{color:#fff;background-color:#ff6f6f;border-color:#ff5656}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#ff3c3c;border-color:#d50000}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#ff3c3c;border-color:#ff1818}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ff1818;border-color:#d50000}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#ff6f6f;border-color:#ff5656}.btn-danger .badge{color:#ff6f6f;background-color:#fff}.btn-link{color:#67808c;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#465760;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:4px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.428571429;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#67808c}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.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:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 3px 3px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:3px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:2px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#67808c}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:3px 3px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:3px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#67808c}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:3px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:3px 3px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:after,.navbar:before{content:" ";display:table}.navbar-header:after,.navbar-header:before{content:" ";display:table}.navbar-header:after{clear:both}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:" ";display:table}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:3px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:3px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:3px 3px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:3px}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:3px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#67808c;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.list-group-item>.badge,.pager .next>a,.pager .next>span{float:right}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#465760;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#67808c;border-color:#67808c;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:" ";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#67808c}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#51656f}.label-success{background-color:#7ED321}.label-success[href]:focus,.label-success[href]:hover{background-color:#64a71a}.label-info{background-color:#3498db}.label-info[href]:focus,.label-info[href]:hover{background-color:#217dbb}.label-warning{background-color:#f80}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#cc6d00}.label-danger{background-color:#ff6f6f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#ff3c3c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#67808c;background-color:#fff}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:4px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:3px;-webkit-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#67808c}.alert{padding:15px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:3px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#67808c;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7ED321}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#3498db}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f80}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#ff6f6f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle,.minicolors-swatch{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#67808c;border-color:#67808c}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#dbe1e4}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:2px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:3px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#67808c}.panel-primary>.panel-heading{color:#fff;background-color:#67808c;border-color:#67808c}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#67808c}.panel-primary>.panel-heading .badge{color:#67808c;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#67808c}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:4px}.well-sm{padding:9px;border-radius:2px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:" "}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);-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}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#333}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:3px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#333;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:3px 3px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-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;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:" ";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,body.dashboard .sidebar .sidebar-inner .quick-add-incident i{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}body.dashboard,html{-webkit-font-smoothing:antialiased}div[role=tabpanel] .tab-content,div[role=tabpanel] ul.nav-tabs{border-bottom:1px solid #d5d8d7}.affix{position:fixed}.markdown-control,html{position:relative}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm,body.dashboard .sidebar .sidebar-inner .quick-add-incident i{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,body.dashboard .sidebar .bottom-menu-sidebar,body.dashboard .sidebar .sidebar-inner .quick-add-incident span,body.dashboard .sidebar .sidebar-inner>ul>li>a>span{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}html{min-height:100%;overflow-y:scroll}body{margin-bottom:60px;padding-bottom:60px;-webkit-backface-visibility:hidden}.uppercase{text-transform:uppercase}.margin-top{margin-top:20px}.margin-bottom{margin-bottom:20px}.no-select{-webkit-touch-callout:none;user-select:none}div[role=tabpanel] ul.nav-tabs li a{font-weight:400;display:inline-block;padding:10px 25px;border-radius:0;font-size:.9em;letter-spacing:.01em}div[role=tabpanel] .tab-content{border-left:1px solid #d5d8d7;border-right:1px solid #d5d8d7;background-color:#fff}div[role=tabpanel] .tab-content .tab-pane{padding:10px}label{font-size:14px}textarea{resize:none;overflow:auto}.markdown-control:before{position:absolute;display:block;right:0;bottom:0;width:40px;height:40px;font-size:2em;font-family:Ionicons;content:"\f4e6"}.form-control{display:block;width:100%;height:45px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;border:1px solid #ccc;box-shadow:none!important;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9}@media (max-width:767px){.component-inline .radio-items{text-align:left}.component-inline .radio-items .radio-inline{margin-left:0;width:100%}}.well{border-radius:0}.alert{border-radius:4px;background:#F7CA18;border:2px solid #d5ab07}.alert.alert-success{background-color:#7ED321;border:2px solid #64a71a;color:#fff}.alert.alert-success a{color:#fff;font-weight:700}.alert.alert-info{background:#3498db;border:2px solid #217dbb;color:#fff}.alert.alert-info a{color:#fff;font-weight:700}.alert.alert-danger{background:#ff6f6f;border:2px solid #ff3c3c;color:#fff}.alert.alert-danger a{color:#fff;font-weight:700}.panel-danger{border-color:#ff3c3c}.panel-danger>.panel-heading{color:#fff;background-color:#ff6f6f;border-color:#ff3c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff3c3c}.panel-danger>.panel-heading .badge{color:#ff6f6f;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff3c3c}.panel-success{border-color:#64a71a}.panel-success>.panel-heading{color:#fff;background-color:#7ED321;border-color:#64a71a}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#64a71a}.panel-success>.panel-heading .badge{color:#7ED321;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#64a71a}.panel-info{border-color:#217dbb}.panel-info>.panel-heading{color:#fff;background-color:#3498db;border-color:#217dbb}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#217dbb}.panel-info>.panel-heading .badge{color:#3498db;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#217dbb}.panel-warning{border-color:#d5ab07}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#F7CA18;border-color:#d5ab07}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d5ab07}.panel-warning>.panel-heading .badge{color:#F7CA18;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d5ab07}.btn.btn-default{color:#333;background:#fff;border:1px solid #e6e6e6}.btn.btn-default.active,.btn.btn-default:active,.btn.btn-default:focus,.btn.btn-default:hover{background:#f2f2f2;border-color:#e6e6e6;color:#333;outline:0;outline-offset:0}.btn.btn-default.disabled,.btn.btn-default.disabled.active,.btn.btn-default.disabled:active,.btn.btn-default.disabled:focus,.btn.btn-default.disabled:hover,.btn.btn-default[disabled],.btn.btn-default[disabled].active,.btn.btn-default[disabled]:active,.btn.btn-default[disabled]:focus,.btn.btn-default[disabled]:hover,fieldset[disabled] .btn.btn-default,fieldset[disabled] .btn.btn-default.active,fieldset[disabled] .btn.btn-default:active,fieldset[disabled] .btn.btn-default:focus,fieldset[disabled] .btn.btn-default:hover{background-color:#fff;border-color:#e6e6e6}.btn.btn-primary{color:#fff;background:#67808c;border:1px solid #51656f}.btn.btn-primary.active,.btn.btn-primary:active,.btn.btn-primary:focus,.btn.btn-primary:hover{background:#5c727d;border-color:#51656f;color:#fff;outline:0;outline-offset:0}.btn.btn-primary.disabled,.btn.btn-primary.disabled.active,.btn.btn-primary.disabled:active,.btn.btn-primary.disabled:focus,.btn.btn-primary.disabled:hover,.btn.btn-primary[disabled],.btn.btn-primary[disabled].active,.btn.btn-primary[disabled]:active,.btn.btn-primary[disabled]:focus,.btn.btn-primary[disabled]:hover,fieldset[disabled] .btn.btn-primary,fieldset[disabled] .btn.btn-primary.active,fieldset[disabled] .btn.btn-primary:active,fieldset[disabled] .btn.btn-primary:focus,fieldset[disabled] .btn.btn-primary:hover{background-color:#748c99;border-color:#51656f}.btn.btn-success{color:#fff;background:#7ED321;border:1px solid #64a71a}.btn.btn-success.active,.btn.btn-success:active,.btn.btn-success:focus,.btn.btn-success:hover{background:#71bd1e;border-color:#64a71a;color:#fff;outline:0;outline-offset:0}.btn.btn-success.disabled,.btn.btn-success.disabled.active,.btn.btn-success.disabled:active,.btn.btn-success.disabled:focus,.btn.btn-success.disabled:hover,.btn.btn-success[disabled],.btn.btn-success[disabled].active,.btn.btn-success[disabled]:active,.btn.btn-success[disabled]:focus,.btn.btn-success[disabled]:hover,fieldset[disabled] .btn.btn-success,fieldset[disabled] .btn.btn-success.active,fieldset[disabled] .btn.btn-success:active,fieldset[disabled] .btn.btn-success:focus,fieldset[disabled] .btn.btn-success:hover{background-color:#8bde2f;border-color:#64a71a}.btn.btn-info{color:#fff;background:#3498db;border:1px solid #217dbb}.btn.btn-info.active,.btn.btn-info:active,.btn.btn-info:focus,.btn.btn-info:hover{background:#258cd1;border-color:#217dbb;color:#fff;outline:0;outline-offset:0}.btn.btn-info.disabled,.btn.btn-info.disabled.active,.btn.btn-info.disabled:active,.btn.btn-info.disabled:focus,.btn.btn-info.disabled:hover,.btn.btn-info[disabled],.btn.btn-info[disabled].active,.btn.btn-info[disabled]:active,.btn.btn-info[disabled]:focus,.btn.btn-info[disabled]:hover,fieldset[disabled] .btn.btn-info,fieldset[disabled] .btn.btn-info.active,fieldset[disabled] .btn.btn-info:active,fieldset[disabled] .btn.btn-info:focus,fieldset[disabled] .btn.btn-info:hover{background-color:#4aa3df;border-color:#217dbb}.btn.btn-warning{color:#fff;background:#f80;border:1px solid #cc6d00}.btn.btn-warning.active,.btn.btn-warning:active,.btn.btn-warning:focus,.btn.btn-warning:hover{background:#e67a00;border-color:#cc6d00;color:#fff;outline:0;outline-offset:0}.btn.btn-warning.disabled,.btn.btn-warning.disabled.active,.btn.btn-warning.disabled:active,.btn.btn-warning.disabled:focus,.btn.btn-warning.disabled:hover,.btn.btn-warning[disabled],.btn.btn-warning[disabled].active,.btn.btn-warning[disabled]:active,.btn.btn-warning[disabled]:focus,.btn.btn-warning[disabled]:hover,fieldset[disabled] .btn.btn-warning,fieldset[disabled] .btn.btn-warning.active,fieldset[disabled] .btn.btn-warning:active,fieldset[disabled] .btn.btn-warning:focus,fieldset[disabled] .btn.btn-warning:hover{background-color:#ff941a;border-color:#cc6d00}.btn.btn-danger{color:#fff;background:#ff6f6f;border:1px solid #ff3c3c}.btn.btn-danger.active,.btn.btn-danger:active,.btn.btn-danger:focus,.btn.btn-danger:hover{background:#ff5656;border-color:#ff3c3c;color:#fff;outline:0;outline-offset:0}.btn.btn-danger.disabled,.btn.btn-danger.disabled.active,.btn.btn-danger.disabled:active,.btn.btn-danger.disabled:focus,.btn.btn-danger.disabled:hover,.btn.btn-danger[disabled],.btn.btn-danger[disabled].active,.btn.btn-danger[disabled]:active,.btn.btn-danger[disabled]:focus,.btn.btn-danger[disabled]:hover,fieldset[disabled] .btn.btn-danger,fieldset[disabled] .btn.btn-danger.active,fieldset[disabled] .btn.btn-danger:active,fieldset[disabled] .btn.btn-danger:focus,fieldset[disabled] .btn.btn-danger:hover{background-color:#ff8989;border-color:#ff3c3c}.btn.btn-inverse{color:#fff;background:#474949;border:1px solid #2e2f2f}.btn.btn-inverse.active,.btn.btn-inverse:active,.btn.btn-inverse:focus,.btn.btn-inverse:hover{background:#3a3c3c;border-color:#2e2f2f;color:#fff;outline:0;outline-offset:0}.btn.btn-inverse.disabled,.btn.btn-inverse.disabled.active,.btn.btn-inverse.disabled:active,.btn.btn-inverse.disabled:focus,.btn.btn-inverse.disabled:hover,.btn.btn-inverse[disabled],.btn.btn-inverse[disabled].active,.btn.btn-inverse[disabled]:active,.btn.btn-inverse[disabled]:focus,.btn.btn-inverse[disabled]:hover,fieldset[disabled] .btn.btn-inverse,fieldset[disabled] .btn.btn-inverse.active,fieldset[disabled] .btn.btn-inverse:active,fieldset[disabled] .btn.btn-inverse:focus,fieldset[disabled] .btn.btn-inverse:hover{background-color:#545656;border-color:#2e2f2f}.btn-outline{background-color:transparent;background-image:none!important;color:inherit;-webkit-transition:all .5s;transition:all .5s}.btn-default.btn-outline{color:#999}.btn-primary.btn-outline{color:#428bca}.btn-success.btn-outline{color:#5cb85c}.btn-info.btn-outline{color:#5bc0de}.btn-warning.btn-outline{color:#f0ad4e}.btn-danger.btn-outline{color:#d9534f}.btn-danger.btn-outline:hover,.btn-info.btn-outline:hover,.btn-primary.btn-outline:hover,.btn-success.btn-outline:hover,.btn-warning.btn-outline:hover,body.dashboard .navbar a,body.dashboard .navbar a:active,body.dashboard .navbar a:visited{color:#fff}.pager li>a,.pager li>span{border-radius:3px}body.error-page{background-color:#f3f3f4}body.error-page .middle-box{height:400px;width:400px;position:absolute;top:50%;left:50%;margin-top:-250px;margin-left:-200px;z-index:100}body.dashboard,body.dashboard .wrapper{display:table;height:100%;table-layout:fixed}body.error-page .middle-box h1{font-size:9em}body.error-page h3.font-bold{font-weight:600}body.dashboard{font-family:-apple-system,BlinkMacSystemFont,"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;font-size:15px;width:100%;line-height:1.42857143}body.dashboard .wrapper{padding-left:0;-webkit-transition:all .5s ease;transition:all .5s ease}body.dashboard .wrapper.toggled{padding-left:230px}body.dashboard .wrapper.toggled .sidebar{width:230px}body.dashboard .wrapper.toggled .page-content{position:absolute;margin-right:-230px}@media (min-width:768px) and (max-width:991px){body.dashboard .wrapper{padding-left:80px}}@media (min-width:991px){body.dashboard .wrapper{padding-left:230px}body.dashboard .wrapper.toggled{padding-left:0}body.dashboard .wrapper.toggled .page-content{position:relative;margin-right:0}}body.dashboard .alerts .alert h5{margin-top:5px}body.dashboard .wrapper{width:100%}body.dashboard .navbar{z-index:999;border-radius:0;border:none;border-bottom:1px solid #00695c;background:#009c89;margin:0}body.dashboard .navbar a:active:hover,body.dashboard .navbar a:hover,body.dashboard .navbar a:visited:hover{color:#e9e9e9}body.dashboard .navbar .navbar-toggle{margin-top:15px;background:0 0;border-color:transparent}body.dashboard .navbar .navbar-toggle.collapsed span{background-color:#fff}body.dashboard .navbar .navbar-collapse{background:#009c89}body.dashboard .navbar a.navbar-brand{padding:34px 21px;line-height:0;font-size:1.1em;letter-spacing:.04em;font-weight:600;text-transform:uppercase}@media (min-width:991px){body.dashboard .navbar a.navbar-brand span{padding-right:10px}body.dashboard .navbar a.navbar-brand span:before{font-family:FontAwesome;content:"\f060"}}body.dashboard .navbar .nav li a{height:68px;line-height:35px}body.dashboard .sidebar{position:fixed;left:230px;width:0;height:100%;margin-left:-230px;overflow-y:auto;background:#333;box-shadow:inset 0 -2px 3px rgba(0,0,0,.25);z-index:1000;-webkit-transition:all .5s ease;transition:all .5s ease}body.dashboard .sidebar .sidebar-inner{position:absolute;top:0;width:230px;margin:0;padding:0;list-style:none}body.dashboard .sidebar .sidebar-inner .profile{text-align:center;padding:20px 10px;margin-bottom:0}body.dashboard .sidebar .sidebar-inner .profile .dropdown-toggle{text-decoration:none}body.dashboard .sidebar .sidebar-inner .profile .dropdown-menu{top:108%}body.dashboard .sidebar .sidebar-inner .profile .avatar{width:60px}body.dashboard .sidebar .sidebar-inner .profile .avatar img{border-radius:50%;width:50px}body.dashboard .sidebar .sidebar-inner .profile .username{word-break:break-all;margin-bottom:0}body.dashboard .sidebar .sidebar-inner .profile a{color:#fff;text-decoration:none}body.dashboard .sidebar .sidebar-inner .quick-add-incident{padding:10px}body.dashboard .sidebar .sidebar-inner ul{margin:0;padding:0;list-style:none}body.dashboard .sidebar .sidebar-inner ul li{font-size:.9em}body.dashboard .sidebar .sidebar-inner ul li:focus,body.dashboard .sidebar .sidebar-inner ul li:hover{background:#404040!important}body.dashboard .sidebar .sidebar-inner ul li.active{background:#4d4d4d}body.dashboard .sidebar .sidebar-inner ul li.active:hover{background:#595959!important}body.dashboard .sidebar .sidebar-inner ul li.active a{padding-top:14px;padding-bottom:14px;border-top:1px solid #666;border-bottom:1px solid #666;color:#fff}body.dashboard .sidebar .sidebar-inner ul li.active a:focus,body.dashboard .sidebar .sidebar-inner ul li.active a:hover{text-decoration:none}body.dashboard .sidebar .sidebar-inner ul li a{display:block;padding:15px;color:#fff}body.dashboard .sidebar .sidebar-inner ul li a i{font-size:18px;min-width:17px;text-align:center;position:relative;top:1px;margin-right:5px}body.dashboard .sidebar .sidebar-inner ul li a:focus,body.dashboard .sidebar .sidebar-inner ul li a:hover{text-decoration:none}body.dashboard .sidebar .sidebar-inner ul li a span.label{float:right;margin:3px 0}body.dashboard .sidebar .sidebar-inner ul li a span.label.label-info{background-color:#6DB81C}body.dashboard .sidebar .sidebar-inner ul li.sub-nav-item a{padding-left:40px}body.dashboard .sidebar .bottom-menu-sidebar{position:fixed;bottom:0;width:230px;z-index:999}body.dashboard .sidebar .bottom-menu-sidebar ul>li{float:left;display:block;width:33.333%;border-right:1px solid #ddd;border-top:1px solid #ddd}body.dashboard .sidebar .bottom-menu-sidebar ul>li a{color:#333;display:block;position:relative;text-align:center;padding:6px 0;background:#fff}@media (min-width:767px){body.dashboard .sidebar{width:230px}body.dashboard .wrapper.toggled .sidebar{width:0}}@media (min-width:768px) and (max-width:991px){body.dashboard .sidebar{width:80px;left:150px;margin-left:-150px}body.dashboard .sidebar .sidebar-inner{width:80px}body.dashboard .sidebar .sidebar-inner .profile .avatar img{width:40px}body.dashboard .sidebar .sidebar-inner .quick-add-incident .btn{padding:3px 6px}body.dashboard .sidebar .sidebar-inner .quick-add-incident i{font-size:20px}body.dashboard .sidebar .sidebar-inner>ul>li>a{text-align:center}body.dashboard .sidebar .sidebar-inner>ul>li>a>i{font-size:25px}}body.dashboard .sidebar-toggler{float:left;padding:10px;position:relative;top:-15px;left:-5px;margin-right:10px;cursor:pointer}body.dashboard .sidebar-toggler i{font-size:25px}body.dashboard .sub-sidebar{left:0;top:0;bottom:0;position:fixed;margin-left:228px;width:22%;background:#F0F3F4;border-right:1px solid #E8ECF1}body.dashboard .sub-sidebar h3{margin:0;text-align:center;font-size:19px;padding:30px 15px 15px}body.dashboard .sub-sidebar hr{margin-top:5px;margin-bottom:5px}body.dashboard .sub-sidebar ul.menu{list-style-type:none;padding:0;margin:0}body.dashboard .sub-sidebar ul.menu li a{color:#666;display:block;padding:13px 30px;font-size:15px;-webkit-transition:all .2s linear;transition:all .2s linear;text-decoration:none}body.dashboard .sub-sidebar ul.menu li a.active,body.dashboard .sub-sidebar ul.menu li a:hover{color:#6DB81C}body.dashboard .sub-sidebar ul.menu li i{margin-right:5px}body.dashboard .sub-sidebar .sidebar-toggler{position:absolute;top:3px;left:20px;font-size:36px;cursor:pointer}body.dashboard .sub-sidebar+.content-wrapper{top:0;position:relative;margin-left:26%;padding-right:40px!important}@media (max-width:767px){body.dashboard .sub-sidebar{position:relative;margin-left:0;width:100%}body.dashboard .sub-sidebar+.content-wrapper{margin-left:0;padding-left:40px!important;width:100%}}@media (min-width:768px) and (max-width:991px){body.dashboard .sub-sidebar{margin-left:80px;width:25%}body.dashboard .sub-sidebar+.content-wrapper{padding-left:45px!important}}body.dashboard .page-content{width:100%}body.dashboard .page-content .content-wrapper{padding-top:20px;padding-left:40px;padding-right:40px}body.dashboard .page-content .content-wrapper.header-fixed{margin-top:60px}body.dashboard .page-content .header{position:relative;top:0;left:0;color:#333;background-color:#fff;padding:22px 40px;width:100%;height:70px;font-size:1.2em;border-bottom:1px solid #eee;z-index:99}body.dashboard .page-content .header.sub-header{padding:8px 2px;height:50px}body.dashboard .page-content .header.fixed{position:fixed;padding-left:270px}body.dashboard .page-content .header .btn,body.dashboard .page-content .header button,body.dashboard .page-content .header input{position:relative;top:-4px}body.dashboard .page-content .header input{width:20%}.setup-page body.dashboard .page-content .header+.steps,body.dashboard .page-content .header+.row,body.dashboard .page-content .setup-page .header+.steps{margin-top:23px}body.dashboard .page-content .header h3{color:#444;margin-top:0;text-transform:uppercase}body.dashboard .page-content .header .ion,body.dashboard .page-content .header .ion-alert-circled:before,body.dashboard .page-content .header .ion-alert:before,body.dashboard .page-content .header .ion-android-add-circle:before,body.dashboard .page-content .header .ion-android-add:before,body.dashboard .page-content .header .ion-android-alarm-clock:before,body.dashboard .page-content .header .ion-android-alert:before,body.dashboard .page-content .header .ion-android-apps:before,body.dashboard .page-content .header .ion-android-archive:before,body.dashboard .page-content .header .ion-android-arrow-back:before,body.dashboard .page-content .header .ion-android-arrow-down:before,body.dashboard .page-content .header .ion-android-arrow-dropdown-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropdown:before,body.dashboard .page-content .header .ion-android-arrow-dropleft-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropleft:before,body.dashboard .page-content .header .ion-android-arrow-dropright-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropright:before,body.dashboard .page-content .header .ion-android-arrow-dropup-circle:before,body.dashboard .page-content .header .ion-android-arrow-dropup:before,body.dashboard .page-content .header .ion-android-arrow-forward:before,body.dashboard .page-content .header .ion-android-arrow-up:before,body.dashboard .page-content .header .ion-android-attach:before,body.dashboard .page-content .header .ion-android-bar:before,body.dashboard .page-content .header .ion-android-bicycle:before,body.dashboard .page-content .header .ion-android-boat:before,body.dashboard .page-content .header .ion-android-bookmark:before,body.dashboard .page-content .header .ion-android-bulb:before,body.dashboard .page-content .header .ion-android-bus:before,body.dashboard .page-content .header .ion-android-calendar:before,body.dashboard .page-content .header .ion-android-call:before,body.dashboard .page-content .header .ion-android-camera:before,body.dashboard .page-content .header .ion-android-cancel:before,body.dashboard .page-content .header .ion-android-car:before,body.dashboard .page-content .header .ion-android-cart:before,body.dashboard .page-content .header .ion-android-chat:before,body.dashboard .page-content .header .ion-android-checkbox-blank:before,body.dashboard .page-content .header .ion-android-checkbox-outline-blank:before,body.dashboard .page-content .header .ion-android-checkbox-outline:before,body.dashboard .page-content .header .ion-android-checkbox:before,body.dashboard .page-content .header .ion-android-checkmark-circle:before,body.dashboard .page-content .header .ion-android-clipboard:before,body.dashboard .page-content .header .ion-android-close:before,body.dashboard .page-content .header .ion-android-cloud-circle:before,body.dashboard .page-content .header .ion-android-cloud-done:before,body.dashboard .page-content .header .ion-android-cloud-outline:before,body.dashboard .page-content .header .ion-android-cloud:before,body.dashboard .page-content .header .ion-android-color-palette:before,body.dashboard .page-content .header .ion-android-compass:before,body.dashboard .page-content .header .ion-android-contact:before,body.dashboard .page-content .header .ion-android-contacts:before,body.dashboard .page-content .header .ion-android-contract:before,body.dashboard .page-content .header .ion-android-create:before,body.dashboard .page-content .header .ion-android-delete:before,body.dashboard .page-content .header .ion-android-desktop:before,body.dashboard .page-content .header .ion-android-document:before,body.dashboard .page-content .header .ion-android-done-all:before,body.dashboard .page-content .header .ion-android-done:before,body.dashboard .page-content .header .ion-android-download:before,body.dashboard .page-content .header .ion-android-drafts:before,body.dashboard .page-content .header .ion-android-exit:before,body.dashboard .page-content .header .ion-android-expand:before,body.dashboard .page-content .header .ion-android-favorite-outline:before,body.dashboard .page-content .header .ion-android-favorite:before,body.dashboard .page-content .header .ion-android-film:before,body.dashboard .page-content .header .ion-android-folder-open:before,body.dashboard .page-content .header .ion-android-folder:before,body.dashboard .page-content .header .ion-android-funnel:before,body.dashboard .page-content .header .ion-android-globe:before,body.dashboard .page-content .header .ion-android-hand:before,body.dashboard .page-content .header .ion-android-hangout:before,body.dashboard .page-content .header .ion-android-happy:before,body.dashboard .page-content .header .ion-android-home:before,body.dashboard .page-content .header .ion-android-image:before,body.dashboard .page-content .header .ion-android-laptop:before,body.dashboard .page-content .header .ion-android-list:before,body.dashboard .page-content .header .ion-android-locate:before,body.dashboard .page-content .header .ion-android-lock:before,body.dashboard .page-content .header .ion-android-mail:before,body.dashboard .page-content .header .ion-android-map:before,body.dashboard .page-content .header .ion-android-menu:before,body.dashboard .page-content .header .ion-android-microphone-off:before,body.dashboard .page-content .header .ion-android-microphone:before,body.dashboard .page-content .header .ion-android-more-horizontal:before,body.dashboard .page-content .header .ion-android-more-vertical:before,body.dashboard .page-content .header .ion-android-navigate:before,body.dashboard .page-content .header .ion-android-notifications-none:before,body.dashboard .page-content .header .ion-android-notifications-off:before,body.dashboard .page-content .header .ion-android-notifications:before,body.dashboard .page-content .header .ion-android-open:before,body.dashboard .page-content .header .ion-android-options:before,body.dashboard .page-content .header .ion-android-people:before,body.dashboard .page-content .header .ion-android-person-add:before,body.dashboard .page-content .header .ion-android-person:before,body.dashboard .page-content .header .ion-android-phone-landscape:before,body.dashboard .page-content .header .ion-android-phone-portrait:before,body.dashboard .page-content .header .ion-android-pin:before,body.dashboard .page-content .header .ion-android-plane:before,body.dashboard .page-content .header .ion-android-playstore:before,body.dashboard .page-content .header .ion-android-print:before,body.dashboard .page-content .header .ion-android-radio-button-off:before,body.dashboard .page-content .header .ion-android-radio-button-on:before,body.dashboard .page-content .header .ion-android-refresh:before,body.dashboard .page-content .header .ion-android-remove-circle:before,body.dashboard .page-content .header .ion-android-remove:before,body.dashboard .page-content .header .ion-android-restaurant:before,body.dashboard .page-content .header .ion-android-sad:before,body.dashboard .page-content .header .ion-android-search:before,body.dashboard .page-content .header .ion-android-send:before,body.dashboard .page-content .header .ion-android-settings:before,body.dashboard .page-content .header .ion-android-share-alt:before,body.dashboard .page-content .header .ion-android-share:before,body.dashboard .page-content .header .ion-android-star-half:before,body.dashboard .page-content .header .ion-android-star-outline:before,body.dashboard .page-content .header .ion-android-star:before,body.dashboard .page-content .header .ion-android-stopwatch:before,body.dashboard .page-content .header .ion-android-subway:before,body.dashboard .page-content .header .ion-android-sunny:before,body.dashboard .page-content .header .ion-android-sync:before,body.dashboard .page-content .header .ion-android-textsms:before,body.dashboard .page-content .header .ion-android-time:before,body.dashboard .page-content .header .ion-android-train:before,body.dashboard .page-content .header .ion-android-unlock:before,body.dashboard .page-content .header .ion-android-upload:before,body.dashboard .page-content .header .ion-android-volume-down:before,body.dashboard .page-content .header .ion-android-volume-mute:before,body.dashboard .page-content .header .ion-android-volume-off:before,body.dashboard .page-content .header .ion-android-volume-up:before,body.dashboard .page-content .header .ion-android-walk:before,body.dashboard .page-content .header .ion-android-warning:before,body.dashboard .page-content .header .ion-android-watch:before,body.dashboard .page-content .header .ion-android-wifi:before,body.dashboard .page-content .header .ion-aperture:before,body.dashboard .page-content .header .ion-archive:before,body.dashboard .page-content .header .ion-arrow-down-a:before,body.dashboard .page-content .header .ion-arrow-down-b:before,body.dashboard .page-content .header .ion-arrow-down-c:before,body.dashboard .page-content .header .ion-arrow-expand:before,body.dashboard .page-content .header .ion-arrow-graph-down-left:before,body.dashboard .page-content .header .ion-arrow-graph-down-right:before,body.dashboard .page-content .header .ion-arrow-graph-up-left:before,body.dashboard .page-content .header .ion-arrow-graph-up-right:before,body.dashboard .page-content .header .ion-arrow-left-a:before,body.dashboard .page-content .header .ion-arrow-left-b:before,body.dashboard .page-content .header .ion-arrow-left-c:before,body.dashboard .page-content .header .ion-arrow-move:before,body.dashboard .page-content .header .ion-arrow-resize:before,body.dashboard .page-content .header .ion-arrow-return-left:before,body.dashboard .page-content .header .ion-arrow-return-right:before,body.dashboard .page-content .header .ion-arrow-right-a:before,body.dashboard .page-content .header .ion-arrow-right-b:before,body.dashboard .page-content .header .ion-arrow-right-c:before,body.dashboard .page-content .header .ion-arrow-shrink:before,body.dashboard .page-content .header .ion-arrow-swap:before,body.dashboard .page-content .header .ion-arrow-up-a:before,body.dashboard .page-content .header .ion-arrow-up-b:before,body.dashboard .page-content .header .ion-arrow-up-c:before,body.dashboard .page-content .header .ion-asterisk:before,body.dashboard .page-content .header .ion-at:before,body.dashboard .page-content .header .ion-backspace-outline:before,body.dashboard .page-content .header .ion-backspace:before,body.dashboard .page-content .header .ion-bag:before,body.dashboard .page-content .header .ion-battery-charging:before,body.dashboard .page-content .header .ion-battery-empty:before,body.dashboard .page-content .header .ion-battery-full:before,body.dashboard .page-content .header .ion-battery-half:before,body.dashboard .page-content .header .ion-battery-low:before,body.dashboard .page-content .header .ion-beaker:before,body.dashboard .page-content .header .ion-beer:before,body.dashboard .page-content .header .ion-bluetooth:before,body.dashboard .page-content .header .ion-bonfire:before,body.dashboard .page-content .header .ion-bookmark:before,body.dashboard .page-content .header .ion-bowtie:before,body.dashboard .page-content .header .ion-briefcase:before,body.dashboard .page-content .header .ion-bug:before,body.dashboard .page-content .header .ion-calculator:before,body.dashboard .page-content .header .ion-calendar:before,body.dashboard .page-content .header .ion-camera:before,body.dashboard .page-content .header .ion-card:before,body.dashboard .page-content .header .ion-cash:before,body.dashboard .page-content .header .ion-chatbox-working:before,body.dashboard .page-content .header .ion-chatbox:before,body.dashboard .page-content .header .ion-chatboxes:before,body.dashboard .page-content .header .ion-chatbubble-working:before,body.dashboard .page-content .header .ion-chatbubble:before,body.dashboard .page-content .header .ion-chatbubbles:before,body.dashboard .page-content .header .ion-checkmark-circled:before,body.dashboard .page-content .header .ion-checkmark-round:before,body.dashboard .page-content .header .ion-checkmark:before,body.dashboard .page-content .header .ion-chevron-down:before,body.dashboard .page-content .header .ion-chevron-left:before,body.dashboard .page-content .header .ion-chevron-right:before,body.dashboard .page-content .header .ion-chevron-up:before,body.dashboard .page-content .header .ion-clipboard:before,body.dashboard .page-content .header .ion-clock:before,body.dashboard .page-content .header .ion-close-circled:before,body.dashboard .page-content .header .ion-close-round:before,body.dashboard .page-content .header .ion-close:before,body.dashboard .page-content .header .ion-closed-captioning:before,body.dashboard .page-content .header .ion-cloud:before,body.dashboard .page-content .header .ion-code-download:before,body.dashboard .page-content .header .ion-code-working:before,body.dashboard .page-content .header .ion-code:before,body.dashboard .page-content .header .ion-coffee:before,body.dashboard .page-content .header .ion-compass:before,body.dashboard .page-content .header .ion-compose:before,body.dashboard .page-content .header .ion-connection-bars:before,body.dashboard .page-content .header .ion-contrast:before,body.dashboard .page-content .header .ion-crop:before,body.dashboard .page-content .header .ion-cube:before,body.dashboard .page-content .header .ion-disc:before,body.dashboard .page-content .header .ion-document-text:before,body.dashboard .page-content .header .ion-document:before,body.dashboard .page-content .header .ion-drag:before,body.dashboard .page-content .header .ion-earth:before,body.dashboard .page-content .header .ion-easel:before,body.dashboard .page-content .header .ion-edit:before,body.dashboard .page-content .header .ion-egg:before,body.dashboard .page-content .header .ion-eject:before,body.dashboard .page-content .header .ion-email-unread:before,body.dashboard .page-content .header .ion-email:before,body.dashboard .page-content .header .ion-erlenmeyer-flask-bubbles:before,body.dashboard .page-content .header .ion-erlenmeyer-flask:before,body.dashboard .page-content .header .ion-eye-disabled:before,body.dashboard .page-content .header .ion-eye:before,body.dashboard .page-content .header .ion-female:before,body.dashboard .page-content .header .ion-filing:before,body.dashboard .page-content .header .ion-film-marker:before,body.dashboard .page-content .header .ion-fireball:before,body.dashboard .page-content .header .ion-flag:before,body.dashboard .page-content .header .ion-flame:before,body.dashboard .page-content .header .ion-flash-off:before,body.dashboard .page-content .header .ion-flash:before,body.dashboard .page-content .header .ion-folder:before,body.dashboard .page-content .header .ion-fork-repo:before,body.dashboard .page-content .header .ion-fork:before,body.dashboard .page-content .header .ion-forward:before,body.dashboard .page-content .header .ion-funnel:before,body.dashboard .page-content .header .ion-gear-a:before,body.dashboard .page-content .header .ion-gear-b:before,body.dashboard .page-content .header .ion-grid:before,body.dashboard .page-content .header .ion-hammer:before,body.dashboard .page-content .header .ion-happy-outline:before,body.dashboard .page-content .header .ion-happy:before,body.dashboard .page-content .header .ion-headphone:before,body.dashboard .page-content .header .ion-heart-broken:before,body.dashboard .page-content .header .ion-heart:before,body.dashboard .page-content .header .ion-help-buoy:before,body.dashboard .page-content .header .ion-help-circled:before,body.dashboard .page-content .header .ion-help:before,body.dashboard .page-content .header .ion-home:before,body.dashboard .page-content .header .ion-icecream:before,body.dashboard .page-content .header .ion-image:before,body.dashboard .page-content .header .ion-images:before,body.dashboard .page-content .header .ion-information-circled:before,body.dashboard .page-content .header .ion-information:before,body.dashboard .page-content .header .ion-ionic:before,body.dashboard .page-content .header .ion-ios-alarm-outline:before,body.dashboard .page-content .header .ion-ios-alarm:before,body.dashboard .page-content .header .ion-ios-albums-outline:before,body.dashboard .page-content .header .ion-ios-albums:before,body.dashboard .page-content .header .ion-ios-americanfootball-outline:before,body.dashboard .page-content .header .ion-ios-americanfootball:before,body.dashboard .page-content .header .ion-ios-analytics-outline:before,body.dashboard .page-content .header .ion-ios-analytics:before,body.dashboard .page-content .header .ion-ios-arrow-back:before,body.dashboard .page-content .header .ion-ios-arrow-down:before,body.dashboard .page-content .header .ion-ios-arrow-forward:before,body.dashboard .page-content .header .ion-ios-arrow-left:before,body.dashboard .page-content .header .ion-ios-arrow-right:before,body.dashboard .page-content .header .ion-ios-arrow-thin-down:before,body.dashboard .page-content .header .ion-ios-arrow-thin-left:before,body.dashboard .page-content .header .ion-ios-arrow-thin-right:before,body.dashboard .page-content .header .ion-ios-arrow-thin-up:before,body.dashboard .page-content .header .ion-ios-arrow-up:before,body.dashboard .page-content .header .ion-ios-at-outline:before,body.dashboard .page-content .header .ion-ios-at:before,body.dashboard .page-content .header .ion-ios-barcode-outline:before,body.dashboard .page-content .header .ion-ios-barcode:before,body.dashboard .page-content .header .ion-ios-baseball-outline:before,body.dashboard .page-content .header .ion-ios-baseball:before,body.dashboard .page-content .header .ion-ios-basketball-outline:before,body.dashboard .page-content .header .ion-ios-basketball:before,body.dashboard .page-content .header .ion-ios-bell-outline:before,body.dashboard .page-content .header .ion-ios-bell:before,body.dashboard .page-content .header .ion-ios-body-outline:before,body.dashboard .page-content .header .ion-ios-body:before,body.dashboard .page-content .header .ion-ios-bolt-outline:before,body.dashboard .page-content .header .ion-ios-bolt:before,body.dashboard .page-content .header .ion-ios-book-outline:before,body.dashboard .page-content .header .ion-ios-book:before,body.dashboard .page-content .header .ion-ios-bookmarks-outline:before,body.dashboard .page-content .header .ion-ios-bookmarks:before,body.dashboard .page-content .header .ion-ios-box-outline:before,body.dashboard .page-content .header .ion-ios-box:before,body.dashboard .page-content .header .ion-ios-briefcase-outline:before,body.dashboard .page-content .header .ion-ios-briefcase:before,body.dashboard .page-content .header .ion-ios-browsers-outline:before,body.dashboard .page-content .header .ion-ios-browsers:before,body.dashboard .page-content .header .ion-ios-calculator-outline:before,body.dashboard .page-content .header .ion-ios-calculator:before,body.dashboard .page-content .header .ion-ios-calendar-outline:before,body.dashboard .page-content .header .ion-ios-calendar:before,body.dashboard .page-content .header .ion-ios-camera-outline:before,body.dashboard .page-content .header .ion-ios-camera:before,body.dashboard .page-content .header .ion-ios-cart-outline:before,body.dashboard .page-content .header .ion-ios-cart:before,body.dashboard .page-content .header .ion-ios-chatboxes-outline:before,body.dashboard .page-content .header .ion-ios-chatboxes:before,body.dashboard .page-content .header .ion-ios-chatbubble-outline:before,body.dashboard .page-content .header .ion-ios-chatbubble:before,body.dashboard .page-content .header .ion-ios-checkmark-empty:before,body.dashboard .page-content .header .ion-ios-checkmark-outline:before,body.dashboard .page-content .header .ion-ios-checkmark:before,body.dashboard .page-content .header .ion-ios-circle-filled:before,body.dashboard .page-content .header .ion-ios-circle-outline:before,body.dashboard .page-content .header .ion-ios-clock-outline:before,body.dashboard .page-content .header .ion-ios-clock:before,body.dashboard .page-content .header .ion-ios-close-empty:before,body.dashboard .page-content .header .ion-ios-close-outline:before,body.dashboard .page-content .header .ion-ios-close:before,body.dashboard .page-content .header .ion-ios-cloud-download-outline:before,body.dashboard .page-content .header .ion-ios-cloud-download:before,body.dashboard .page-content .header .ion-ios-cloud-outline:before,body.dashboard .page-content .header .ion-ios-cloud-upload-outline:before,body.dashboard .page-content .header .ion-ios-cloud-upload:before,body.dashboard .page-content .header .ion-ios-cloud:before,body.dashboard .page-content .header .ion-ios-cloudy-night-outline:before,body.dashboard .page-content .header .ion-ios-cloudy-night:before,body.dashboard .page-content .header .ion-ios-cloudy-outline:before,body.dashboard .page-content .header .ion-ios-cloudy:before,body.dashboard .page-content .header .ion-ios-cog-outline:before,body.dashboard .page-content .header .ion-ios-cog:before,body.dashboard .page-content .header .ion-ios-color-filter-outline:before,body.dashboard .page-content .header .ion-ios-color-filter:before,body.dashboard .page-content .header .ion-ios-color-wand-outline:before,body.dashboard .page-content .header .ion-ios-color-wand:before,body.dashboard .page-content .header .ion-ios-compose-outline:before,body.dashboard .page-content .header .ion-ios-compose:before,body.dashboard .page-content .header .ion-ios-contact-outline:before,body.dashboard .page-content .header .ion-ios-contact:before,body.dashboard .page-content .header .ion-ios-copy-outline:before,body.dashboard .page-content .header .ion-ios-copy:before,body.dashboard .page-content .header .ion-ios-crop-strong:before,body.dashboard .page-content .header .ion-ios-crop:before,body.dashboard .page-content .header .ion-ios-download-outline:before,body.dashboard .page-content .header .ion-ios-download:before,body.dashboard .page-content .header .ion-ios-drag:before,body.dashboard .page-content .header .ion-ios-email-outline:before,body.dashboard .page-content .header .ion-ios-email:before,body.dashboard .page-content .header .ion-ios-eye-outline:before,body.dashboard .page-content .header .ion-ios-eye:before,body.dashboard .page-content .header .ion-ios-fastforward-outline:before,body.dashboard .page-content .header .ion-ios-fastforward:before,body.dashboard .page-content .header .ion-ios-filing-outline:before,body.dashboard .page-content .header .ion-ios-filing:before,body.dashboard .page-content .header .ion-ios-film-outline:before,body.dashboard .page-content .header .ion-ios-film:before,body.dashboard .page-content .header .ion-ios-flag-outline:before,body.dashboard .page-content .header .ion-ios-flag:before,body.dashboard .page-content .header .ion-ios-flame-outline:before,body.dashboard .page-content .header .ion-ios-flame:before,body.dashboard .page-content .header .ion-ios-flask-outline:before,body.dashboard .page-content .header .ion-ios-flask:before,body.dashboard .page-content .header .ion-ios-flower-outline:before,body.dashboard .page-content .header .ion-ios-flower:before,body.dashboard .page-content .header .ion-ios-folder-outline:before,body.dashboard .page-content .header .ion-ios-folder:before,body.dashboard .page-content .header .ion-ios-football-outline:before,body.dashboard .page-content .header .ion-ios-football:before,body.dashboard .page-content .header .ion-ios-game-controller-a-outline:before,body.dashboard .page-content .header .ion-ios-game-controller-a:before,body.dashboard .page-content .header .ion-ios-game-controller-b-outline:before,body.dashboard .page-content .header .ion-ios-game-controller-b:before,body.dashboard .page-content .header .ion-ios-gear-outline:before,body.dashboard .page-content .header .ion-ios-gear:before,body.dashboard .page-content .header .ion-ios-glasses-outline:before,body.dashboard .page-content .header .ion-ios-glasses:before,body.dashboard .page-content .header .ion-ios-grid-view-outline:before,body.dashboard .page-content .header .ion-ios-grid-view:before,body.dashboard .page-content .header .ion-ios-heart-outline:before,body.dashboard .page-content .header .ion-ios-heart:before,body.dashboard .page-content .header .ion-ios-help-empty:before,body.dashboard .page-content .header .ion-ios-help-outline:before,body.dashboard .page-content .header .ion-ios-help:before,body.dashboard .page-content .header .ion-ios-home-outline:before,body.dashboard .page-content .header .ion-ios-home:before,body.dashboard .page-content .header .ion-ios-infinite-outline:before,body.dashboard .page-content .header .ion-ios-infinite:before,body.dashboard .page-content .header .ion-ios-information-empty:before,body.dashboard .page-content .header .ion-ios-information-outline:before,body.dashboard .page-content .header .ion-ios-information:before,body.dashboard .page-content .header .ion-ios-ionic-outline:before,body.dashboard .page-content .header .ion-ios-keypad-outline:before,body.dashboard .page-content .header .ion-ios-keypad:before,body.dashboard .page-content .header .ion-ios-lightbulb-outline:before,body.dashboard .page-content .header .ion-ios-lightbulb:before,body.dashboard .page-content .header .ion-ios-list-outline:before,body.dashboard .page-content .header .ion-ios-list:before,body.dashboard .page-content .header .ion-ios-location-outline:before,body.dashboard .page-content .header .ion-ios-location:before,body.dashboard .page-content .header .ion-ios-locked-outline:before,body.dashboard .page-content .header .ion-ios-locked:before,body.dashboard .page-content .header .ion-ios-loop-strong:before,body.dashboard .page-content .header .ion-ios-loop:before,body.dashboard .page-content .header .ion-ios-medical-outline:before,body.dashboard .page-content .header .ion-ios-medical:before,body.dashboard .page-content .header .ion-ios-medkit-outline:before,body.dashboard .page-content .header .ion-ios-medkit:before,body.dashboard .page-content .header .ion-ios-mic-off:before,body.dashboard .page-content .header .ion-ios-mic-outline:before,body.dashboard .page-content .header .ion-ios-mic:before,body.dashboard .page-content .header .ion-ios-minus-empty:before,body.dashboard .page-content .header .ion-ios-minus-outline:before,body.dashboard .page-content .header .ion-ios-minus:before,body.dashboard .page-content .header .ion-ios-monitor-outline:before,body.dashboard .page-content .header .ion-ios-monitor:before,body.dashboard .page-content .header .ion-ios-moon-outline:before,body.dashboard .page-content .header .ion-ios-moon:before,body.dashboard .page-content .header .ion-ios-more-outline:before,body.dashboard .page-content .header .ion-ios-more:before,body.dashboard .page-content .header .ion-ios-musical-note:before,body.dashboard .page-content .header .ion-ios-musical-notes:before,body.dashboard .page-content .header .ion-ios-navigate-outline:before,body.dashboard .page-content .header .ion-ios-navigate:before,body.dashboard .page-content .header .ion-ios-nutrition-outline:before,body.dashboard .page-content .header .ion-ios-nutrition:before,body.dashboard .page-content .header .ion-ios-paper-outline:before,body.dashboard .page-content .header .ion-ios-paper:before,body.dashboard .page-content .header .ion-ios-paperplane-outline:before,body.dashboard .page-content .header .ion-ios-paperplane:before,body.dashboard .page-content .header .ion-ios-partlysunny-outline:before,body.dashboard .page-content .header .ion-ios-partlysunny:before,body.dashboard .page-content .header .ion-ios-pause-outline:before,body.dashboard .page-content .header .ion-ios-pause:before,body.dashboard .page-content .header .ion-ios-paw-outline:before,body.dashboard .page-content .header .ion-ios-paw:before,body.dashboard .page-content .header .ion-ios-people-outline:before,body.dashboard .page-content .header .ion-ios-people:before,body.dashboard .page-content .header .ion-ios-person-outline:before,body.dashboard .page-content .header .ion-ios-person:before,body.dashboard .page-content .header .ion-ios-personadd-outline:before,body.dashboard .page-content .header .ion-ios-personadd:before,body.dashboard .page-content .header .ion-ios-photos-outline:before,body.dashboard .page-content .header .ion-ios-photos:before,body.dashboard .page-content .header .ion-ios-pie-outline:before,body.dashboard .page-content .header .ion-ios-pie:before,body.dashboard .page-content .header .ion-ios-pint-outline:before,body.dashboard .page-content .header .ion-ios-pint:before,body.dashboard .page-content .header .ion-ios-play-outline:before,body.dashboard .page-content .header .ion-ios-play:before,body.dashboard .page-content .header .ion-ios-plus-empty:before,body.dashboard .page-content .header .ion-ios-plus-outline:before,body.dashboard .page-content .header .ion-ios-plus:before,body.dashboard .page-content .header .ion-ios-pricetag-outline:before,body.dashboard .page-content .header .ion-ios-pricetag:before,body.dashboard .page-content .header .ion-ios-pricetags-outline:before,body.dashboard .page-content .header .ion-ios-pricetags:before,body.dashboard .page-content .header .ion-ios-printer-outline:before,body.dashboard .page-content .header .ion-ios-printer:before,body.dashboard .page-content .header .ion-ios-pulse-strong:before,body.dashboard .page-content .header .ion-ios-pulse:before,body.dashboard .page-content .header .ion-ios-rainy-outline:before,body.dashboard .page-content .header .ion-ios-rainy:before,body.dashboard .page-content .header .ion-ios-recording-outline:before,body.dashboard .page-content .header .ion-ios-recording:before,body.dashboard .page-content .header .ion-ios-redo-outline:before,body.dashboard .page-content .header .ion-ios-redo:before,body.dashboard .page-content .header .ion-ios-refresh-empty:before,body.dashboard .page-content .header .ion-ios-refresh-outline:before,body.dashboard .page-content .header .ion-ios-refresh:before,body.dashboard .page-content .header .ion-ios-reload:before,body.dashboard .page-content .header .ion-ios-reverse-camera-outline:before,body.dashboard .page-content .header .ion-ios-reverse-camera:before,body.dashboard .page-content .header .ion-ios-rewind-outline:before,body.dashboard .page-content .header .ion-ios-rewind:before,body.dashboard .page-content .header .ion-ios-rose-outline:before,body.dashboard .page-content .header .ion-ios-rose:before,body.dashboard .page-content .header .ion-ios-search-strong:before,body.dashboard .page-content .header .ion-ios-search:before,body.dashboard .page-content .header .ion-ios-settings-strong:before,body.dashboard .page-content .header .ion-ios-settings:before,body.dashboard .page-content .header .ion-ios-shuffle-strong:before,body.dashboard .page-content .header .ion-ios-shuffle:before,body.dashboard .page-content .header .ion-ios-skipbackward-outline:before,body.dashboard .page-content .header .ion-ios-skipbackward:before,body.dashboard .page-content .header .ion-ios-skipforward-outline:before,body.dashboard .page-content .header .ion-ios-skipforward:before,body.dashboard .page-content .header .ion-ios-snowy:before,body.dashboard .page-content .header .ion-ios-speedometer-outline:before,body.dashboard .page-content .header .ion-ios-speedometer:before,body.dashboard .page-content .header .ion-ios-star-half:before,body.dashboard .page-content .header .ion-ios-star-outline:before,body.dashboard .page-content .header .ion-ios-star:before,body.dashboard .page-content .header .ion-ios-stopwatch-outline:before,body.dashboard .page-content .header .ion-ios-stopwatch:before,body.dashboard .page-content .header .ion-ios-sunny-outline:before,body.dashboard .page-content .header .ion-ios-sunny:before,body.dashboard .page-content .header .ion-ios-telephone-outline:before,body.dashboard .page-content .header .ion-ios-telephone:before,body.dashboard .page-content .header .ion-ios-tennisball-outline:before,body.dashboard .page-content .header .ion-ios-tennisball:before,body.dashboard .page-content .header .ion-ios-thunderstorm-outline:before,body.dashboard .page-content .header .ion-ios-thunderstorm:before,body.dashboard .page-content .header .ion-ios-time-outline:before,body.dashboard .page-content .header .ion-ios-time:before,body.dashboard .page-content .header .ion-ios-timer-outline:before,body.dashboard .page-content .header .ion-ios-timer:before,body.dashboard .page-content .header .ion-ios-toggle-outline:before,body.dashboard .page-content .header .ion-ios-toggle:before,body.dashboard .page-content .header .ion-ios-trash-outline:before,body.dashboard .page-content .header .ion-ios-trash:before,body.dashboard .page-content .header .ion-ios-undo-outline:before,body.dashboard .page-content .header .ion-ios-undo:before,body.dashboard .page-content .header .ion-ios-unlocked-outline:before,body.dashboard .page-content .header .ion-ios-unlocked:before,body.dashboard .page-content .header .ion-ios-upload-outline:before,body.dashboard .page-content .header .ion-ios-upload:before,body.dashboard .page-content .header .ion-ios-videocam-outline:before,body.dashboard .page-content .header .ion-ios-videocam:before,body.dashboard .page-content .header .ion-ios-volume-high:before,body.dashboard .page-content .header .ion-ios-volume-low:before,body.dashboard .page-content .header .ion-ios-wineglass-outline:before,body.dashboard .page-content .header .ion-ios-wineglass:before,body.dashboard .page-content .header .ion-ios-world-outline:before,body.dashboard .page-content .header .ion-ios-world:before,body.dashboard .page-content .header .ion-ipad:before,body.dashboard .page-content .header .ion-iphone:before,body.dashboard .page-content .header .ion-ipod:before,body.dashboard .page-content .header .ion-jet:before,body.dashboard .page-content .header .ion-key:before,body.dashboard .page-content .header .ion-knife:before,body.dashboard .page-content .header .ion-laptop:before,body.dashboard .page-content .header .ion-leaf:before,body.dashboard .page-content .header .ion-levels:before,body.dashboard .page-content .header .ion-lightbulb:before,body.dashboard .page-content .header .ion-link:before,body.dashboard .page-content .header .ion-load-a:before,body.dashboard .page-content .header .ion-load-b:before,body.dashboard .page-content .header .ion-load-c:before,body.dashboard .page-content .header .ion-load-d:before,body.dashboard .page-content .header .ion-location:before,body.dashboard .page-content .header .ion-lock-combination:before,body.dashboard .page-content .header .ion-locked:before,body.dashboard .page-content .header .ion-log-in:before,body.dashboard .page-content .header .ion-log-out:before,body.dashboard .page-content .header .ion-loop:before,body.dashboard .page-content .header .ion-magnet:before,body.dashboard .page-content .header .ion-male:before,body.dashboard .page-content .header .ion-man:before,body.dashboard .page-content .header .ion-map:before,body.dashboard .page-content .header .ion-medkit:before,body.dashboard .page-content .header .ion-merge:before,body.dashboard .page-content .header .ion-mic-a:before,body.dashboard .page-content .header .ion-mic-b:before,body.dashboard .page-content .header .ion-mic-c:before,body.dashboard .page-content .header .ion-minus-circled:before,body.dashboard .page-content .header .ion-minus-round:before,body.dashboard .page-content .header .ion-minus:before,body.dashboard .page-content .header .ion-model-s:before,body.dashboard .page-content .header .ion-monitor:before,body.dashboard .page-content .header .ion-more:before,body.dashboard .page-content .header .ion-mouse:before,body.dashboard .page-content .header .ion-music-note:before,body.dashboard .page-content .header .ion-navicon-round:before,body.dashboard .page-content .header .ion-navicon:before,body.dashboard .page-content .header .ion-navigate:before,body.dashboard .page-content .header .ion-network:before,body.dashboard .page-content .header .ion-no-smoking:before,body.dashboard .page-content .header .ion-nuclear:before,body.dashboard .page-content .header .ion-outlet:before,body.dashboard .page-content .header .ion-paintbrush:before,body.dashboard .page-content .header .ion-paintbucket:before,body.dashboard .page-content .header .ion-paper-airplane:before,body.dashboard .page-content .header .ion-paperclip:before,body.dashboard .page-content .header .ion-pause:before,body.dashboard .page-content .header .ion-person-add:before,body.dashboard .page-content .header .ion-person-stalker:before,body.dashboard .page-content .header .ion-person:before,body.dashboard .page-content .header .ion-pie-graph:before,body.dashboard .page-content .header .ion-pin:before,body.dashboard .page-content .header .ion-pinpoint:before,body.dashboard .page-content .header .ion-pizza:before,body.dashboard .page-content .header .ion-plane:before,body.dashboard .page-content .header .ion-planet:before,body.dashboard .page-content .header .ion-play:before,body.dashboard .page-content .header .ion-playstation:before,body.dashboard .page-content .header .ion-plus-circled:before,body.dashboard .page-content .header .ion-plus-round:before,body.dashboard .page-content .header .ion-plus:before,body.dashboard .page-content .header .ion-podium:before,body.dashboard .page-content .header .ion-pound:before,body.dashboard .page-content .header .ion-power:before,body.dashboard .page-content .header .ion-pricetag:before,body.dashboard .page-content .header .ion-pricetags:before,body.dashboard .page-content .header .ion-printer:before,body.dashboard .page-content .header .ion-pull-request:before,body.dashboard .page-content .header .ion-qr-scanner:before,body.dashboard .page-content .header .ion-quote:before,body.dashboard .page-content .header .ion-radio-waves:before,body.dashboard .page-content .header .ion-record:before,body.dashboard .page-content .header .ion-refresh:before,body.dashboard .page-content .header .ion-reply-all:before,body.dashboard .page-content .header .ion-reply:before,body.dashboard .page-content .header .ion-ribbon-a:before,body.dashboard .page-content .header .ion-ribbon-b:before,body.dashboard .page-content .header .ion-sad-outline:before,body.dashboard .page-content .header .ion-sad:before,body.dashboard .page-content .header .ion-scissors:before,body.dashboard .page-content .header .ion-search:before,body.dashboard .page-content .header .ion-settings:before,body.dashboard .page-content .header .ion-share:before,body.dashboard .page-content .header .ion-shuffle:before,body.dashboard .page-content .header .ion-skip-backward:before,body.dashboard .page-content .header .ion-skip-forward:before,body.dashboard .page-content .header .ion-social-android-outline:before,body.dashboard .page-content .header .ion-social-android:before,body.dashboard .page-content .header .ion-social-angular-outline:before,body.dashboard .page-content .header .ion-social-angular:before,body.dashboard .page-content .header .ion-social-apple-outline:before,body.dashboard .page-content .header .ion-social-apple:before,body.dashboard .page-content .header .ion-social-bitcoin-outline:before,body.dashboard .page-content .header .ion-social-bitcoin:before,body.dashboard .page-content .header .ion-social-buffer-outline:before,body.dashboard .page-content .header .ion-social-buffer:before,body.dashboard .page-content .header .ion-social-chrome-outline:before,body.dashboard .page-content .header .ion-social-chrome:before,body.dashboard .page-content .header .ion-social-codepen-outline:before,body.dashboard .page-content .header .ion-social-codepen:before,body.dashboard .page-content .header .ion-social-css3-outline:before,body.dashboard .page-content .header .ion-social-css3:before,body.dashboard .page-content .header .ion-social-designernews-outline:before,body.dashboard .page-content .header .ion-social-designernews:before,body.dashboard .page-content .header .ion-social-dribbble-outline:before,body.dashboard .page-content .header .ion-social-dribbble:before,body.dashboard .page-content .header .ion-social-dropbox-outline:before,body.dashboard .page-content .header .ion-social-dropbox:before,body.dashboard .page-content .header .ion-social-euro-outline:before,body.dashboard .page-content .header .ion-social-euro:before,body.dashboard .page-content .header .ion-social-facebook-outline:before,body.dashboard .page-content .header .ion-social-facebook:before,body.dashboard .page-content .header .ion-social-foursquare-outline:before,body.dashboard .page-content .header .ion-social-foursquare:before,body.dashboard .page-content .header .ion-social-freebsd-devil:before,body.dashboard .page-content .header .ion-social-github-outline:before,body.dashboard .page-content .header .ion-social-github:before,body.dashboard .page-content .header .ion-social-google-outline:before,body.dashboard .page-content .header .ion-social-google:before,body.dashboard .page-content .header .ion-social-googleplus-outline:before,body.dashboard .page-content .header .ion-social-googleplus:before,body.dashboard .page-content .header .ion-social-hackernews-outline:before,body.dashboard .page-content .header .ion-social-hackernews:before,body.dashboard .page-content .header .ion-social-html5-outline:before,body.dashboard .page-content .header .ion-social-html5:before,body.dashboard .page-content .header .ion-social-instagram-outline:before,body.dashboard .page-content .header .ion-social-instagram:before,body.dashboard .page-content .header .ion-social-javascript-outline:before,body.dashboard .page-content .header .ion-social-javascript:before,body.dashboard .page-content .header .ion-social-linkedin-outline:before,body.dashboard .page-content .header .ion-social-linkedin:before,body.dashboard .page-content .header .ion-social-markdown:before,body.dashboard .page-content .header .ion-social-nodejs:before,body.dashboard .page-content .header .ion-social-octocat:before,body.dashboard .page-content .header .ion-social-pinterest-outline:before,body.dashboard .page-content .header .ion-social-pinterest:before,body.dashboard .page-content .header .ion-social-python:before,body.dashboard .page-content .header .ion-social-reddit-outline:before,body.dashboard .page-content .header .ion-social-reddit:before,body.dashboard .page-content .header .ion-social-rss-outline:before,body.dashboard .page-content .header .ion-social-rss:before,body.dashboard .page-content .header .ion-social-sass:before,body.dashboard .page-content .header .ion-social-skype-outline:before,body.dashboard .page-content .header .ion-social-skype:before,body.dashboard .page-content .header .ion-social-snapchat-outline:before,body.dashboard .page-content .header .ion-social-snapchat:before,body.dashboard .page-content .header .ion-social-tumblr-outline:before,body.dashboard .page-content .header .ion-social-tumblr:before,body.dashboard .page-content .header .ion-social-tux:before,body.dashboard .page-content .header .ion-social-twitch-outline:before,body.dashboard .page-content .header .ion-social-twitch:before,body.dashboard .page-content .header .ion-social-twitter-outline:before,body.dashboard .page-content .header .ion-social-twitter:before,body.dashboard .page-content .header .ion-social-usd-outline:before,body.dashboard .page-content .header .ion-social-usd:before,body.dashboard .page-content .header .ion-social-vimeo-outline:before,body.dashboard .page-content .header .ion-social-vimeo:before,body.dashboard .page-content .header .ion-social-whatsapp-outline:before,body.dashboard .page-content .header .ion-social-whatsapp:before,body.dashboard .page-content .header .ion-social-windows-outline:before,body.dashboard .page-content .header .ion-social-windows:before,body.dashboard .page-content .header .ion-social-wordpress-outline:before,body.dashboard .page-content .header .ion-social-wordpress:before,body.dashboard .page-content .header .ion-social-yahoo-outline:before,body.dashboard .page-content .header .ion-social-yahoo:before,body.dashboard .page-content .header .ion-social-yen-outline:before,body.dashboard .page-content .header .ion-social-yen:before,body.dashboard .page-content .header .ion-social-youtube-outline:before,body.dashboard .page-content .header .ion-social-youtube:before,body.dashboard .page-content .header .ion-soup-can-outline:before,body.dashboard .page-content .header .ion-soup-can:before,body.dashboard .page-content .header .ion-speakerphone:before,body.dashboard .page-content .header .ion-speedometer:before,body.dashboard .page-content .header .ion-spoon:before,body.dashboard .page-content .header .ion-star:before,body.dashboard .page-content .header .ion-stats-bars:before,body.dashboard .page-content .header .ion-steam:before,body.dashboard .page-content .header .ion-stop:before,body.dashboard .page-content .header .ion-thermometer:before,body.dashboard .page-content .header .ion-thumbsdown:before,body.dashboard .page-content .header .ion-thumbsup:before,body.dashboard .page-content .header .ion-toggle-filled:before,body.dashboard .page-content .header .ion-toggle:before,body.dashboard .page-content .header .ion-transgender:before,body.dashboard .page-content .header .ion-trash-a:before,body.dashboard .page-content .header .ion-trash-b:before,body.dashboard .page-content .header .ion-trophy:before,body.dashboard .page-content .header .ion-tshirt-outline:before,body.dashboard .page-content .header .ion-tshirt:before,body.dashboard .page-content .header .ion-umbrella:before,body.dashboard .page-content .header .ion-university:before,body.dashboard .page-content .header .ion-unlocked:before,body.dashboard .page-content .header .ion-upload:before,body.dashboard .page-content .header .ion-usb:before,body.dashboard .page-content .header .ion-videocamera:before,body.dashboard .page-content .header .ion-volume-high:before,body.dashboard .page-content .header .ion-volume-low:before,body.dashboard .page-content .header .ion-volume-medium:before,body.dashboard .page-content .header .ion-volume-mute:before,body.dashboard .page-content .header .ion-wand:before,body.dashboard .page-content .header .ion-waterdrop:before,body.dashboard .page-content .header .ion-wifi:before,body.dashboard .page-content .header .ion-wineglass:before,body.dashboard .page-content .header .ion-woman:before,body.dashboard .page-content .header .ion-wrench:before,body.dashboard .page-content .header .ion-xbox:before,body.dashboard .page-content .header .ionicons{margin-right:2px}body.dashboard .page-content .sub-header{font-weight:300;text-transform:uppercase}.swal2-modal h2,body.dashboard .page-content .sub-header a{text-transform:none}body.dashboard .page-content .striped-list .striped-list-item{border-bottom:1px solid #f0f0f0;padding:8px 0}body.dashboard .page-content .drag-handle{cursor:move}body.dashboard .page-content .user-grid .user img{border-radius:5px;margin-bottom:15px;border:0}body.dashboard .page-content .user-grid .user .name{font-weight:600}body.dashboard .page-content .user-grid .user .email{color:#444;margin-top:4px}@media (max-width:767px){body.dashboard .page-content .content-wrapper,body.dashboard .page-content .header,body.dashboard .page-content .header.fixed{padding-left:20px;padding-right:20px}}@media (min-width:768px) and (max-width:991px){body.dashboard .page-content .header.fixed{padding-left:120px}}#welcome-modal .modal-dialog{margin-top:65px}#welcome-modal .modal-content .modal-header{border-bottom:0}#welcome-modal .modal-content .modal-body{padding-bottom:50px}#welcome-modal .modal-content .modal-body header{text-align:center;font-weight:600;font-size:22px;color:#444;margin-bottom:23px}#welcome-modal .modal-content .modal-body p{font-size:13px;color:#555;margin:0 auto;width:80%;text-align:center;line-height:20px}#welcome-modal .modal-content .modal-body .go-dashboard{text-align:center;display:block;margin-top:10px}#welcome-modal .modal-content .modal-body .get-started{margin-top:40px}#welcome-modal .modal-content .modal-body .get-started .col-md-4{text-align:center;padding-bottom:50px}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a{color:#666;display:block;margin-top:12px;font-size:13px}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a i{font-size:38px;color:#6DB81C;display:block}#welcome-modal .modal-content .modal-body .get-started .col-md-4 a:hover{text-decoration:none;color:#999}body.login .form-bg{border-radius:10px;margin:60px auto auto;padding:30px;width:320px;border:1px solid rgba(0,0,0,.1);box-shadow:0 20px 30px rgba(0,0,0,.2);background-color:#fff}body.login .logo{margin-bottom:30px}body.login .logo img{margin:0 auto}body.login .login-input{height:45px}body.login i{font-size:22px}body.login .btn.btn-white{background-color:#fff;-webkit-transition:background-color .5s ease;transition:background-color .5s ease}body.login .btn.btn-white.btn-trans{background-color:transparent;border:1px solid #fff;border-radius:4px;color:#fff}body.login .btn.btn-white.btn-trans:hover{background-color:#fff;color:#7ED321}.setup-page{padding-top:60px}.setup-page .logo{display:block;margin:0 auto 30px}.setup-page .steps{margin:0 auto 20px;border-radius:2px 2px 0 0}.setup-page .steps .step{padding:20px 0;text-align:center;position:relative;font-size:13px}.setup-page .steps .step:not(:last-child):after{content:'';position:absolute;bottom:31px;left:55%;display:block;height:1px;background:#94A1B8;width:100%}.setup-page .steps .step span{width:23px;height:23px;display:block;position:relative;margin:13px auto 0;border-radius:25px;background:#f0f3f4;border:1px solid #94A1B8;-webkit-transition:all .2s linear;transition:all .2s linear}.setup-page .steps .step.active span{background:#7ED321}.setup-page .setup-success{text-align:center}.setup-page .setup-success i{font-size:47px}.setup-page .setup-success h3{margin-top:25px;font-size:21px;color:#556579}.setup-page .setup-success .btn{margin-top:40px}.component-inline-update{padding-top:8px}.component-inline-update label{display:initial;font-weight:400}.component-group-name{font-size:18px;padding-left:10px}.component-group-other{font-size:18px}.stats-widget{text-align:center;margin-bottom:30px;background-color:#fff;border:1px solid #eee}.stats-widget.full-stats-block .stats-bottom{border-top:0!important;color:#fff;position:relative;margin-top:-1px;z-index:1000}.stats-widget .stats-top{padding:20px}.stats-widget .stats-top>span{display:block;text-align:center}.stats-widget .stats-top>span.stats-value{font-size:24px;font-weight:400}.stats-widget .stats-top>span.stats-label{padding-top:5px;font-size:14px;font-weight:300;color:#777}.stats-widget .stats-body,.stats-widget .stats-chart{margin-top:-20px;padding-top:10px}.stats-widget .stats-body .list-group{border:none;padding-bottom:0;margin-bottom:0}.stats-widget .stats-body .list-group .list-group-item{border-right:none;border-left:none;border-color:#eee}.stats-widget .stats-body .list-group .list-group-item:last-child{border-bottom:none}.stats-widget .stats-bottom{border-top:#eee 1px solid;color:#777;padding:12px 10px;text-align:center;background-color:#f9f9f9}.stats-widget .stats-bottom.bg-green{background-color:#7ED321;color:#fff}.stats-widget .stats-bottom.bg-blue{background-color:#3498db;color:#fff}.stats-widget .stats-bottom.bg-red{background-color:#ff6f6f;color:#fff}.stats-widget .stats-bottom.bg-teal{background-color:#0dccc0;color:#fff}.minicolors{position:relative}.minicolors-sprite{background-image:url(data:image/png;base64,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)}.minicolors-no-data-uris .minicolors-sprite{background-image:url(jquery.minicolors.png)}.minicolors-swatch{position:absolute;background-position:-80px 0;border:1px solid #ccc;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors input[type=hidden]+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors input[type=hidden][disabled]+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;height:152px;background:#fff;border:1px solid #CCC;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;display:none}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-opacity-slider,.minicolors-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider,.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:1px solid #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:2px solid #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:1px solid #000;margin-top:-2px}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}.minicolors-theme-default .minicolors-swatch{top:5px;left:5px;width:18px;height:18px}.minicolors-theme-default.minicolors-position-right .minicolors-swatch{left:auto;right:5px}.minicolors-theme-default.minicolors{width:auto;display:inline-block}.minicolors-theme-default .minicolors-input{height:20px;width:auto;display:inline-block;padding-left:26px}.minicolors-theme-default.minicolors-position-right .minicolors-input{padding-right:26px;padding-left:inherit}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:3px;left:3px;width:28px;height:28px;border-radius:3px}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch{left:auto;right:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:44px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}.minicolors-theme-bootstrap .input-group-lg>.input-group-btn>.minicolors-input.btn+.minicolors-swatch,.minicolors-theme-bootstrap .input-group-lg>.minicolors-input.form-control+.minicolors-swatch,.minicolors-theme-bootstrap .input-group-lg>.minicolors-input.input-group-addon+.minicolors-swatch,.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}.minicolors-theme-bootstrap .input-group-sm>.input-group-btn>.minicolors-input.btn+.minicolors-swatch,.minicolors-theme-bootstrap .input-group-sm>.minicolors-input.form-control+.minicolors-swatch,.minicolors-theme-bootstrap .input-group-sm>.minicolors-input.input-group-addon+.minicolors-swatch,.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format("woff")}.markdown-body{color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#183691}.markdown-body .pl-v{color:#ed6a43}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{color:#f8f8f8;background-color:#b52a1d}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#63a35c}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#1d3e81}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{font-style:italic;color:#333}.markdown-body .pl-mb{font-weight:700;color:#333}.markdown-body .pl-md{color:#bd2c00;background-color:#ffecec}.markdown-body .pl-mi1{color:#55a532;background-color:#eaffea}.markdown-body .pl-mdr{font-weight:700;color:#795da3}.markdown-body .pl-mo{color:#1d3e81}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body hr::after,.markdown-body hr::before,.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#4078c0;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{outline-width:0;text-decoration:underline}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body input{font:inherit;margin:0;overflow:visible;font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body strong{font-weight:600}.markdown-body td,.markdown-body th{padding:0}.markdown-body blockquote{margin:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}.markdown-body pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;word-wrap:normal}.markdown-body input{-webkit-font-feature-settings:"liga" 0;font-feature-settings:"liga" 0}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:0}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{overflow:hidden;background:#e7e7e7;height:.25em;padding:0;margin:24px 0;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code::after,.markdown-body code::before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code::after,.markdown-body pre code::before{content:normal}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:3px!important}.markdown-body .pl-2{padding-left:6px!important}.markdown-body .pl-3{padding-left:12px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:36px!important}.markdown-body .pl-6{padding-left:48px!important}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.swal2-modal,.swal2-overlay{position:fixed;display:none}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.swal2-overlay{background-color:rgba(0,0,0,.4);left:0;right:0;top:0;bottom:0;z-index:1000}.swal2-modal{background-color:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;border-radius:5px;box-sizing:border-box;text-align:center;left:50%;top:50%;margin-top:-200px;max-height:90%;overflow-x:hidden;overflow-y:auto;z-index:2000}.swal2-modal:focus{outline:0}.swal2-modal.loading{overflow-y:hidden}.swal2-modal h2{color:#575757;font-size:30px;text-align:center;font-weight:600;position:relative;margin:0;padding:0;line-height:60px;display:block}.swal2-modal .swal2-spacer{height:10px;color:transparent;border:0}.swal2-modal button.styled{border:0;border-radius:3px;box-shadow:none;color:#fff;cursor:pointer;font-size:17px;font-weight:500;margin:0 5px;padding:10px 32px}.swal2-modal button.styled:not(.loading)[disabled]{opacity:.4;cursor:no-drop}.swal2-modal button.styled.loading{box-sizing:border-box;border:4px solid transparent;width:40px;height:40px;padding:0;margin:-2px 30px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal button:not(.styled).loading:after{display:inline-block;content:"";margin-left:5px;vertical-align:-1px;height:6px;width:6px;border:3px solid #999;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal .swal2-checkbox input,.swal2-modal .swal2-checkbox span,.swal2-modal .swal2-radio input,.swal2-modal .swal2-radio span{vertical-align:middle}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{font-size:36px;line-height:36px;font-family:serif;position:absolute;top:5px;right:13px;cursor:pointer;color:#cfcfcf;-webkit-transition:all .1s ease;transition:all .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-modal .swal2-content{font-size:18px;text-align:center;font-weight:300;position:relative;float:none;margin:0;padding:0;line-height:normal;color:#555}.swal2-modal .swal2-checkbox,.swal2-modal .swal2-input,.swal2-modal .swal2-radio,.swal2-modal .swal2-range input,.swal2-modal .swal2-range output,.swal2-modal .swal2-select,.swal2-modal .swal2-textarea{margin:20px auto}.swal2-modal .swal2-input:not([type=file]),.swal2-modal .swal2-textarea{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:all .3s;transition:all .3s}.swal2-modal .swal2-input:not([type=file]).error,.swal2-modal .swal2-textarea.error{border-color:#f06e57!important}.swal2-modal .swal2-input:not([type=file]):focus,.swal2-modal .swal2-textarea:focus{outline:0;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.swal2-modal .swal2-input:not([type=file]):focus::-moz-placeholder,.swal2-modal .swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file]):focus:-ms-input-placeholder,.swal2-modal .swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file]):focus::-webkit-input-placeholder,.swal2-modal .swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-modal .swal2-input:not([type=file])::-moz-placeholder,.swal2-modal .swal2-textarea::-moz-placeholder{color:#bdbdbd}.swal2-modal .swal2-input:not([type=file]):-ms-input-placeholder,.swal2-modal .swal2-textarea:-ms-input-placeholder{color:#bdbdbd}.swal2-modal .swal2-input:not([type=file])::-webkit-input-placeholder,.swal2-modal .swal2-textarea::-webkit-input-placeholder{color:#bdbdbd}.swal2-modal .swal2-range input{float:left;padding:0!important;width:80%!important}.swal2-modal .swal2-range output{float:right;font-size:20px;font-weight:600}.swal2-modal .swal2-input:not([type=file]),.swal2-modal .swal2-range input,.swal2-modal .swal2-range output{height:43px;line-height:43px;vertical-align:middle;padding:0 12px}.swal2-modal .swal2-input[type=file]{font-size:20px}.swal2-modal .swal2-input[type=number]{max-width:150px}.swal2-modal .swal2-textarea{height:108px;padding:12px}.swal2-modal .swal2-select{color:#555;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-modal .swal2-radio{border:0}.swal2-modal .swal2-radio label:not(:first-child){margin-left:20px}.swal2-modal .swal2-radio input{margin:0 3px 0 0}.swal2-modal .swal2-checkbox{color:#555}.swal2-modal .swal2-validationerror{background-color:#f1f1f1;margin:0 -20px;overflow:hidden;padding:10px;color:#797979;font-size:16px;font-weight:300;display:none}.swal2-modal .swal2-validationerror::before{content:"!";display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}.swal2-icon.swal2-info,.swal2-icon.swal2-question,.swal2-icon.swal2-warning{font-size:60px;line-height:80px;text-align:center}.swal2-icon{width:80px;height:80px;border:4px solid grey;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;box-sizing:content-box;cursor:default;-webkit-touch-callout:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .x-mark{position:relative;display:block}.swal2-icon.swal2-error .line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error .line.left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error .line.right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#f8bb86}.swal2-icon.swal2-info{font-family:"Open Sans",sans-serif;color:#3fc3ee;border-color:#3fc3ee}.swal2-icon.swal2-question{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#c9dae1;border-color:#c9dae1}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success::after,.swal2-icon.swal2-success::before{content:'';position:absolute;width:60px;height:120px;background:#fff}.swal2-icon.swal2-success::before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success::after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .placeholder{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .fix{width:7px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success .line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success .line.tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success .line.long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{font-weight:600;margin:0 0 20px;padding:0}.swal2-progresssteps li{display:inline-block;position:relative}ul.messenger .messenger-message.messenger-hidden,ul.messenger .messenger-spinner,ul.messenger.messenger-empty{display:none}.swal2-progresssteps .swal2-progresscircle{background:#3085d6;border-radius:2em;color:#fff;height:2em;line-height:2em;text-align:center;width:2em;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle,.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{background:#3085d6;height:.4em;margin:0 -1px;z-index:10}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.show-swal2{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.show-swal2.no-animation{-webkit-animation:none;animation:none}.hide-swal2{-webkit-animation:hideSweetAlert .15s forwards;animation:hideSweetAlert .15s forwards}.hide-swal2.no-animation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.animate-success-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.animate-success-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-icon.swal2-success.animate::after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}@keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}.pulse-warning{-webkit-animation:pulse-warning .75s infinite alternate;animation:pulse-warning .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swal2-modal button{margin-right:8px}ul.messenger,ul.messenger>li{margin:0;padding:0}ul.messenger>li{list-style:none}ul.messenger .messenger-message{overflow:hidden}ul.messenger .messenger-message .messenger-actions a,ul.messenger .messenger-message .messenger-phrase{padding-right:5px}ul.messenger .messenger-message .messenger-actions{float:right}ul.messenger.messenger-fixed .message .messenger-actions,ul.messenger.messenger-fixed.messenger-on-left .messenger-actions,ul.messenger.messenger-fixed.messenger-on-right .messenger-actions{float:left}ul.messenger .messenger-message .messenger-actions a{cursor:pointer;text-decoration:underline}ul.messenger .messenger-message ol,ul.messenger .messenger-message ul{margin:10px 18px 0}ul.messenger.messenger-fixed{position:fixed;z-index:10000}ul.messenger.messenger-fixed .messenger-message{min-width:0;box-sizing:border-box}ul.messenger.messenger-fixed.messenger-on-top{top:20px}ul.messenger.messenger-fixed.messenger-on-bottom{bottom:20px}ul.messenger.messenger-fixed.messenger-on-bottom,ul.messenger.messenger-fixed.messenger-on-top{left:50%;width:600px;margin-left:-300px}@media (max-width:960px){ul.messenger.messenger-fixed.messenger-on-bottom,ul.messenger.messenger-fixed.messenger-on-top{left:10%;width:80%;margin-left:0}}ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right,ul.messenger.messenger-fixed.messenger-on-top.messenger-on-right{right:20px;left:auto}ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left,ul.messenger.messenger-fixed.messenger-on-top.messenger-on-left{left:20px;margin-left:0}ul.messenger.messenger-fixed.messenger-on-left,ul.messenger.messenger-fixed.messenger-on-right{width:350px}@-webkit-keyframes ui-spinner-rotate-right{0%{-webkit-transform:rotate(0)}25%,50%{-webkit-transform:rotate(180deg)}100%,75%{-webkit-transform:rotate(360deg)}}@-webkit-keyframes ui-spinner-rotate-left{0%,25%{-webkit-transform:rotate(0)}50%,75%{-webkit-transform:rotate(180deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes ui-spinner-rotate-right{0%{-webkit-transform:rotate(0);transform:rotate(0)}25%,50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%,75%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ui-spinner-rotate-left{0%,25%{-webkit-transform:rotate(0);transform:rotate(0)}50%,75%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.messenger-spinner{position:relative;border-radius:100%}ul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner{display:block}.messenger-spinner .messenger-spinner-side{width:50%;height:100%;overflow:hidden;position:absolute}.messenger-spinner .messenger-spinner-side .messenger-spinner-fill{border-radius:999px;position:absolute;width:100%;height:100%;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.messenger-spinner .messenger-spinner-side-left{left:0}.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill{left:100%;border-top-left-radius:0;border-bottom-left-radius:0;-webkit-animation-name:ui-spinner-rotate-left;animation-name:ui-spinner-rotate-left;-webkit-transform-origin:0 50%;transform-origin:0 50%}.messenger-spinner .messenger-spinner-side-right{left:50%}.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill{left:-100%;border-top-right-radius:0;border-bottom-right-radius:0;-webkit-animation-name:ui-spinner-rotate-right;animation-name:ui-spinner-rotate-right;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}ul.messenger-theme-air{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;font-family:Raleway,sans-serif}ul.messenger-theme-air .messenger-message{-webkit-transition:background-color .4s;transition:background-color .4s;border-radius:5px;box-shadow:inset 0 0 0 1px #fff,inset 0 2px #fff,0 0 0 1px rgba(0,0,0,.1),0 1px rgba(0,0,0,.2);border:0;background-color:#fff;position:relative;margin-bottom:1em;font-size:13px;color:#666;font-weight:500;padding:10px 30px 11px 46px}ul.messenger-theme-air .messenger-message:hover{background-color:#fff}ul.messenger-theme-air .messenger-message .messenger-close{position:absolute;top:0;right:0;color:#888;opacity:1;font-weight:700;display:block;font-size:20px;line-height:20px;padding:8px 10px 7px 7px;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}ul.messenger-theme-air .messenger-message .messenger-close:hover{color:#444}ul.messenger-theme-air .messenger-message .messenger-close:active{color:#222}ul.messenger-theme-air .messenger-message .messenger-actions{float:none;margin-top:10px}ul.messenger-theme-air .messenger-message .messenger-actions a{box-shadow:0 0 0 1px rgba(0,0,0,.1),inset 0 1px rgba(255,255,255,.05);border-radius:4px;text-decoration:none;display:inline-block;color:#888;margin-right:10px;padding:3px 10px 5px;text-transform:capitalize}ul.messenger-theme-air .messenger-message .messenger-actions a:hover{box-shadow:0 0 0 1px rgba(0,0,0,.1),inset 0 1px rgba(255,255,255,.15);color:#444}ul.messenger-theme-air .messenger-message .messenger-actions a:active{box-shadow:0 0 0 1px rgba(0,0,0,.18),inset 0 1px rgba(0,0,0,.05);background:rgba(0,0,0,.04);color:#444}ul.messenger-theme-air .messenger-message .messenger-actions .messenger-phrase{display:none}ul.messenger-theme-air .messenger-message .messenger-message-inner:before{box-shadow:inset 0 1px 3px rgba(0,0,0,.3);border-radius:50%;position:absolute;left:17px;display:block;content:" ";top:50%;margin-top:-8px;height:13px;width:13px;z-index:20}ul.messenger-theme-air .messenger-message.alert-success .messenger-message-inner:before{background-color:#5fca4a}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner{width:24px;height:24px;background:0 0}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill{background:#dd6a45;-webkit-animation-duration:20s;animation-duration:20s;opacity:1}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after{content:"";background:#fff;position:absolute;width:19px;height:19px;border-radius:50%;top:2px;left:2px;display:block}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner{width:24px;height:24px;background:0 0}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill{background:#dd6a45;-webkit-animation-duration:600s;animation-duration:600s;opacity:1}ul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after{content:"";background:#fff;position:absolute;width:19px;height:19px;border-radius:50%;top:2px;left:2px;display:block}ul.messenger-theme-air .messenger-message.alert-error .messenger-message-inner:before{background-color:#dd6a45}ul.messenger-theme-air .messenger-message.alert-info .messenger-message-inner:before{background-color:#61c4b8}ul.messenger-theme-air .messenger-spinner{display:block;position:absolute;left:12px;top:50%;margin-top:-13px;height:24px;width:24px;z-index:10}/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT -Copyright (c) 2015 Daniel Eden -*/.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:3px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e8e8e8}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#999}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#e8e8e8;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#999}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#7ED321;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#7ED321;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:3px}.bootstrap-datetimepicker-widget table td span:hover{background:#e8e8e8}.bootstrap-datetimepicker-widget table td span.active{background-color:#7ED321;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#999}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.strengthify-wrapper>*{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out}.strengthify-wrapper{position:relative}.strengthify-bg,.strengthify-container,.strengthify-separator,.strengthify-wrapper{height:8px}.strengthify-bg,.strengthify-container{display:block;position:absolute;width:100%}.strengthify-bg{background-color:#eee}.strengthify-separator{display:inline-block;position:absolute;background-color:#fff;width:2px;z-index:10}.password-bad{background-color:#ff6f6f}.password-medium{background-color:#F7CA18}.password-good{background-color:#7ED321}.sortable-chosen{border:1px solid #e8e8e8!important;background-color:#f0f3f4} \ No newline at end of file diff --git a/public/build/dist/css/dashboard.css.map b/public/build/dist/css/dashboard.css.map deleted file mode 100644 index 43260b49baba..000000000000 --- a/public/build/dist/css/dashboard.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["dashboard.css","../../../node_modules/ionicons/scss/ionicons.scss","../../../node_modules/ionicons/scss/_ionicons-font.scss","../../../node_modules/ionicons/scss/_ionicons-variables.scss","../../../node_modules/ionicons/scss/_ionicons-icons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss","modules/_variables.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss","_palette.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-text.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss","../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss","_vendors.scss","_helpers.scss","modules/_tabs.scss","modules/_forms.scss","modules/_well.scss","modules/_alerts.scss","modules/_panels.scss","modules/_btns.scss","modules/_pager.scss","_errors.scss","dashboard/partials/_base.scss","dashboard/partials/_wrapper.scss","dashboard/partials/_navbar.scss","dashboard/partials/_sidebar.scss","dashboard/partials/_content.scss","dashboard/partials/_modals.scss","dashboard/pages/_login.scss","dashboard/pages/_setup.scss","dashboard/pages/_dashboard.scss","modules/_stats.scss","plugins/_jquery.minicolors.scss","plugins/_github-markdown.scss","../../../node_modules/sweetalert2/src/sweetalert2.scss","plugins/_sweetalert.scss","plugins/_messenger.scss","../../../node_modules/animate-sass/helpers/_base.scss","../../../node_modules/animate-sass/helpers/_mixins.scss","../../../node_modules/animate-sass/helpers/_settings.scss","plugins/_animate.scss","plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss","plugins/_password-strength.scss","plugins/_sortable.scss"],"names":[],"mappings":"AAAA,iBAAiB;ACCjB;;;;;;;;;;EAUE;ACRF;EACC,wBCAgC;EDChC,gDAAO;EACP,gRAGkF;EAClF,oBAAoB;EACpB,mBAAmB,EAAA;;AAGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EACE,sBAAsB;EACtB,wBCZ+B;EDa/B,YAAY;EACZ,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,eAAe;EACf,oCAAoC;EACpC,mCAAmC,EACpC;;AEpBD;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2C,EAAO;;ACDpD;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEwC,EAAO;;ACDjD;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE2C,EAAO;;ACDpD;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEe,EAAO;;ACDxB;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEyC,EAAO;;ACDlD;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0C,EAAO;;ACDnD;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEuC,EAAO;;ACDhD;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEiB,EAAO;;ACD1B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEsB,EAAO;;ACD/B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEgB,EAAO;;ACDzB;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEmB,EAAO;;ACD5B;EAAE,aDEqB,EAAO;;ACD9B;EAAE,aDEkB,EAAO;;ACD3B;EAAE,aDEoB,EAAO;;ACD7B;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDEwC,EAAO;;ACDjD;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEgC,EAAO;;ACDzC;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE8B,EAAO;;ACDvC;EAAE,aDEsC,EAAO;;ACD/C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDE6B,EAAO;;ACDtC;EAAE,aDEqC,EAAO;;ACD9C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEwB,EAAO;;ACDjC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE0B,EAAO;;ACDnC;EAAE,aDEkC,EAAO;;ACD3C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aDEmC,EAAO;;ACD5C;EAAE,aDEuB,EAAO;;ACDhC;EAAE,aDE+B,EAAO;;ACDxC;EAAE,aDEyB,EAAO;;ACDlC;EAAE,aDEiC,EAAO;;ACD1C;EAAE,aDE4B,EAAO;;ACDrC;EAAE,aDEoC,EAAO;;ACD7C;EAAE,aDE2B,EAAO;;ACDpC;EAAE,aD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B+HiC;IkB9HjC,0BAAwB;IACpB,sBAAoB,EASzB;IDgCH;;;;MCpCM,YlBwH+B;MkBvH/B,0BAAwB;MACpB,sBAAoB,EACzB;EDiCL;;IC5BI,uBAAuB,EACxB;ED2BH;;;;ICpBM,uBlByG+B;IkBxG3B,mBlByG2B,EkBxGhC;EAGH;IACE,YlBmGiC;IkBlGjC,uBlBiGiC,EkBhGlC;;ADeH;EChEE,YlBqJmC;EkBpJnC,0BjBNgC;EiBOhC,sBlBqJqC,EiBrFtC;EAFD;IC1DI,YlB+IiC;IkB9IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuDH;ICrDI,YlB0IiC;IkBzIjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkDH;;IC9CI,YlBmIiC;IkBlIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmCH;;;;MCvCM,YlB4H+B;MkB3H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoCL;;IC/BI,uBAAuB,EACxB;ED8BH;;;;ICvBM,0BjB9C4B;IiB+CxB,sBlB6G6B,EkB5GlC;EAGH;IACE,ejBpD8B;IiBqD9B,uBlBqGiC,EkBpGlC;;ADmBH;ECpEE,YlByJmC;EkBxJnC,0BEFsB;EFGtB,sBlByJqC,EiBrFtC;EAFD;IC9DI,YlBmJiC;IkBlJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED2DH;ICzDI,YlB8IiC;IkB7IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDsDH;;IClDI,YlBuIiC;IkBtIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDuCH;;;;MC3CM,YlBgI+B;MkB/H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDwCL;;ICnCI,uBAAuB,EACxB;EDkCH;;;;IC3BM,0BE1CkB;IF2Cd,sBlBiH6B,EkBhHlC;EAGH;IACE,eEhDoB;IFiDpB,uBlByGiC,EkBxGlC;;ADuBH;ECxEE,YlB6JmC;EkB5JnC,0BEcmB;EFbnB,sBlB6JqC,EiBrFtC;EAFD;IClEI,YlBuJiC;IkBtJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED+DH;IC7DI,YlBkJiC;IkBjJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED0DH;;ICtDI,YlB2IiC;IkB1IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID2CH;;;;MC/CM,YlBoI+B;MkBnI/B,0BAAwB;MACpB,sBAAoB,EACzB;ED4CL;;ICvCI,uBAAuB,EACxB;EDsCH;;;;IC/BM,0BE1Be;IF2BX,sBlBqH6B,EkBpHlC;EAGH;IACE,eEhCiB;IFiCjB,uBlB6GiC,EkB5GlC;;AD2BH;EC5EE,YlBiKmC;EkBhKnC,0BEgCqB;EF/BrB,sBlBiKqC,EiBrFtC;EAFD;ICtEI,YlB2JiC;IkB1JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDmEH;ICjEI,YlBsJiC;IkBrJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED8DH;;IC1DI,YlB+IiC;IkB9IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID+CH;;;;MCnDM,YlBwI+B;MkBvI/B,0BAAwB;MACpB,sBAAoB,EACzB;EDgDL;;IC3CI,uBAAuB,EACxB;ED0CH;;;;ICnCM,0BERiB;IFSb,sBlByH6B,EkBxHlC;EAGH;IACE,eEdmB;IFenB,uBlBiHiC,EkBhHlC;;AD+BH;EChFE,YlBqKmC;EkBpKnC,0BEiBkB;EFhBlB,sBlBqKqC,EiBrFtC;EAFD;IC1EI,YlB+JiC;IkB9JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuEH;ICrEI,YlB0JiC;IkBzJjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkEH;;IC9DI,YlBmJiC;IkBlJjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmDH;;;;MCvDM,YlB4I+B;MkB3I/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoDL;;IC/CI,uBAAuB,EACxB;ED8CH;;;;ICvCM,0BEvBc;IFwBV,sBlB6H6B,EkB5HlC;EAGH;IACE,eE7BgB;IF8BhB,uBlBqHiC,EkBpHlC;;ADwCH;EACE,ehB/FgC;EgBgGhC,oBAAoB;EACpB,iBAAiB,EA8BlB;EAjCD;;IAUI,8BAA8B;IlBpCxB,iBkBqCkB,EACzB;EAZH;IAiBI,0BAA0B,EAC3B;EAlBH;IAqBI,ejBhF0B;IiBiF1B,2BjB/E6B;IiBgF7B,8BAA8B,EAC/B;EAxBH;;;IA6BM,ejB9G0B;IiB+G1B,sBAAsB,EACvB;;AAQ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A4B;EAC5B,oBAA+B,EDuWhC;EALC;IAHF;MAII,YAAY;MACZ,kB7BIoC;M6BHpC,mB7BGoC,E6BDvC,EAAA;;AAWD;EACE;IACE,uBAAuB,EACxB;EACD;IACE,wBAAwB;IAC1B,oB7BhBsC,E6BqBrC;IAPD;MAKI,gBAAgB,EACjB,EAAA;;AASL;EACE,0B7BzBwC;E6B0BxC,sB7BzBuC,E6ByJxC;EAlID;IAKI,Y7BzB2C,E6B+B5C;IAXH;MAQM,e7BlB2C;M6BmB3C,8B7BlBgD,E6BmBjD;EAVL;IAcI,Y7BvCmC,E6BwCpC;EAfH;IAmBM,Y7BvCyC,E6B8C1C;IA1BL;MAuBQ,Y7B1CuC;M6B2CvC,8B7B1C8C,E6B2C/C;EAzBP;IA+BQ,Y7BhDuC;I6BiDvC,0B7BhDyC,E6BiD1C;EAjCP;IAuCQ,Y7BtDuC;I6BuDvC,8B7BtD8C,E6BuD/C;EAzCP;IA8CI,mB7BlD2C,E6B0D5C;IAtDH;MAiDM,uB7BvDyC,E6BwD1C;IAlDL;MAoDM,uB7BzDyC,E6B0D1C;EArDL;;IA0DI,sB7BjFqC,E6BkFtC;EA3DH;IAoEQ,0B7BpFyC;I6BqFzC,Y7BtFuC,E6BuFxC;EAGH;IAzEJ;MA6EU,Y7BjGqC,E6BuGtC;MAnFT;QAgFY,Y7BnGmC;Q6BoGnC,8B7BnG0C,E6BoG3C;IAlFX;MAwFY,Y7BzGmC;M6B0GnC,0B7BzGqC,E6B0GtC;IA1FX;MAgGY,Y7B/GmC;M6BgHnC,8B7B/G0C,E6BgH3C,EAAA;EAlGX;IA8GI,Y7BlI2C,E6BsI5C;IAlHH;MAgHM,Y7BnIyC,E6BoI1C;EAjHL;IAqHI,Y7BzI2C,E6BqJ5C;IAjIH;MAwHM,Y7B3IyC,E6B4I1C;IAzHL;;;MA8HQ,Y7B7IuC,E6B8IxC;;AAOP;EACE,uB7BrI8C;E6BsI9C,sB7BrIgD,E6BsQjD;EAnID;IAKI,e7BrI+C,E6B2IhD;IAXH;MAQM,Y7B9H0C;M6B+H1C,8B7B9HiD,E6B+HlD;EAVL;IAcI,e7BnJ+C,E6BoJhD;EAfH;IAmBM,e7BnJ6C,E6B0J9C;IA1BL;MAuBQ,Y7BtJwC;M6BuJxC,8B7BtJ+C,E6BuJhD;EAzBP;IA+BQ,Y7B9JwC;I6B+JxC,0B7B5J0C,E6B6J3C;EAjCP;IAuCQ,Y7BlKwC;I6BmKxC,8B7BlK+C,E6BmKhD;EAzCP;IA+CI,mB7B/J4C,E6BuK7C;IAvDH;MAkDM,uB7BpK0C,E6BqK3C;IAnDL;MAqDM,uB7BtK0C,E6BuK3C;EAtDL;;IA2DI,sBAAoB,EACrB;EA5DH;IAoEQ,0B7BhM0C;I6BiM1C,Y7BpMwC,E6BqMzC;EAGH;IAzEJ;MA6EU,sB7BhNwC,E6BiNzC;IA9ET;MAgFU,0B7BnNwC,E6BoNzC;IAjFT;MAmFU,e7BnNyC,E6ByN1C;MAzFT;QAsFY,Y7BrNoC;Q6BsNpC,8B7BrN2C,E6BsN5C;IAxFX;MA8FY,Y7B7NoC;M6B8NpC,0B7B3NsC,E6B4NvC;IAhGX;MAsGY,Y7BjOoC;M6BkOpC,8B7BjO2C,E6BkO5C,EAAA;EAxGX;IA+GI,e7B/O+C,E6BmPhD;IAnHH;MAiHM,Y7BhP0C,E6BiP3C;EAlHL;IAsHI,e7BtP+C,E6BkQhD;IAlIH;MAyHM,Y7BxP0C,E6ByP3C;IA1HL;;;MA+HQ,Y7B1PwC,E6B2PzC;;AE7oBP;EACE,kB/BqxBkC;E+BpxBlC,oB/B0D6B;E+BzD7B,iBAAiB;EACjB,0B/BoxBqC;E+BnxBrC,mB9BF6B,E8BmB9B;EAtBD;IAQI,sBAAsB,EASvB;IAjBH;MAaM,cAA2C;MAC3C,eAAe;MACf,Y/B2wB8B,E+B1wB/B;EAhBL;IAoBI,e/BX4B,E+BY7B;;ACvBH;EACE,sBAAsB;EACtB,gBAAgB;EAChB,eAA+B;EAC/B,mB/BC6B,E+BmE9B;EAxED;IAOI,gBAAgB,EA0BjB;IAjCH;;MAUM,mBAAmB;MACnB,YAAY;MACZ,kBhCgF0B;MgC/E1B,yBhC+C+B;MgC9C/B,sBAAsB;MACtB,e/BjB4B;M+BkB5B,uBhCobqC;MgCnbrC,uBhCobqC;MgCnbrC,kBAAkB,EACnB;IAnBL;;MAuBQ,eAAe;MNXrB,+BzBP6B;MyBQ1B,4BzBR0B,E+BoBxB;IAzBP;;MNIE,gCzBC6B;MyBA1B,6BzBA0B,E+B0BxB;EA/BP;;;IAuCM,WAAW;IACX,ehCPwB;IgCQxB,0BhC7B0B;IgC8B1B,mBhC+ZqC,EgC9ZtC;E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AClB;;AAjGT;EAsGI,UAAU;EACV,iBAAiB,EAClB;;AASH;EACE,oBhD7J6B,EgDwL9B;EA5BD;IAKI,iBAAiB;IACjB,mB/C3N2B,E+CgO5B;IAXH;MASM,gBAAgB,EACjB;EAVL;IAcI,iBAAiB,EAMlB;IApBH;;MAkBM,2BhD6d4B,EgD5d7B;EAnBL;IAuBI,cAAc,EAIf;IA3BH;MAyBM,8BhDsd4B,EgDrd7B;;AAML;EC1PE,mBjD6sBgC,EgDjdjC;EC1PK;IACF,ejDM4B;IiDL5B,0BjD0sBiC;IiDzsBjC,mBjDwsB8B,EiD/rB/B;IAPqB;MAClB,uBjDqsB4B,EiDpsB7B;IACD;MACE,ejDmsB+B;MiDlsB/B,0BjDH0B,EiDI3B;EAGmB;IAClB,0BjD4rB4B,EiD3rB7B;;AD2OL;EC7PE,sBhDFgC,E+CiQjC;EC7PK;IACF,YjD6sB8B;IiD5sB9B,0BhDN8B;IgDO9B,sBhDP8B,EgDgB/B;IAPqB;MAClB,0BhDV4B,EgDW7B;IACD;MACE,ehDb4B;MgDc5B,uBjDosB4B,EiDnsB7B;EAGmB;IAClB,6BhDnB4B,EgDoB7B;;AD8OL;EChQE,sBjDsfqC,EgDpPtC;EChQK;IACF,ejDifoC;IiDhfpC,0BjDifoC;IiDhfpC,sBjDifmC,EiDxepC;IAPqB;MAClB,0BjD8eiC,EiD7elC;IACD;MACE,ejD0ekC;MiDzelC,0BjDwekC,EiDvenC;EAGmB;IAClB,6BjDqeiC,EiDpelC;;ADiPL;ECnQE,sBjD0fqC,EgDrPtC;ECnQK;IACF,ejDqfoC;IiDpfpC,0BjDqfoC;IiDpfpC,sBjDqfmC,EiD5epC;IAPqB;MAClB,0BjDkfiC,EiDjflC;IACD;MACE,ejD8ekC;MiD7elC,0BjD4ekC,EiD3enC;EAGmB;IAClB,6BjDyeiC,EiDxelC;;ADoPL;ECtQE,sBjD8fqC,EgDtPtC;ECtQK;IACF,ejDyfoC;IiDxfpC,0BjDyfoC;IiDxfpC,sBjDyfmC,EiDhfpC;IAPqB;MAClB,0BjDsfiC,EiDrflC;IACD;MACE,ejDkfkC;MiDjflC,0BjDgfkC,EiD/enC;EAGmB;IAClB,6BjD6eiC,EiD5elC;;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mBAAmB,EACtB;;AACD;EACI,oBAAoB;EACpB,sBAAsB,EACzB;;AAED,qBAAqB;AACrB;EACI,WAAW;EACX,SAAS;EACT,UAAU;EACV,YAAY;EACZ,aAAa;EACb,mBAAmB,EACtB;;AACD;EACI,uBAAuB,EAC1B;;AACD;EACI,WAAW;EACX,WAAW,EACd;;AACD;EACI,YAAY;EACZ,mBAAmB,EACtB;;AACD;EACI,oBAAoB;EACpB,mBAAmB,EACtB;;AACD;;;EACI,SAAS;EACT,UAAU;EACV,YAAY;EACZ,aAAa;EACb,mBAAmB,EACtB;;AACD;;;EACI,YAAY;EACZ,aAAa,EAChB;;AACD;EACI,0BAA0B;EAC1B,6BAA6B,EAChC;;ACrRD;EACE,2BAA2B;EAC3B,stEAA6sE,EAAA;;AAG/sE;EACE,2BAA2B;EAC3B,+BAA+B;EAC/B,iBAAiB;EACjB,YAAY;EACZ,2JAA2J;EAC3J,gBAAgB;EAChB,iBAAiB;EACjB,sBAAsB,EACvB;;AAED;EACE,eAAe,EAChB;;AAED;;EAEE,eAAe,EAChB;;AAED;;EAEE,eAAe,EAChB;;AAED;;EAEE,YAAY,EACb;;AAED;EACE,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;;;;;;;EAOE,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,eAAe;EACf,0BAA0B,EAC3B;;AAED;EACE,kBAAkB;EAClB,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;;;EAGE,kBAAkB;EAClB,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,mBAAmB;EACnB,YAAY,EACb;;AAED;EACE,kBAAkB;EAClB,YAAY,EACb;;AAED;EACE,eAAe;EACf,0BAA0B,EAC3B;;AAED;EACE,eAAe;EACf,0BAA0B,EAC3B;;AAED;EACE,kBAAkB;EAClB,eAAe,EAChB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,sBAAsB;EACtB,yBAAyB;EACzB,mBAAmB,EACpB;;AAED;EACE,8BAA8B;EAC9B,sCAAsC,EACvC;;AAED;;EAEE,iBAAiB,EAClB;;AAED;EACE,qBAAqB,EACtB;;AAED;EACE,oBAAoB,EACrB;;AAED;EACE,eAAe;EACf,iBAAiB,EAClB;;AAED;EACE,mBAAmB,EACpB;;AAED;EACE,iBAAiB,EAClB;;AAED;;;EAGE,kCAAkC;EAClC,eAAe,EAChB;;AAED;EACE,wBAAwB;EACxB,UAAU;EACV,kBAAkB,EACnB;;AAED;EACE,cAAc;EACd,UAAU,EACX;;AAED;EACE,kBAAkB,EACnB;;AAED;EACE,uBAAuB;EACvB,WAAW,EACZ;;AAED;EACE,uBAAuB,EACxB;;AAED;EACE,qBAAqB;EACrB,mBAAmB;EACnB,qBAAqB,EACtB;;AAED;EACE,eAAe;EACf,sBAAsB,EACvB;;AAED;;EAEE,2BAA2B,EAC5B;;AAED;EACE,iBAAiB,EAClB;;AAED;EACE,UAAU;EACV,eAAe;EACf,iBAAiB;EACjB,wBAAwB;EACxB,UAAU;EACV,8BAA8B,EAC/B;;AAED;EACE,eAAe;EACf,YAAY,EACb;;AAED;EACE,eAAe;EACf,YAAY;EACZ,YAAY,EACb;;AAED;EACE,kBAAkB;EAClB,0BAA0B,EAC3B;;AAED;;EAEE,WAAW,EACZ;;AAED;;;;;;EAME,cAAc;EACd,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AAED;EACE,cAAc;EACd,oBAAoB,EACrB;;AAED;EACE,UAAU,EACX;;AAED;;EAEE,gBAAgB;EAChB,cAAc;EACd,iBAAiB,EAClB;;AAED;;EAEE,6BAA6B,EAC9B;;AAED;;;;EAIE,6BAA6B,EAC9B;;AAED;EACE,eAAe,EAChB;;AAED;EACE,oEAAoE;EACpE,gBAAgB,EACjB;;AAED;EACE,cAAc;EACd,iBAAiB;EACjB,kEAAkE,EACnE;;AAED;EACE,4BAA4B,EAC7B;;AAED;EACE,wCAAwC;EACxC,gCAAgC,EACjC;;AAED;EACE,eAAe;EACf,YAAY,EACb;;AAED;EACE,eAAe;EACf,YAAY;EACZ,YAAY,EACb;;AAED;EACE,yBAAyB,EAC1B;;AAED;EACE,4BAA4B,EAC7B;;AAED;EACE,eAAe;EACf,sBAAsB,EACvB;;AAED;EACE,YAAY;EACZ,mBAAmB;EACnB,mBAAmB;EACnB,eAAe,EAChB;;AAED;EACE,cAAc,EACf;;AAED;;;;;;;EAOE,cAAc;EACd,oBAAoB,EACrB;;AAED;EACE,eAAe;EACf,WAAW;EACX,eAAe;EACf,0BAA0B;EAC1B,UAAU,EACX;;AAED;EACE,eAAe;EACf,YAAY;EACZ,+BAA+B,EAChC;;AAED;EACE,cAAc,EACf;;AAED;EACE,iBAAiB,EAClB;;AAED;EACE,sBAAsB;EACtB,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,YAAY;EACZ,uBAAuB;EACvB,0BAA0B;EAC1B,uBAAuB;EACvB,0BAA0B;EAC1B,mBAAmB;EACnB,gCAAgC,EACjC;;AAED;;;;;;EAME,iBAAiB;EACjB,oBAAoB;EACpB,iBAAiB;EACjB,kBAAkB,EACnB;;AAED;;;;;;EAME,YAAY;EACZ,uBAAuB;EACvB,mBAAmB,EACpB;;AAED;;;;;;EAME,sBAAsB,EACvB;;AAED;;;;;;EAME,oBAAoB,EACrB;;AAED;EACE,sBAAsB;EACtB,eAAe;EACf,8BAA8B,EAC/B;;AAED;EACE,sBAAsB;EACtB,iBAAiB;EACjB,8BAA8B,EAC/B;;AAED;EACE,kBAAkB,EACnB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,mBAAmB,EACpB;;AAED;EACE,kBAAkB;EAClB,YAAY,EACb;;AAED;;EAEE,kBAAkB,EACnB;;AAED;;;;EAIE,cAAc;EACd,iBAAiB,EAClB;;AAED;EACE,iBAAiB,EAClB;;AAED;EACE,mBAAmB,EACpB;;AAED;EACE,WAAW,EACZ;;AAED;EACE,WAAW;EACX,iBAAiB;EACjB,eAAe;EACf,m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","file":"dashboard.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n Ionicons, v2.0.1\n Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n https://twitter.com/benjsperry https://twitter.com/ionicframework\n MIT License: https://github.com/driftyco/ionicons\n\n Android-style icons originally built by Google’s\n Material Design Icons: https://github.com/google/material-design-icons\n used under CC BY http://creativecommons.org/licenses/by/4.0/\n Modified icons to fit ionicon’s grid from original.\n*/\n@font-face {\n font-family: \"Ionicons\";\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1\");\n src: url(\"../../../fonts/ionicons.eot?v=2.0.1#iefix\") format(\"embedded-opentype\"), url(\"../../../fonts/ionicons.ttf?v=2.0.1\") format(\"truetype\"), url(\"../../../fonts/ionicons.woff?v=2.0.1\") format(\"woff\"), url(\"../../../fonts/ionicons.svg?v=2.0.1#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal; }\n\n.ion, .ionicons,\n.ion-alert:before,\n.ion-alert-circled:before,\n.ion-android-add:before,\n.ion-android-add-circle:before,\n.ion-android-alarm-clock:before,\n.ion-android-alert:before,\n.ion-android-apps:before,\n.ion-android-archive:before,\n.ion-android-arrow-back:before,\n.ion-android-arrow-down:before,\n.ion-android-arrow-dropdown:before,\n.ion-android-arrow-dropdown-circle:before,\n.ion-android-arrow-dropleft:before,\n.ion-android-arrow-dropleft-circle:before,\n.ion-android-arrow-dropright:before,\n.ion-android-arrow-dropright-circle:before,\n.ion-android-arrow-dropup:before,\n.ion-android-arrow-dropup-circle:before,\n.ion-android-arrow-forward:before,\n.ion-android-arrow-up:before,\n.ion-android-attach:before,\n.ion-android-bar:before,\n.ion-android-bicycle:before,\n.ion-android-boat:before,\n.ion-android-bookmark:before,\n.ion-android-bulb:before,\n.ion-android-bus:before,\n.ion-android-calendar:before,\n.ion-android-call:before,\n.ion-android-camera:before,\n.ion-android-cancel:before,\n.ion-android-car:before,\n.ion-android-cart:before,\n.ion-android-chat:before,\n.ion-android-checkbox:before,\n.ion-android-checkbox-blank:before,\n.ion-android-checkbox-outline:before,\n.ion-android-checkbox-outline-blank:before,\n.ion-android-checkmark-circle:before,\n.ion-android-clipboard:before,\n.ion-android-close:before,\n.ion-android-cloud:before,\n.ion-android-cloud-circle:before,\n.ion-android-cloud-done:before,\n.ion-android-cloud-outline:before,\n.ion-android-color-palette:before,\n.ion-android-compass:before,\n.ion-android-contact:before,\n.ion-android-contacts:before,\n.ion-android-contract:before,\n.ion-android-create:before,\n.ion-android-delete:before,\n.ion-android-desktop:before,\n.ion-android-document:before,\n.ion-android-done:before,\n.ion-android-done-all:before,\n.ion-android-download:before,\n.ion-android-drafts:before,\n.ion-android-exit:before,\n.ion-android-expand:before,\n.ion-android-favorite:before,\n.ion-android-favorite-outline:before,\n.ion-android-film:before,\n.ion-android-folder:before,\n.ion-android-folder-open:before,\n.ion-android-funnel:before,\n.ion-android-globe:before,\n.ion-android-hand:before,\n.ion-android-hangout:before,\n.ion-android-happy:before,\n.ion-android-home:before,\n.ion-android-image:before,\n.ion-android-laptop:before,\n.ion-android-list:before,\n.ion-android-locate:before,\n.ion-android-lock:before,\n.ion-android-mail:before,\n.ion-android-map:before,\n.ion-android-menu:before,\n.ion-android-microphone:before,\n.ion-android-microphone-off:before,\n.ion-android-more-horizontal:before,\n.ion-android-more-vertical:before,\n.ion-android-navigate:before,\n.ion-android-notifications:before,\n.ion-android-notifications-none:before,\n.ion-android-notifications-off:before,\n.ion-android-open:before,\n.ion-android-options:before,\n.ion-android-people:before,\n.ion-android-person:before,\n.ion-android-person-add:before,\n.ion-android-phone-landscape:before,\n.ion-android-phone-portrait:before,\n.ion-android-pin:before,\n.ion-android-plane:before,\n.ion-android-playstore:before,\n.ion-android-print:before,\n.ion-android-radio-button-off:before,\n.ion-android-radio-button-on:before,\n.ion-android-refresh:before,\n.ion-android-remove:before,\n.ion-android-remove-circle:before,\n.ion-android-restaurant:before,\n.ion-android-sad:before,\n.ion-android-search:before,\n.ion-android-send:before,\n.ion-android-settings:before,\n.ion-android-share:before,\n.ion-android-share-alt:before,\n.ion-android-star:before,\n.ion-android-star-half:before,\n.ion-android-star-outline:before,\n.ion-android-stopwatch:before,\n.ion-android-subway:before,\n.ion-android-sunny:before,\n.ion-android-sync:before,\n.ion-android-textsms:before,\n.ion-android-time:before,\n.ion-android-train:before,\n.ion-android-unlock:before,\n.ion-android-upload:before,\n.ion-android-volume-down:before,\n.ion-android-volume-mute:before,\n.ion-android-volume-off:before,\n.ion-android-volume-up:before,\n.ion-android-walk:before,\n.ion-android-warning:before,\n.ion-android-watch:before,\n.ion-android-wifi:before,\n.ion-aperture:before,\n.ion-archive:before,\n.ion-arrow-down-a:before,\n.ion-arrow-down-b:before,\n.ion-arrow-down-c:before,\n.ion-arrow-expand:before,\n.ion-arrow-graph-down-left:before,\n.ion-arrow-graph-down-right:before,\n.ion-arrow-graph-up-left:before,\n.ion-arrow-graph-up-right:before,\n.ion-arrow-left-a:before,\n.ion-arrow-left-b:before,\n.ion-arrow-left-c:before,\n.ion-arrow-move:before,\n.ion-arrow-resize:before,\n.ion-arrow-return-left:before,\n.ion-arrow-return-right:before,\n.ion-arrow-right-a:before,\n.ion-arrow-right-b:before,\n.ion-arrow-right-c:before,\n.ion-arrow-shrink:before,\n.ion-arrow-swap:before,\n.ion-arrow-up-a:before,\n.ion-arrow-up-b:before,\n.ion-arrow-up-c:before,\n.ion-asterisk:before,\n.ion-at:before,\n.ion-backspace:before,\n.ion-backspace-outline:before,\n.ion-bag:before,\n.ion-battery-charging:before,\n.ion-battery-empty:before,\n.ion-battery-full:before,\n.ion-battery-half:before,\n.ion-battery-low:before,\n.ion-beaker:before,\n.ion-beer:before,\n.ion-bluetooth:before,\n.ion-bonfire:before,\n.ion-bookmark:before,\n.ion-bowtie:before,\n.ion-briefcase:before,\n.ion-bug:before,\n.ion-calculator:before,\n.ion-calendar:before,\n.ion-camera:before,\n.ion-card:before,\n.ion-cash:before,\n.ion-chatbox:before,\n.ion-chatbox-working:before,\n.ion-chatboxes:before,\n.ion-chatbubble:before,\n.ion-chatbubble-working:before,\n.ion-chatbubbles:before,\n.ion-checkmark:before,\n.ion-checkmark-circled:before,\n.ion-checkmark-round:before,\n.ion-chevron-down:before,\n.ion-chevron-left:before,\n.ion-chevron-right:before,\n.ion-chevron-up:before,\n.ion-clipboard:before,\n.ion-clock:before,\n.ion-close:before,\n.ion-close-circled:before,\n.ion-close-round:before,\n.ion-closed-captioning:before,\n.ion-cloud:before,\n.ion-code:before,\n.ion-code-download:before,\n.ion-code-working:before,\n.ion-coffee:before,\n.ion-compass:before,\n.ion-compose:before,\n.ion-connection-bars:before,\n.ion-contrast:before,\n.ion-crop:before,\n.ion-cube:before,\n.ion-disc:before,\n.ion-document:before,\n.ion-document-text:before,\n.ion-drag:before,\n.ion-earth:before,\n.ion-easel:before,\n.ion-edit:before,\n.ion-egg:before,\n.ion-eject:before,\n.ion-email:before,\n.ion-email-unread:before,\n.ion-erlenmeyer-flask:before,\n.ion-erlenmeyer-flask-bubbles:before,\n.ion-eye:before,\n.ion-eye-disabled:before,\n.ion-female:before,\n.ion-filing:before,\n.ion-film-marker:before,\n.ion-fireball:before,\n.ion-flag:before,\n.ion-flame:before,\n.ion-flash:before,\n.ion-flash-off:before,\n.ion-folder:before,\n.ion-fork:before,\n.ion-fork-repo:before,\n.ion-forward:before,\n.ion-funnel:before,\n.ion-gear-a:before,\n.ion-gear-b:before,\n.ion-grid:before,\n.ion-hammer:before,\n.ion-happy:before,\n.ion-happy-outline:before,\n.ion-headphone:before,\n.ion-heart:before,\n.ion-heart-broken:before,\n.ion-help:before,\n.ion-help-buoy:before,\n.ion-help-circled:before,\n.ion-home:before,\n.ion-icecream:before,\n.ion-image:before,\n.ion-images:before,\n.ion-information:before,\n.ion-information-circled:before,\n.ion-ionic:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-americanfootball:before,\n.ion-ios-americanfootball-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-left:before,\n.ion-ios-arrow-right:before,\n.ion-ios-arrow-thin-down:before,\n.ion-ios-arrow-thin-left:before,\n.ion-ios-arrow-thin-right:before,\n.ion-ios-arrow-thin-up:before,\n.ion-ios-arrow-up:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-bell:before,\n.ion-ios-bell-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bolt:before,\n.ion-ios-bolt-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-box:before,\n.ion-ios-box-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubble:before,\n.ion-ios-chatbubble-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-empty:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-circle-filled:before,\n.ion-ios-circle-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-empty:before,\n.ion-ios-close-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compose:before,\n.ion-ios-compose-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-strong:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-drag:before,\n.ion-ios-email:before,\n.ion-ios-email-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-gear:before,\n.ion-ios-gear-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-grid-view:before,\n.ion-ios-grid-view-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-empty:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-empty:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-lightbulb:before,\n.ion-ios-lightbulb-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-outline:before,\n.ion-ios-location:before,\n.ion-ios-location-outline:before,\n.ion-ios-locked:before,\n.ion-ios-locked-outline:before,\n.ion-ios-loop:before,\n.ion-ios-loop-strong:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-outline:before,\n.ion-ios-minus:before,\n.ion-ios-minus-empty:before,\n.ion-ios-minus-outline:before,\n.ion-ios-monitor:before,\n.ion-ios-monitor-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-notes:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paperplane:before,\n.ion-ios-paperplane-outline:before,\n.ion-ios-partlysunny:before,\n.ion-ios-partlysunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-outline:before,\n.ion-ios-personadd:before,\n.ion-ios-personadd-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-plus:before,\n.ion-ios-plus-empty:before,\n.ion-ios-plus-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-printer:before,\n.ion-ios-printer-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-strong:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-empty:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-reload:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-strong:before,\n.ion-ios-settings:before,\n.ion-ios-settings-strong:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-strong:before,\n.ion-ios-skipbackward:before,\n.ion-ios-skipbackward-outline:before,\n.ion-ios-skipforward:before,\n.ion-ios-skipforward-outline:before,\n.ion-ios-snowy:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-telephone:before,\n.ion-ios-telephone-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-toggle:before,\n.ion-ios-toggle-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlocked:before,\n.ion-ios-unlocked-outline:before,\n.ion-ios-upload:before,\n.ion-ios-upload-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-high:before,\n.ion-ios-volume-low:before,\n.ion-ios-wineglass:before,\n.ion-ios-wineglass-outline:before,\n.ion-ios-world:before,\n.ion-ios-world-outline:before,\n.ion-ipad:before,\n.ion-iphone:before,\n.ion-ipod:before,\n.ion-jet:before,\n.ion-key:before,\n.ion-knife:before,\n.ion-laptop:before,\n.ion-leaf:before,\n.ion-levels:before,\n.ion-lightbulb:before,\n.ion-link:before,\n.ion-load-a:before,\n.ion-load-b:before,\n.ion-load-c:before,\n.ion-load-d:before,\n.ion-location:before,\n.ion-lock-combination:before,\n.ion-locked:before,\n.ion-log-in:before,\n.ion-log-out:before,\n.ion-loop:before,\n.ion-magnet:before,\n.ion-male:before,\n.ion-man:before,\n.ion-map:before,\n.ion-medkit:before,\n.ion-merge:before,\n.ion-mic-a:before,\n.ion-mic-b:before,\n.ion-mic-c:before,\n.ion-minus:before,\n.ion-minus-circled:before,\n.ion-minus-round:before,\n.ion-model-s:before,\n.ion-monitor:before,\n.ion-more:before,\n.ion-mouse:before,\n.ion-music-note:before,\n.ion-navicon:before,\n.ion-navicon-round:before,\n.ion-navigate:before,\n.ion-network:before,\n.ion-no-smoking:before,\n.ion-nuclear:before,\n.ion-outlet:before,\n.ion-paintbrush:before,\n.ion-paintbucket:before,\n.ion-paper-airplane:before,\n.ion-paperclip:before,\n.ion-pause:before,\n.ion-person:before,\n.ion-person-add:before,\n.ion-person-stalker:before,\n.ion-pie-graph:before,\n.ion-pin:before,\n.ion-pinpoint:before,\n.ion-pizza:before,\n.ion-plane:before,\n.ion-planet:before,\n.ion-play:before,\n.ion-playstation:before,\n.ion-plus:before,\n.ion-plus-circled:before,\n.ion-plus-round:before,\n.ion-podium:before,\n.ion-pound:before,\n.ion-power:before,\n.ion-pricetag:before,\n.ion-pricetags:before,\n.ion-printer:before,\n.ion-pull-request:before,\n.ion-qr-scanner:before,\n.ion-quote:before,\n.ion-radio-waves:before,\n.ion-record:before,\n.ion-refresh:before,\n.ion-reply:before,\n.ion-reply-all:before,\n.ion-ribbon-a:before,\n.ion-ribbon-b:before,\n.ion-sad:before,\n.ion-sad-outline:before,\n.ion-scissors:before,\n.ion-search:before,\n.ion-settings:before,\n.ion-share:before,\n.ion-shuffle:before,\n.ion-skip-backward:before,\n.ion-skip-forward:before,\n.ion-social-android:before,\n.ion-social-android-outline:before,\n.ion-social-angular:before,\n.ion-social-angular-outline:before,\n.ion-social-apple:before,\n.ion-social-apple-outline:before,\n.ion-social-bitcoin:before,\n.ion-social-bitcoin-outline:before,\n.ion-social-buffer:before,\n.ion-social-buffer-outline:before,\n.ion-social-chrome:before,\n.ion-social-chrome-outline:before,\n.ion-social-codepen:before,\n.ion-social-codepen-outline:before,\n.ion-social-css3:before,\n.ion-social-css3-outline:before,\n.ion-social-designernews:before,\n.ion-social-designernews-outline:before,\n.ion-social-dribbble:before,\n.ion-social-dribbble-outline:before,\n.ion-social-dropbox:before,\n.ion-social-dropbox-outline:before,\n.ion-social-euro:before,\n.ion-social-euro-outline:before,\n.ion-social-facebook:before,\n.ion-social-facebook-outline:before,\n.ion-social-foursquare:before,\n.ion-social-foursquare-outline:before,\n.ion-social-freebsd-devil:before,\n.ion-social-github:before,\n.ion-social-github-outline:before,\n.ion-social-google:before,\n.ion-social-google-outline:before,\n.ion-social-googleplus:before,\n.ion-social-googleplus-outline:before,\n.ion-social-hackernews:before,\n.ion-social-hackernews-outline:before,\n.ion-social-html5:before,\n.ion-social-html5-outline:before,\n.ion-social-instagram:before,\n.ion-social-instagram-outline:before,\n.ion-social-javascript:before,\n.ion-social-javascript-outline:before,\n.ion-social-linkedin:before,\n.ion-social-linkedin-outline:before,\n.ion-social-markdown:before,\n.ion-social-nodejs:before,\n.ion-social-octocat:before,\n.ion-social-pinterest:before,\n.ion-social-pinterest-outline:before,\n.ion-social-python:before,\n.ion-social-reddit:before,\n.ion-social-reddit-outline:before,\n.ion-social-rss:before,\n.ion-social-rss-outline:before,\n.ion-social-sass:before,\n.ion-social-skype:before,\n.ion-social-skype-outline:before,\n.ion-social-snapchat:before,\n.ion-social-snapchat-outline:before,\n.ion-social-tumblr:before,\n.ion-social-tumblr-outline:before,\n.ion-social-tux:before,\n.ion-social-twitch:before,\n.ion-social-twitch-outline:before,\n.ion-social-twitter:before,\n.ion-social-twitter-outline:before,\n.ion-social-usd:before,\n.ion-social-usd-outline:before,\n.ion-social-vimeo:before,\n.ion-social-vimeo-outline:before,\n.ion-social-whatsapp:before,\n.ion-social-whatsapp-outline:before,\n.ion-social-windows:before,\n.ion-social-windows-outline:before,\n.ion-social-wordpress:before,\n.ion-social-wordpress-outline:before,\n.ion-social-yahoo:before,\n.ion-social-yahoo-outline:before,\n.ion-social-yen:before,\n.ion-social-yen-outline:before,\n.ion-social-youtube:before,\n.ion-social-youtube-outline:before,\n.ion-soup-can:before,\n.ion-soup-can-outline:before,\n.ion-speakerphone:before,\n.ion-speedometer:before,\n.ion-spoon:before,\n.ion-star:before,\n.ion-stats-bars:before,\n.ion-steam:before,\n.ion-stop:before,\n.ion-thermometer:before,\n.ion-thumbsdown:before,\n.ion-thumbsup:before,\n.ion-toggle:before,\n.ion-toggle-filled:before,\n.ion-transgender:before,\n.ion-trash-a:before,\n.ion-trash-b:before,\n.ion-trophy:before,\n.ion-tshirt:before,\n.ion-tshirt-outline:before,\n.ion-umbrella:before,\n.ion-university:before,\n.ion-unlocked:before,\n.ion-upload:before,\n.ion-usb:before,\n.ion-videocamera:before,\n.ion-volume-high:before,\n.ion-volume-low:before,\n.ion-volume-medium:before,\n.ion-volume-mute:before,\n.ion-wand:before,\n.ion-waterdrop:before,\n.ion-wifi:before,\n.ion-wineglass:before,\n.ion-woman:before,\n.ion-wrench:before,\n.ion-xbox:before {\n display: inline-block;\n font-family: \"Ionicons\";\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.ion-alert:before {\n content: \"\"; }\n\n.ion-alert-circled:before {\n content: \"\"; }\n\n.ion-android-add:before {\n content: \"\"; }\n\n.ion-android-add-circle:before {\n content: \"\"; }\n\n.ion-android-alarm-clock:before {\n content: \"\"; }\n\n.ion-android-alert:before {\n content: \"\"; }\n\n.ion-android-apps:before {\n content: \"\"; }\n\n.ion-android-archive:before {\n content: \"\"; }\n\n.ion-android-arrow-back:before {\n content: \"\"; }\n\n.ion-android-arrow-down:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown:before {\n content: \"\"; }\n\n.ion-android-arrow-dropdown-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft:before {\n content: \"\"; }\n\n.ion-android-arrow-dropleft-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright:before {\n content: \"\"; }\n\n.ion-android-arrow-dropright-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup:before {\n content: \"\"; }\n\n.ion-android-arrow-dropup-circle:before {\n content: \"\"; }\n\n.ion-android-arrow-forward:before {\n content: \"\"; }\n\n.ion-android-arrow-up:before {\n content: \"\"; }\n\n.ion-android-attach:before {\n content: \"\"; }\n\n.ion-android-bar:before {\n content: \"\"; }\n\n.ion-android-bicycle:before {\n content: \"\"; }\n\n.ion-android-boat:before {\n content: \"\"; }\n\n.ion-android-bookmark:before {\n content: \"\"; }\n\n.ion-android-bulb:before {\n content: \"\"; }\n\n.ion-android-bus:before {\n content: \"\"; }\n\n.ion-android-calendar:before {\n content: \"\"; }\n\n.ion-android-call:before {\n content: \"\"; }\n\n.ion-android-camera:before {\n content: \"\"; }\n\n.ion-android-cancel:before {\n content: \"\"; }\n\n.ion-android-car:before {\n content: \"\"; }\n\n.ion-android-cart:before {\n content: \"\"; }\n\n.ion-android-chat:before {\n content: \"\"; }\n\n.ion-android-checkbox:before {\n content: \"\"; }\n\n.ion-android-checkbox-blank:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline:before {\n content: \"\"; }\n\n.ion-android-checkbox-outline-blank:before {\n content: \"\"; }\n\n.ion-android-checkmark-circle:before {\n content: \"\"; }\n\n.ion-android-clipboard:before {\n content: \"\"; }\n\n.ion-android-close:before {\n content: \"\"; }\n\n.ion-android-cloud:before {\n content: \"\"; }\n\n.ion-android-cloud-circle:before {\n content: \"\"; }\n\n.ion-android-cloud-done:before {\n content: \"\"; }\n\n.ion-android-cloud-outline:before {\n content: \"\"; }\n\n.ion-android-color-palette:before {\n content: \"\"; }\n\n.ion-android-compass:before {\n content: \"\"; }\n\n.ion-android-contact:before {\n content: \"\"; }\n\n.ion-android-contacts:before {\n content: \"\"; }\n\n.ion-android-contract:before {\n content: \"\"; }\n\n.ion-android-create:before {\n content: \"\"; }\n\n.ion-android-delete:before {\n content: \"\"; }\n\n.ion-android-desktop:before {\n content: \"\"; }\n\n.ion-android-document:before {\n content: \"\"; }\n\n.ion-android-done:before {\n content: \"\"; }\n\n.ion-android-done-all:before {\n content: \"\"; }\n\n.ion-android-download:before {\n content: \"\"; }\n\n.ion-android-drafts:before {\n content: \"\"; }\n\n.ion-android-exit:before {\n content: \"\"; }\n\n.ion-android-expand:before {\n content: \"\"; }\n\n.ion-android-favorite:before {\n content: \"\"; }\n\n.ion-android-favorite-outline:before {\n content: \"\"; }\n\n.ion-android-film:before {\n content: \"\"; }\n\n.ion-android-folder:before {\n content: \"\"; }\n\n.ion-android-folder-open:before {\n content: \"\"; }\n\n.ion-android-funnel:before {\n content: \"\"; }\n\n.ion-android-globe:before {\n content: \"\"; }\n\n.ion-android-hand:before {\n content: \"\"; }\n\n.ion-android-hangout:before {\n content: \"\"; }\n\n.ion-android-happy:before {\n content: \"\"; }\n\n.ion-android-home:before {\n content: \"\"; }\n\n.ion-android-image:before {\n content: \"\"; }\n\n.ion-android-laptop:before {\n content: \"\"; }\n\n.ion-android-list:before {\n content: \"\"; }\n\n.ion-android-locate:before {\n content: \"\"; }\n\n.ion-android-lock:before {\n content: \"\"; }\n\n.ion-android-mail:before {\n content: \"\"; }\n\n.ion-android-map:before {\n content: \"\"; }\n\n.ion-android-menu:before {\n content: \"\"; }\n\n.ion-android-microphone:before {\n content: \"\"; }\n\n.ion-android-microphone-off:before {\n content: \"\"; }\n\n.ion-android-more-horizontal:before {\n content: \"\"; }\n\n.ion-android-more-vertical:before {\n content: \"\"; }\n\n.ion-android-navigate:before {\n content: \"\"; }\n\n.ion-android-notifications:before {\n content: \"\"; }\n\n.ion-android-notifications-none:before {\n content: \"\"; }\n\n.ion-android-notifications-off:before {\n content: \"\"; }\n\n.ion-android-open:before {\n content: \"\"; }\n\n.ion-android-options:before {\n content: \"\"; }\n\n.ion-android-people:before {\n content: \"\"; }\n\n.ion-android-person:before {\n content: \"\"; }\n\n.ion-android-person-add:before {\n content: \"\"; }\n\n.ion-android-phone-landscape:before {\n content: \"\"; }\n\n.ion-android-phone-portrait:before {\n content: \"\"; }\n\n.ion-android-pin:before {\n content: \"\"; }\n\n.ion-android-plane:before {\n content: \"\"; }\n\n.ion-android-playstore:before {\n content: \"\"; }\n\n.ion-android-print:before {\n content: \"\"; }\n\n.ion-android-radio-button-off:before {\n content: \"\"; }\n\n.ion-android-radio-button-on:before {\n content: \"\"; }\n\n.ion-android-refresh:before {\n content: \"\"; }\n\n.ion-android-remove:before {\n content: \"\"; }\n\n.ion-android-remove-circle:before {\n content: \"\"; }\n\n.ion-android-restaurant:before {\n content: \"\"; }\n\n.ion-android-sad:before {\n content: \"\"; }\n\n.ion-android-search:before {\n content: \"\"; }\n\n.ion-android-send:before {\n content: \"\"; }\n\n.ion-android-settings:before {\n content: \"\"; }\n\n.ion-android-share:before {\n content: \"\"; }\n\n.ion-android-share-alt:before {\n content: \"\"; }\n\n.ion-android-star:before {\n content: \"\"; }\n\n.ion-android-star-half:before {\n content: \"\"; }\n\n.ion-android-star-outline:before {\n content: \"\"; }\n\n.ion-android-stopwatch:before {\n content: \"\"; }\n\n.ion-android-subway:before {\n content: \"\"; }\n\n.ion-android-sunny:before {\n content: \"\"; }\n\n.ion-android-sync:before {\n content: \"\"; }\n\n.ion-android-textsms:before {\n content: \"\"; }\n\n.ion-android-time:before {\n content: \"\"; }\n\n.ion-android-train:before {\n content: \"\"; }\n\n.ion-android-unlock:before {\n content: \"\"; }\n\n.ion-android-upload:before {\n content: \"\"; }\n\n.ion-android-volume-down:before {\n content: \"\"; }\n\n.ion-android-volume-mute:before {\n content: \"\"; }\n\n.ion-android-volume-off:before {\n content: \"\"; }\n\n.ion-android-volume-up:before {\n content: \"\"; }\n\n.ion-android-walk:before {\n content: \"\"; }\n\n.ion-android-warning:before {\n content: \"\"; }\n\n.ion-android-watch:before {\n content: \"\"; }\n\n.ion-android-wifi:before {\n content: \"\"; }\n\n.ion-aperture:before {\n content: \"\"; }\n\n.ion-archive:before {\n content: \"\"; }\n\n.ion-arrow-down-a:before {\n content: \"\"; }\n\n.ion-arrow-down-b:before {\n content: \"\"; }\n\n.ion-arrow-down-c:before {\n content: \"\"; }\n\n.ion-arrow-expand:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-down-right:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-left:before {\n content: \"\"; }\n\n.ion-arrow-graph-up-right:before {\n content: \"\"; }\n\n.ion-arrow-left-a:before {\n content: \"\"; }\n\n.ion-arrow-left-b:before {\n content: \"\"; }\n\n.ion-arrow-left-c:before {\n content: \"\"; }\n\n.ion-arrow-move:before {\n content: \"\"; }\n\n.ion-arrow-resize:before {\n content: \"\"; }\n\n.ion-arrow-return-left:before {\n content: \"\"; }\n\n.ion-arrow-return-right:before {\n content: \"\"; }\n\n.ion-arrow-right-a:before {\n content: \"\"; }\n\n.ion-arrow-right-b:before {\n content: \"\"; }\n\n.ion-arrow-right-c:before {\n content: \"\"; }\n\n.ion-arrow-shrink:before {\n content: \"\"; }\n\n.ion-arrow-swap:before {\n content: \"\"; }\n\n.ion-arrow-up-a:before {\n content: \"\"; }\n\n.ion-arrow-up-b:before {\n content: \"\"; }\n\n.ion-arrow-up-c:before {\n content: \"\"; }\n\n.ion-asterisk:before {\n content: \"\"; }\n\n.ion-at:before {\n content: \"\"; }\n\n.ion-backspace:before {\n content: \"\"; }\n\n.ion-backspace-outline:before {\n content: \"\"; }\n\n.ion-bag:before {\n content: \"\"; }\n\n.ion-battery-charging:before {\n content: \"\"; }\n\n.ion-battery-empty:before {\n content: \"\"; }\n\n.ion-battery-full:before {\n content: \"\"; }\n\n.ion-battery-half:before {\n content: \"\"; }\n\n.ion-battery-low:before {\n content: \"\"; }\n\n.ion-beaker:before {\n content: \"\"; }\n\n.ion-beer:before {\n content: \"\"; }\n\n.ion-bluetooth:before {\n content: \"\"; }\n\n.ion-bonfire:before {\n content: \"\"; }\n\n.ion-bookmark:before {\n content: \"\"; }\n\n.ion-bowtie:before {\n content: \"\"; }\n\n.ion-briefcase:before {\n content: \"\"; }\n\n.ion-bug:before {\n content: \"\"; }\n\n.ion-calculator:before {\n content: \"\"; }\n\n.ion-calendar:before {\n content: \"\"; }\n\n.ion-camera:before {\n content: \"\"; }\n\n.ion-card:before {\n content: \"\"; }\n\n.ion-cash:before {\n content: \"\"; }\n\n.ion-chatbox:before {\n content: \"\"; }\n\n.ion-chatbox-working:before {\n content: \"\"; }\n\n.ion-chatboxes:before {\n content: \"\"; }\n\n.ion-chatbubble:before {\n content: \"\"; }\n\n.ion-chatbubble-working:before {\n content: \"\"; }\n\n.ion-chatbubbles:before {\n content: \"\"; }\n\n.ion-checkmark:before {\n content: \"\"; }\n\n.ion-checkmark-circled:before {\n content: \"\"; }\n\n.ion-checkmark-round:before {\n content: \"\"; }\n\n.ion-chevron-down:before {\n content: \"\"; }\n\n.ion-chevron-left:before {\n content: \"\"; }\n\n.ion-chevron-right:before {\n content: \"\"; }\n\n.ion-chevron-up:before {\n content: \"\"; }\n\n.ion-clipboard:before {\n content: \"\"; }\n\n.ion-clock:before {\n content: \"\"; }\n\n.ion-close:before {\n content: \"\"; }\n\n.ion-close-circled:before {\n content: \"\"; }\n\n.ion-close-round:before {\n content: \"\"; }\n\n.ion-closed-captioning:before {\n content: \"\"; }\n\n.ion-cloud:before {\n content: \"\"; }\n\n.ion-code:before {\n content: \"\"; }\n\n.ion-code-download:before {\n content: \"\"; }\n\n.ion-code-working:before {\n content: \"\"; }\n\n.ion-coffee:before {\n content: \"\"; }\n\n.ion-compass:before {\n content: \"\"; }\n\n.ion-compose:before {\n content: \"\"; }\n\n.ion-connection-bars:before {\n content: \"\"; }\n\n.ion-contrast:before {\n content: \"\"; }\n\n.ion-crop:before {\n content: \"\"; }\n\n.ion-cube:before {\n content: \"\"; }\n\n.ion-disc:before {\n content: \"\"; }\n\n.ion-document:before {\n content: \"\"; }\n\n.ion-document-text:before {\n content: \"\"; }\n\n.ion-drag:before {\n content: \"\"; }\n\n.ion-earth:before {\n content: \"\"; }\n\n.ion-easel:before {\n content: \"\"; }\n\n.ion-edit:before {\n content: \"\"; }\n\n.ion-egg:before {\n content: \"\"; }\n\n.ion-eject:before {\n content: \"\"; }\n\n.ion-email:before {\n content: \"\"; }\n\n.ion-email-unread:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask:before {\n content: \"\"; }\n\n.ion-erlenmeyer-flask-bubbles:before {\n content: \"\"; }\n\n.ion-eye:before {\n content: \"\"; }\n\n.ion-eye-disabled:before {\n content: \"\"; }\n\n.ion-female:before {\n content: \"\"; }\n\n.ion-filing:before {\n content: \"\"; }\n\n.ion-film-marker:before {\n content: \"\"; }\n\n.ion-fireball:before {\n content: \"\"; }\n\n.ion-flag:before {\n content: \"\"; }\n\n.ion-flame:before {\n content: \"\"; }\n\n.ion-flash:before {\n content: \"\"; }\n\n.ion-flash-off:before {\n content: \"\"; }\n\n.ion-folder:before {\n content: \"\"; }\n\n.ion-fork:before {\n content: \"\"; }\n\n.ion-fork-repo:before {\n content: \"\"; }\n\n.ion-forward:before {\n content: \"\"; }\n\n.ion-funnel:before {\n content: \"\"; }\n\n.ion-gear-a:before {\n content: \"\"; }\n\n.ion-gear-b:before {\n content: \"\"; }\n\n.ion-grid:before {\n content: \"\"; }\n\n.ion-hammer:before {\n content: \"\"; }\n\n.ion-happy:before {\n content: \"\"; }\n\n.ion-happy-outline:before {\n content: \"\"; }\n\n.ion-headphone:before {\n content: \"\"; }\n\n.ion-heart:before {\n content: \"\"; }\n\n.ion-heart-broken:before {\n content: \"\"; }\n\n.ion-help:before {\n content: \"\"; }\n\n.ion-help-buoy:before {\n content: \"\"; }\n\n.ion-help-circled:before {\n content: \"\"; }\n\n.ion-home:before {\n content: \"\"; }\n\n.ion-icecream:before {\n content: \"\"; }\n\n.ion-image:before {\n content: \"\"; }\n\n.ion-images:before {\n content: \"\"; }\n\n.ion-information:before {\n content: \"\"; }\n\n.ion-information-circled:before {\n content: \"\"; }\n\n.ion-ionic:before {\n content: \"\"; }\n\n.ion-ios-alarm:before {\n content: \"\"; }\n\n.ion-ios-alarm-outline:before {\n content: \"\"; }\n\n.ion-ios-albums:before {\n content: \"\"; }\n\n.ion-ios-albums-outline:before {\n content: \"\"; }\n\n.ion-ios-americanfootball:before {\n content: \"\"; }\n\n.ion-ios-americanfootball-outline:before {\n content: \"\"; }\n\n.ion-ios-analytics:before {\n content: \"\"; }\n\n.ion-ios-analytics-outline:before {\n content: \"\"; }\n\n.ion-ios-arrow-back:before {\n content: \"\"; }\n\n.ion-ios-arrow-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-forward:before {\n content: \"\"; }\n\n.ion-ios-arrow-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-down:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-left:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-right:before {\n content: \"\"; }\n\n.ion-ios-arrow-thin-up:before {\n content: \"\"; }\n\n.ion-ios-arrow-up:before {\n content: \"\"; }\n\n.ion-ios-at:before {\n content: \"\"; }\n\n.ion-ios-at-outline:before {\n content: \"\"; }\n\n.ion-ios-barcode:before {\n content: \"\"; }\n\n.ion-ios-barcode-outline:before {\n content: \"\"; }\n\n.ion-ios-baseball:before {\n content: \"\"; }\n\n.ion-ios-baseball-outline:before {\n content: \"\"; }\n\n.ion-ios-basketball:before {\n content: \"\"; }\n\n.ion-ios-basketball-outline:before {\n content: \"\"; }\n\n.ion-ios-bell:before {\n content: \"\"; }\n\n.ion-ios-bell-outline:before {\n content: \"\"; }\n\n.ion-ios-body:before {\n content: \"\"; }\n\n.ion-ios-body-outline:before {\n content: \"\"; }\n\n.ion-ios-bolt:before {\n content: \"\"; }\n\n.ion-ios-bolt-outline:before {\n content: \"\"; }\n\n.ion-ios-book:before {\n content: \"\"; }\n\n.ion-ios-book-outline:before {\n content: \"\"; }\n\n.ion-ios-bookmarks:before {\n content: \"\"; }\n\n.ion-ios-bookmarks-outline:before {\n content: \"\"; }\n\n.ion-ios-box:before {\n content: \"\"; }\n\n.ion-ios-box-outline:before {\n content: \"\"; }\n\n.ion-ios-briefcase:before {\n content: \"\"; }\n\n.ion-ios-briefcase-outline:before {\n content: \"\"; }\n\n.ion-ios-browsers:before {\n content: \"\"; }\n\n.ion-ios-browsers-outline:before {\n content: \"\"; }\n\n.ion-ios-calculator:before {\n content: \"\"; }\n\n.ion-ios-calculator-outline:before {\n content: \"\"; }\n\n.ion-ios-calendar:before {\n content: \"\"; }\n\n.ion-ios-calendar-outline:before {\n content: \"\"; }\n\n.ion-ios-camera:before {\n content: \"\"; }\n\n.ion-ios-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-cart:before {\n content: \"\"; }\n\n.ion-ios-cart-outline:before {\n content: \"\"; }\n\n.ion-ios-chatboxes:before {\n content: \"\"; }\n\n.ion-ios-chatboxes-outline:before {\n content: \"\"; }\n\n.ion-ios-chatbubble:before {\n content: \"\"; }\n\n.ion-ios-chatbubble-outline:before {\n content: \"\"; }\n\n.ion-ios-checkmark:before {\n content: \"\"; }\n\n.ion-ios-checkmark-empty:before {\n content: \"\"; }\n\n.ion-ios-checkmark-outline:before {\n content: \"\"; }\n\n.ion-ios-circle-filled:before {\n content: \"\"; }\n\n.ion-ios-circle-outline:before {\n content: \"\"; }\n\n.ion-ios-clock:before {\n content: \"\"; }\n\n.ion-ios-clock-outline:before {\n content: \"\"; }\n\n.ion-ios-close:before {\n content: \"\"; }\n\n.ion-ios-close-empty:before {\n content: \"\"; }\n\n.ion-ios-close-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud:before {\n content: \"\"; }\n\n.ion-ios-cloud-download:before {\n content: \"\"; }\n\n.ion-ios-cloud-download-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-outline:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload:before {\n content: \"\"; }\n\n.ion-ios-cloud-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night:before {\n content: \"\"; }\n\n.ion-ios-cloudy-night-outline:before {\n content: \"\"; }\n\n.ion-ios-cloudy-outline:before {\n content: \"\"; }\n\n.ion-ios-cog:before {\n content: \"\"; }\n\n.ion-ios-cog-outline:before {\n content: \"\"; }\n\n.ion-ios-color-filter:before {\n content: \"\"; }\n\n.ion-ios-color-filter-outline:before {\n content: \"\"; }\n\n.ion-ios-color-wand:before {\n content: \"\"; }\n\n.ion-ios-color-wand-outline:before {\n content: \"\"; }\n\n.ion-ios-compose:before {\n content: \"\"; }\n\n.ion-ios-compose-outline:before {\n content: \"\"; }\n\n.ion-ios-contact:before {\n content: \"\"; }\n\n.ion-ios-contact-outline:before {\n content: \"\"; }\n\n.ion-ios-copy:before {\n content: \"\"; }\n\n.ion-ios-copy-outline:before {\n content: \"\"; }\n\n.ion-ios-crop:before {\n content: \"\"; }\n\n.ion-ios-crop-strong:before {\n content: \"\"; }\n\n.ion-ios-download:before {\n content: \"\"; }\n\n.ion-ios-download-outline:before {\n content: \"\"; }\n\n.ion-ios-drag:before {\n content: \"\"; }\n\n.ion-ios-email:before {\n content: \"\"; }\n\n.ion-ios-email-outline:before {\n content: \"\"; }\n\n.ion-ios-eye:before {\n content: \"\"; }\n\n.ion-ios-eye-outline:before {\n content: \"\"; }\n\n.ion-ios-fastforward:before {\n content: \"\"; }\n\n.ion-ios-fastforward-outline:before {\n content: \"\"; }\n\n.ion-ios-filing:before {\n content: \"\"; }\n\n.ion-ios-filing-outline:before {\n content: \"\"; }\n\n.ion-ios-film:before {\n content: \"\"; }\n\n.ion-ios-film-outline:before {\n content: \"\"; }\n\n.ion-ios-flag:before {\n content: \"\"; }\n\n.ion-ios-flag-outline:before {\n content: \"\"; }\n\n.ion-ios-flame:before {\n content: \"\"; }\n\n.ion-ios-flame-outline:before {\n content: \"\"; }\n\n.ion-ios-flask:before {\n content: \"\"; }\n\n.ion-ios-flask-outline:before {\n content: \"\"; }\n\n.ion-ios-flower:before {\n content: \"\"; }\n\n.ion-ios-flower-outline:before {\n content: \"\"; }\n\n.ion-ios-folder:before {\n content: \"\"; }\n\n.ion-ios-folder-outline:before {\n content: \"\"; }\n\n.ion-ios-football:before {\n content: \"\"; }\n\n.ion-ios-football-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a:before {\n content: \"\"; }\n\n.ion-ios-game-controller-a-outline:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b:before {\n content: \"\"; }\n\n.ion-ios-game-controller-b-outline:before {\n content: \"\"; }\n\n.ion-ios-gear:before {\n content: \"\"; }\n\n.ion-ios-gear-outline:before {\n content: \"\"; }\n\n.ion-ios-glasses:before {\n content: \"\"; }\n\n.ion-ios-glasses-outline:before {\n content: \"\"; }\n\n.ion-ios-grid-view:before {\n content: \"\"; }\n\n.ion-ios-grid-view-outline:before {\n content: \"\"; }\n\n.ion-ios-heart:before {\n content: \"\"; }\n\n.ion-ios-heart-outline:before {\n content: \"\"; }\n\n.ion-ios-help:before {\n content: \"\"; }\n\n.ion-ios-help-empty:before {\n content: \"\"; }\n\n.ion-ios-help-outline:before {\n content: \"\"; }\n\n.ion-ios-home:before {\n content: \"\"; }\n\n.ion-ios-home-outline:before {\n content: \"\"; }\n\n.ion-ios-infinite:before {\n content: \"\"; }\n\n.ion-ios-infinite-outline:before {\n content: \"\"; }\n\n.ion-ios-information:before {\n content: \"\"; }\n\n.ion-ios-information-empty:before {\n content: \"\"; }\n\n.ion-ios-information-outline:before {\n content: \"\"; }\n\n.ion-ios-ionic-outline:before {\n content: \"\"; }\n\n.ion-ios-keypad:before {\n content: \"\"; }\n\n.ion-ios-keypad-outline:before {\n content: \"\"; }\n\n.ion-ios-lightbulb:before {\n content: \"\"; }\n\n.ion-ios-lightbulb-outline:before {\n content: \"\"; }\n\n.ion-ios-list:before {\n content: \"\"; }\n\n.ion-ios-list-outline:before {\n content: \"\"; }\n\n.ion-ios-location:before {\n content: \"\"; }\n\n.ion-ios-location-outline:before {\n content: \"\"; }\n\n.ion-ios-locked:before {\n content: \"\"; }\n\n.ion-ios-locked-outline:before {\n content: \"\"; }\n\n.ion-ios-loop:before {\n content: \"\"; }\n\n.ion-ios-loop-strong:before {\n content: \"\"; }\n\n.ion-ios-medical:before {\n content: \"\"; }\n\n.ion-ios-medical-outline:before {\n content: \"\"; }\n\n.ion-ios-medkit:before {\n content: \"\"; }\n\n.ion-ios-medkit-outline:before {\n content: \"\"; }\n\n.ion-ios-mic:before {\n content: \"\"; }\n\n.ion-ios-mic-off:before {\n content: \"\"; }\n\n.ion-ios-mic-outline:before {\n content: \"\"; }\n\n.ion-ios-minus:before {\n content: \"\"; }\n\n.ion-ios-minus-empty:before {\n content: \"\"; }\n\n.ion-ios-minus-outline:before {\n content: \"\"; }\n\n.ion-ios-monitor:before {\n content: \"\"; }\n\n.ion-ios-monitor-outline:before {\n content: \"\"; }\n\n.ion-ios-moon:before {\n content: \"\"; }\n\n.ion-ios-moon-outline:before {\n content: \"\"; }\n\n.ion-ios-more:before {\n content: \"\"; }\n\n.ion-ios-more-outline:before {\n content: \"\"; }\n\n.ion-ios-musical-note:before {\n content: \"\"; }\n\n.ion-ios-musical-notes:before {\n content: \"\"; }\n\n.ion-ios-navigate:before {\n content: \"\"; }\n\n.ion-ios-navigate-outline:before {\n content: \"\"; }\n\n.ion-ios-nutrition:before {\n content: \"\"; }\n\n.ion-ios-nutrition-outline:before {\n content: \"\"; }\n\n.ion-ios-paper:before {\n content: \"\"; }\n\n.ion-ios-paper-outline:before {\n content: \"\"; }\n\n.ion-ios-paperplane:before {\n content: \"\"; }\n\n.ion-ios-paperplane-outline:before {\n content: \"\"; }\n\n.ion-ios-partlysunny:before {\n content: \"\"; }\n\n.ion-ios-partlysunny-outline:before {\n content: \"\"; }\n\n.ion-ios-pause:before {\n content: \"\"; }\n\n.ion-ios-pause-outline:before {\n content: \"\"; }\n\n.ion-ios-paw:before {\n content: \"\"; }\n\n.ion-ios-paw-outline:before {\n content: \"\"; }\n\n.ion-ios-people:before {\n content: \"\"; }\n\n.ion-ios-people-outline:before {\n content: \"\"; }\n\n.ion-ios-person:before {\n content: \"\"; }\n\n.ion-ios-person-outline:before {\n content: \"\"; }\n\n.ion-ios-personadd:before {\n content: \"\"; }\n\n.ion-ios-personadd-outline:before {\n content: \"\"; }\n\n.ion-ios-photos:before {\n content: \"\"; }\n\n.ion-ios-photos-outline:before {\n content: \"\"; }\n\n.ion-ios-pie:before {\n content: \"\"; }\n\n.ion-ios-pie-outline:before {\n content: \"\"; }\n\n.ion-ios-pint:before {\n content: \"\"; }\n\n.ion-ios-pint-outline:before {\n content: \"\"; }\n\n.ion-ios-play:before {\n content: \"\"; }\n\n.ion-ios-play-outline:before {\n content: \"\"; }\n\n.ion-ios-plus:before {\n content: \"\"; }\n\n.ion-ios-plus-empty:before {\n content: \"\"; }\n\n.ion-ios-plus-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetag:before {\n content: \"\"; }\n\n.ion-ios-pricetag-outline:before {\n content: \"\"; }\n\n.ion-ios-pricetags:before {\n content: \"\"; }\n\n.ion-ios-pricetags-outline:before {\n content: \"\"; }\n\n.ion-ios-printer:before {\n content: \"\"; }\n\n.ion-ios-printer-outline:before {\n content: \"\"; }\n\n.ion-ios-pulse:before {\n content: \"\"; }\n\n.ion-ios-pulse-strong:before {\n content: \"\"; }\n\n.ion-ios-rainy:before {\n content: \"\"; }\n\n.ion-ios-rainy-outline:before {\n content: \"\"; }\n\n.ion-ios-recording:before {\n content: \"\"; }\n\n.ion-ios-recording-outline:before {\n content: \"\"; }\n\n.ion-ios-redo:before {\n content: \"\"; }\n\n.ion-ios-redo-outline:before {\n content: \"\"; }\n\n.ion-ios-refresh:before {\n content: \"\"; }\n\n.ion-ios-refresh-empty:before {\n content: \"\"; }\n\n.ion-ios-refresh-outline:before {\n content: \"\"; }\n\n.ion-ios-reload:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera:before {\n content: \"\"; }\n\n.ion-ios-reverse-camera-outline:before {\n content: \"\"; }\n\n.ion-ios-rewind:before {\n content: \"\"; }\n\n.ion-ios-rewind-outline:before {\n content: \"\"; }\n\n.ion-ios-rose:before {\n content: \"\"; }\n\n.ion-ios-rose-outline:before {\n content: \"\"; }\n\n.ion-ios-search:before {\n content: \"\"; }\n\n.ion-ios-search-strong:before {\n content: \"\"; }\n\n.ion-ios-settings:before {\n content: \"\"; }\n\n.ion-ios-settings-strong:before {\n content: \"\"; }\n\n.ion-ios-shuffle:before {\n content: \"\"; }\n\n.ion-ios-shuffle-strong:before {\n content: \"\"; }\n\n.ion-ios-skipbackward:before {\n content: \"\"; }\n\n.ion-ios-skipbackward-outline:before {\n content: \"\"; }\n\n.ion-ios-skipforward:before {\n content: \"\"; }\n\n.ion-ios-skipforward-outline:before {\n content: \"\"; }\n\n.ion-ios-snowy:before {\n content: \"\"; }\n\n.ion-ios-speedometer:before {\n content: \"\"; }\n\n.ion-ios-speedometer-outline:before {\n content: \"\"; }\n\n.ion-ios-star:before {\n content: \"\"; }\n\n.ion-ios-star-half:before {\n content: \"\"; }\n\n.ion-ios-star-outline:before {\n content: \"\"; }\n\n.ion-ios-stopwatch:before {\n content: \"\"; }\n\n.ion-ios-stopwatch-outline:before {\n content: \"\"; }\n\n.ion-ios-sunny:before {\n content: \"\"; }\n\n.ion-ios-sunny-outline:before {\n content: \"\"; }\n\n.ion-ios-telephone:before {\n content: \"\"; }\n\n.ion-ios-telephone-outline:before {\n content: \"\"; }\n\n.ion-ios-tennisball:before {\n content: \"\"; }\n\n.ion-ios-tennisball-outline:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm:before {\n content: \"\"; }\n\n.ion-ios-thunderstorm-outline:before {\n content: \"\"; }\n\n.ion-ios-time:before {\n content: \"\"; }\n\n.ion-ios-time-outline:before {\n content: \"\"; }\n\n.ion-ios-timer:before {\n content: \"\"; }\n\n.ion-ios-timer-outline:before {\n content: \"\"; }\n\n.ion-ios-toggle:before {\n content: \"\"; }\n\n.ion-ios-toggle-outline:before {\n content: \"\"; }\n\n.ion-ios-trash:before {\n content: \"\"; }\n\n.ion-ios-trash-outline:before {\n content: \"\"; }\n\n.ion-ios-undo:before {\n content: \"\"; }\n\n.ion-ios-undo-outline:before {\n content: \"\"; }\n\n.ion-ios-unlocked:before {\n content: \"\"; }\n\n.ion-ios-unlocked-outline:before {\n content: \"\"; }\n\n.ion-ios-upload:before {\n content: \"\"; }\n\n.ion-ios-upload-outline:before {\n content: \"\"; }\n\n.ion-ios-videocam:before {\n content: \"\"; }\n\n.ion-ios-videocam-outline:before {\n content: \"\"; }\n\n.ion-ios-volume-high:before {\n content: \"\"; }\n\n.ion-ios-volume-low:before {\n content: \"\"; }\n\n.ion-ios-wineglass:before {\n content: \"\"; }\n\n.ion-ios-wineglass-outline:before {\n content: \"\"; }\n\n.ion-ios-world:before {\n content: \"\"; }\n\n.ion-ios-world-outline:before {\n content: \"\"; }\n\n.ion-ipad:before {\n content: \"\"; }\n\n.ion-iphone:before {\n content: \"\"; }\n\n.ion-ipod:before {\n content: \"\"; }\n\n.ion-jet:before {\n content: \"\"; }\n\n.ion-key:before {\n content: \"\"; }\n\n.ion-knife:before {\n content: \"\"; }\n\n.ion-laptop:before {\n content: \"\"; }\n\n.ion-leaf:before {\n content: \"\"; }\n\n.ion-levels:before {\n content: \"\"; }\n\n.ion-lightbulb:before {\n content: \"\"; }\n\n.ion-link:before {\n content: \"\"; }\n\n.ion-load-a:before {\n content: \"\"; }\n\n.ion-load-b:before {\n content: \"\"; }\n\n.ion-load-c:before {\n content: \"\"; }\n\n.ion-load-d:before {\n content: \"\"; }\n\n.ion-location:before {\n content: \"\"; }\n\n.ion-lock-combination:before {\n content: \"\"; }\n\n.ion-locked:before {\n content: \"\"; }\n\n.ion-log-in:before {\n content: \"\"; }\n\n.ion-log-out:before {\n content: \"\"; }\n\n.ion-loop:before {\n content: \"\"; }\n\n.ion-magnet:before {\n content: \"\"; }\n\n.ion-male:before {\n content: \"\"; }\n\n.ion-man:before {\n content: \"\"; }\n\n.ion-map:before {\n content: \"\"; }\n\n.ion-medkit:before {\n content: \"\"; }\n\n.ion-merge:before {\n content: \"\"; }\n\n.ion-mic-a:before {\n content: \"\"; }\n\n.ion-mic-b:before {\n content: \"\"; }\n\n.ion-mic-c:before {\n content: \"\"; }\n\n.ion-minus:before {\n content: \"\"; }\n\n.ion-minus-circled:before {\n content: \"\"; }\n\n.ion-minus-round:before {\n content: \"\"; }\n\n.ion-model-s:before {\n content: \"\"; }\n\n.ion-monitor:before {\n content: \"\"; }\n\n.ion-more:before {\n content: \"\"; }\n\n.ion-mouse:before {\n content: \"\"; }\n\n.ion-music-note:before {\n content: \"\"; }\n\n.ion-navicon:before {\n content: \"\"; }\n\n.ion-navicon-round:before {\n content: \"\"; }\n\n.ion-navigate:before {\n content: \"\"; }\n\n.ion-network:before {\n content: \"\"; }\n\n.ion-no-smoking:before {\n content: \"\"; }\n\n.ion-nuclear:before {\n content: \"\"; }\n\n.ion-outlet:before {\n content: \"\"; }\n\n.ion-paintbrush:before {\n content: \"\"; }\n\n.ion-paintbucket:before {\n content: \"\"; }\n\n.ion-paper-airplane:before {\n content: \"\"; }\n\n.ion-paperclip:before {\n content: \"\"; }\n\n.ion-pause:before {\n content: \"\"; }\n\n.ion-person:before {\n content: \"\"; }\n\n.ion-person-add:before {\n content: \"\"; }\n\n.ion-person-stalker:before {\n content: \"\"; }\n\n.ion-pie-graph:before {\n content: \"\"; }\n\n.ion-pin:before {\n content: \"\"; }\n\n.ion-pinpoint:before {\n content: \"\"; }\n\n.ion-pizza:before {\n content: \"\"; }\n\n.ion-plane:before {\n content: \"\"; }\n\n.ion-planet:before {\n content: \"\"; }\n\n.ion-play:before {\n content: \"\"; }\n\n.ion-playstation:before {\n content: \"\"; }\n\n.ion-plus:before {\n content: \"\"; }\n\n.ion-plus-circled:before {\n content: \"\"; }\n\n.ion-plus-round:before {\n content: \"\"; }\n\n.ion-podium:before {\n content: \"\"; }\n\n.ion-pound:before {\n content: \"\"; }\n\n.ion-power:before {\n content: \"\"; }\n\n.ion-pricetag:before {\n content: \"\"; }\n\n.ion-pricetags:before {\n content: \"\"; }\n\n.ion-printer:before {\n content: \"\"; }\n\n.ion-pull-request:before {\n content: \"\"; }\n\n.ion-qr-scanner:before {\n content: \"\"; }\n\n.ion-quote:before {\n content: \"\"; }\n\n.ion-radio-waves:before {\n content: \"\"; }\n\n.ion-record:before {\n content: \"\"; }\n\n.ion-refresh:before {\n content: \"\"; }\n\n.ion-reply:before {\n content: \"\"; }\n\n.ion-reply-all:before {\n content: \"\"; }\n\n.ion-ribbon-a:before {\n content: \"\"; }\n\n.ion-ribbon-b:before {\n content: \"\"; }\n\n.ion-sad:before {\n content: \"\"; }\n\n.ion-sad-outline:before {\n content: \"\"; }\n\n.ion-scissors:before {\n content: \"\"; }\n\n.ion-search:before {\n content: \"\"; }\n\n.ion-settings:before {\n content: \"\"; }\n\n.ion-share:before {\n content: \"\"; }\n\n.ion-shuffle:before {\n content: \"\"; }\n\n.ion-skip-backward:before {\n content: \"\"; }\n\n.ion-skip-forward:before {\n content: \"\"; }\n\n.ion-social-android:before {\n content: \"\"; }\n\n.ion-social-android-outline:before {\n content: \"\"; }\n\n.ion-social-angular:before {\n content: \"\"; }\n\n.ion-social-angular-outline:before {\n content: \"\"; }\n\n.ion-social-apple:before {\n content: \"\"; }\n\n.ion-social-apple-outline:before {\n content: \"\"; }\n\n.ion-social-bitcoin:before {\n content: \"\"; }\n\n.ion-social-bitcoin-outline:before {\n content: \"\"; }\n\n.ion-social-buffer:before {\n content: \"\"; }\n\n.ion-social-buffer-outline:before {\n content: \"\"; }\n\n.ion-social-chrome:before {\n content: \"\"; }\n\n.ion-social-chrome-outline:before {\n content: \"\"; }\n\n.ion-social-codepen:before {\n content: \"\"; }\n\n.ion-social-codepen-outline:before {\n content: \"\"; }\n\n.ion-social-css3:before {\n content: \"\"; }\n\n.ion-social-css3-outline:before {\n content: \"\"; }\n\n.ion-social-designernews:before {\n content: \"\"; }\n\n.ion-social-designernews-outline:before {\n content: \"\"; }\n\n.ion-social-dribbble:before {\n content: \"\"; }\n\n.ion-social-dribbble-outline:before {\n content: \"\"; }\n\n.ion-social-dropbox:before {\n content: \"\"; }\n\n.ion-social-dropbox-outline:before {\n content: \"\"; }\n\n.ion-social-euro:before {\n content: \"\"; }\n\n.ion-social-euro-outline:before {\n content: \"\"; }\n\n.ion-social-facebook:before {\n content: \"\"; }\n\n.ion-social-facebook-outline:before {\n content: \"\"; }\n\n.ion-social-foursquare:before {\n content: \"\"; }\n\n.ion-social-foursquare-outline:before {\n content: \"\"; }\n\n.ion-social-freebsd-devil:before {\n content: \"\"; }\n\n.ion-social-github:before {\n content: \"\"; }\n\n.ion-social-github-outline:before {\n content: \"\"; }\n\n.ion-social-google:before {\n content: \"\"; }\n\n.ion-social-google-outline:before {\n content: \"\"; }\n\n.ion-social-googleplus:before {\n content: \"\"; }\n\n.ion-social-googleplus-outline:before {\n content: \"\"; }\n\n.ion-social-hackernews:before {\n content: \"\"; }\n\n.ion-social-hackernews-outline:before {\n content: \"\"; }\n\n.ion-social-html5:before {\n content: \"\"; }\n\n.ion-social-html5-outline:before {\n content: \"\"; }\n\n.ion-social-instagram:before {\n content: \"\"; }\n\n.ion-social-instagram-outline:before {\n content: \"\"; }\n\n.ion-social-javascript:before {\n content: \"\"; }\n\n.ion-social-javascript-outline:before {\n content: \"\"; }\n\n.ion-social-linkedin:before {\n content: \"\"; }\n\n.ion-social-linkedin-outline:before {\n content: \"\"; }\n\n.ion-social-markdown:before {\n content: \"\"; }\n\n.ion-social-nodejs:before {\n content: \"\"; }\n\n.ion-social-octocat:before {\n content: \"\"; }\n\n.ion-social-pinterest:before {\n content: \"\"; }\n\n.ion-social-pinterest-outline:before {\n content: \"\"; }\n\n.ion-social-python:before {\n content: \"\"; }\n\n.ion-social-reddit:before {\n content: \"\"; }\n\n.ion-social-reddit-outline:before {\n content: \"\"; }\n\n.ion-social-rss:before {\n content: \"\"; }\n\n.ion-social-rss-outline:before {\n content: \"\"; }\n\n.ion-social-sass:before {\n content: \"\"; }\n\n.ion-social-skype:before {\n content: \"\"; }\n\n.ion-social-skype-outline:before {\n content: \"\"; }\n\n.ion-social-snapchat:before {\n content: \"\"; }\n\n.ion-social-snapchat-outline:before {\n content: \"\"; }\n\n.ion-social-tumblr:before {\n content: \"\"; }\n\n.ion-social-tumblr-outline:before {\n content: \"\"; }\n\n.ion-social-tux:before {\n content: \"\"; }\n\n.ion-social-twitch:before {\n content: \"\"; }\n\n.ion-social-twitch-outline:before {\n content: \"\"; }\n\n.ion-social-twitter:before {\n content: \"\"; }\n\n.ion-social-twitter-outline:before {\n content: \"\"; }\n\n.ion-social-usd:before {\n content: \"\"; }\n\n.ion-social-usd-outline:before {\n content: \"\"; }\n\n.ion-social-vimeo:before {\n content: \"\"; }\n\n.ion-social-vimeo-outline:before {\n content: \"\"; }\n\n.ion-social-whatsapp:before {\n content: \"\"; }\n\n.ion-social-whatsapp-outline:before {\n content: \"\"; }\n\n.ion-social-windows:before {\n content: \"\"; }\n\n.ion-social-windows-outline:before {\n content: \"\"; }\n\n.ion-social-wordpress:before {\n content: \"\"; }\n\n.ion-social-wordpress-outline:before {\n content: \"\"; }\n\n.ion-social-yahoo:before {\n content: \"\"; }\n\n.ion-social-yahoo-outline:before {\n content: \"\"; }\n\n.ion-social-yen:before {\n content: \"\"; }\n\n.ion-social-yen-outline:before {\n content: \"\"; }\n\n.ion-social-youtube:before {\n content: \"\"; }\n\n.ion-social-youtube-outline:before {\n content: \"\"; }\n\n.ion-soup-can:before {\n content: \"\"; }\n\n.ion-soup-can-outline:before {\n content: \"\"; }\n\n.ion-speakerphone:before {\n content: \"\"; }\n\n.ion-speedometer:before {\n content: \"\"; }\n\n.ion-spoon:before {\n content: \"\"; }\n\n.ion-star:before {\n content: \"\"; }\n\n.ion-stats-bars:before {\n content: \"\"; }\n\n.ion-steam:before {\n content: \"\"; }\n\n.ion-stop:before {\n content: \"\"; }\n\n.ion-thermometer:before {\n content: \"\"; }\n\n.ion-thumbsdown:before {\n content: \"\"; }\n\n.ion-thumbsup:before {\n content: \"\"; }\n\n.ion-toggle:before {\n content: \"\"; }\n\n.ion-toggle-filled:before {\n content: \"\"; }\n\n.ion-transgender:before {\n content: \"\"; }\n\n.ion-trash-a:before {\n content: \"\"; }\n\n.ion-trash-b:before {\n content: \"\"; }\n\n.ion-trophy:before {\n content: \"\"; }\n\n.ion-tshirt:before {\n content: \"\"; }\n\n.ion-tshirt-outline:before {\n content: \"\"; }\n\n.ion-umbrella:before {\n content: \"\"; }\n\n.ion-university:before {\n content: \"\"; }\n\n.ion-unlocked:before {\n content: \"\"; }\n\n.ion-upload:before {\n content: \"\"; }\n\n.ion-usb:before {\n content: \"\"; }\n\n.ion-videocamera:before {\n content: \"\"; }\n\n.ion-volume-high:before {\n content: \"\"; }\n\n.ion-volume-low:before {\n content: \"\"; }\n\n.ion-volume-medium:before {\n content: \"\"; }\n\n.ion-volume-mute:before {\n content: \"\"; }\n\n.ion-wand:before {\n content: \"\"; }\n\n.ion-waterdrop:before {\n content: \"\"; }\n\n.ion-wifi:before {\n content: \"\"; }\n\n.ion-wineglass:before {\n content: \"\"; }\n\n.ion-woman:before {\n content: \"\"; }\n\n.ion-wrench:before {\n content: \"\"; }\n\n.ion-xbox:before {\n content: \"\"; }\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline; }\n\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n[hidden],\ntemplate {\n display: none; }\n\na {\n background-color: transparent; }\n\na:active,\na:hover {\n outline: 0; }\n\nabbr[title] {\n border-bottom: 1px dotted; }\n\nb,\nstrong {\n font-weight: bold; }\n\ndfn {\n font-style: italic; }\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nmark {\n background: #ff0;\n color: #000; }\n\nsmall {\n font-size: 80%; }\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\nimg {\n border: 0; }\n\nsvg:not(:root) {\n overflow: hidden; }\n\nfigure {\n margin: 1em 40px; }\n\nhr {\n box-sizing: content-box;\n height: 0; }\n\npre {\n overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0; }\n\nbutton {\n overflow: visible; }\n\nbutton,\nselect {\n text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput {\n line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n border: 0;\n padding: 0; }\n\ntextarea {\n overflow: auto; }\n\noptgroup {\n font-weight: bold; }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\"; }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; }\n .navbar {\n display: none; }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important; }\n .label {\n border: 1px solid #000; }\n .table {\n border-collapse: collapse !important; }\n .table td,\n .table th {\n background-color: #fff !important; }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important; } }\n\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: transparent; }\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.428571429;\n color: #333333;\n background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\na {\n color: #67808c;\n text-decoration: none; }\n a:hover, a:focus {\n color: #465760;\n text-decoration: underline; }\n a:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\nfigure {\n margin: 0; }\n\nimg {\n vertical-align: middle; }\n\n.img-responsive {\n display: block;\n max-width: 100%;\n height: auto; }\n\n.img-rounded {\n border-radius: 4px; }\n\n.img-thumbnail {\n padding: 4px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto; }\n\n.img-circle {\n border-radius: 50%; }\n\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee; }\n\n.sr-only, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto; }\n\n[role=\"button\"] {\n cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n h1 small,\n h1 .small, h2 small,\n h2 .small, h3 small,\n h3 .small, h4 small,\n h4 .small, h5 small,\n h5 .small, h6 small,\n h6 .small,\n .h1 small,\n .h1 .small, .h2 small,\n .h2 .small, .h3 small,\n .h3 .small, .h4 small,\n .h4 .small, .h5 small,\n .h5 .small, .h6 small,\n .h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: 20px;\n margin-bottom: 10px; }\n h1 small,\n h1 .small, .h1 small,\n .h1 .small,\n h2 small,\n h2 .small, .h2 small,\n .h2 .small,\n h3 small,\n h3 .small, .h3 small,\n .h3 .small {\n font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: 10px;\n margin-bottom: 10px; }\n h4 small,\n h4 .small, .h4 small,\n .h4 .small,\n h5 small,\n h5 .small, .h5 small,\n .h5 .small,\n h6 small,\n h6 .small, .h6 small,\n .h6 .small {\n font-size: 75%; }\n\nh1, .h1 {\n font-size: 36px; }\n\nh2, .h2 {\n font-size: 30px; }\n\nh3, .h3 {\n font-size: 24px; }\n\nh4, .h4 {\n font-size: 18px; }\n\nh5, .h5 {\n font-size: 14px; }\n\nh6, .h6 {\n font-size: 12px; }\n\np {\n margin: 0 0 10px; }\n\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4; }\n @media (min-width: 768px) {\n .lead {\n font-size: 21px; } }\n\nsmall,\n.small {\n font-size: 85%; }\n\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em; }\n\n.text-left {\n text-align: left; }\n\n.text-right, .component-inline-update {\n text-align: right; }\n\n.text-center, body.dashboard .sidebar .sidebar-inner .quick-add-incident {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n.text-nowrap {\n white-space: nowrap; }\n\n.text-lowercase {\n text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n text-transform: uppercase; }\n\n.text-capitalize {\n text-transform: capitalize; }\n\n.text-muted {\n color: #777777; }\n\n.text-primary {\n color: #67808c; }\n\na.text-primary:hover,\na.text-primary:focus {\n color: #51656f; }\n\n.text-success {\n color: #3c763d; }\n\na.text-success:hover,\na.text-success:focus {\n color: #2b542c; }\n\n.text-info {\n color: #31708f; }\n\na.text-info:hover,\na.text-info:focus {\n color: #245269; }\n\n.text-warning {\n color: #8a6d3b; }\n\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c; }\n\n.text-danger {\n color: #a94442; }\n\na.text-danger:hover,\na.text-danger:focus {\n color: #843534; }\n\n.bg-primary {\n color: #fff; }\n\n.bg-primary {\n background-color: #67808c; }\n\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #51656f; }\n\n.bg-success {\n background-color: #dff0d8; }\n\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3; }\n\n.bg-info {\n background-color: #d9edf7; }\n\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee; }\n\n.bg-warning {\n background-color: #fcf8e3; }\n\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5; }\n\n.bg-danger {\n background-color: #f2dede; }\n\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9; }\n\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px; }\n ul ul,\n ul ol,\n ol ul,\n ol ol {\n margin-bottom: 0; }\n\n.list-unstyled {\n padding-left: 0;\n list-style: none; }\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px; }\n .list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px; }\n\ndl {\n margin-top: 0;\n margin-bottom: 20px; }\n\ndt,\ndd {\n line-height: 1.428571429; }\n\ndt {\n font-weight: bold; }\n\ndd {\n margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n content: \" \";\n display: table; }\n\n.dl-horizontal dd:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .dl-horizontal dd {\n margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777; }\n\n.initialism {\n font-size: 90%; }\n\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee; }\n blockquote p:last-child,\n blockquote ul:last-child,\n blockquote ol:last-child {\n margin-bottom: 0; }\n blockquote footer,\n blockquote small,\n blockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.428571429;\n color: #777777; }\n blockquote footer:before,\n blockquote small:before,\n blockquote .small:before {\n content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right; }\n .blockquote-reverse footer:before,\n .blockquote-reverse small:before,\n .blockquote-reverse .small:before,\n blockquote.pull-right footer:before,\n blockquote.pull-right small:before,\n blockquote.pull-right .small:before {\n content: ''; }\n .blockquote-reverse footer:after,\n .blockquote-reverse small:after,\n .blockquote-reverse .small:after,\n blockquote.pull-right footer:after,\n blockquote.pull-right small:after,\n blockquote.pull-right .small:after {\n content: '\\00A0 \\2014'; }\n\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 3px; }\n\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 2px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n kbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none; }\n\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.428571429;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 3px; }\n pre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0; }\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll; }\n\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container:before, .container:after {\n content: \" \";\n display: table; }\n .container:after {\n clear: both; }\n @media (min-width: 768px) {\n .container {\n width: 750px; } }\n @media (min-width: 992px) {\n .container {\n width: 970px; } }\n @media (min-width: 1200px) {\n .container {\n width: 1170px; } }\n\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container-fluid:before, .container-fluid:after {\n content: \" \";\n display: table; }\n .container-fluid:after {\n clear: both; }\n\n.row, .setup-page .steps {\n margin-left: -15px;\n margin-right: -15px; }\n .row:before, .setup-page .steps:before, .row:after, .setup-page .steps:after {\n content: \" \";\n display: table; }\n .row:after, .setup-page .steps:after {\n clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .setup-page .steps .step, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .setup-page .steps .step, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left; }\n\n.col-xs-1 {\n width: 8.3333333333%; }\n\n.col-xs-2 {\n width: 16.6666666667%; }\n\n.col-xs-3, .setup-page .steps .step {\n width: 25%; }\n\n.col-xs-4 {\n width: 33.3333333333%; }\n\n.col-xs-5 {\n width: 41.6666666667%; }\n\n.col-xs-6 {\n width: 50%; }\n\n.col-xs-7 {\n width: 58.3333333333%; }\n\n.col-xs-8 {\n width: 66.6666666667%; }\n\n.col-xs-9 {\n width: 75%; }\n\n.col-xs-10 {\n width: 83.3333333333%; }\n\n.col-xs-11 {\n width: 91.6666666667%; }\n\n.col-xs-12 {\n width: 100%; }\n\n.col-xs-pull-0 {\n right: auto; }\n\n.col-xs-pull-1 {\n right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n right: 25%; }\n\n.col-xs-pull-4 {\n right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n right: 50%; }\n\n.col-xs-pull-7 {\n right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n right: 75%; }\n\n.col-xs-pull-10 {\n right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n right: 100%; }\n\n.col-xs-push-0 {\n left: auto; }\n\n.col-xs-push-1 {\n left: 8.3333333333%; }\n\n.col-xs-push-2 {\n left: 16.6666666667%; }\n\n.col-xs-push-3 {\n left: 25%; }\n\n.col-xs-push-4 {\n left: 33.3333333333%; }\n\n.col-xs-push-5 {\n left: 41.6666666667%; }\n\n.col-xs-push-6 {\n left: 50%; }\n\n.col-xs-push-7 {\n left: 58.3333333333%; }\n\n.col-xs-push-8 {\n left: 66.6666666667%; }\n\n.col-xs-push-9 {\n left: 75%; }\n\n.col-xs-push-10 {\n left: 83.3333333333%; }\n\n.col-xs-push-11 {\n left: 91.6666666667%; }\n\n.col-xs-push-12 {\n left: 100%; }\n\n.col-xs-offset-0 {\n margin-left: 0%; }\n\n.col-xs-offset-1 {\n margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n margin-left: 25%; }\n\n.col-xs-offset-4 {\n margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n margin-left: 50%; }\n\n.col-xs-offset-7 {\n margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n margin-left: 75%; }\n\n.col-xs-offset-10 {\n margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n margin-left: 100%; }\n\n@media (min-width: 768px) {\n .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 {\n float: left; }\n .col-sm-1 {\n width: 8.3333333333%; }\n .col-sm-2 {\n width: 16.6666666667%; }\n .col-sm-3 {\n width: 25%; }\n .col-sm-4 {\n width: 33.3333333333%; }\n .col-sm-5 {\n width: 41.6666666667%; }\n .col-sm-6 {\n width: 50%; }\n .col-sm-7 {\n width: 58.3333333333%; }\n .col-sm-8 {\n width: 66.6666666667%; }\n .col-sm-9 {\n width: 75%; }\n .col-sm-10 {\n width: 83.3333333333%; }\n .col-sm-11 {\n width: 91.6666666667%; }\n .col-sm-12 {\n width: 100%; }\n .col-sm-pull-0 {\n right: auto; }\n .col-sm-pull-1 {\n right: 8.3333333333%; }\n .col-sm-pull-2 {\n right: 16.6666666667%; }\n .col-sm-pull-3 {\n right: 25%; }\n .col-sm-pull-4 {\n right: 33.3333333333%; }\n .col-sm-pull-5 {\n right: 41.6666666667%; }\n .col-sm-pull-6 {\n right: 50%; }\n .col-sm-pull-7 {\n right: 58.3333333333%; }\n .col-sm-pull-8 {\n right: 66.6666666667%; }\n .col-sm-pull-9 {\n right: 75%; }\n .col-sm-pull-10 {\n right: 83.3333333333%; }\n .col-sm-pull-11 {\n right: 91.6666666667%; }\n .col-sm-pull-12 {\n right: 100%; }\n .col-sm-push-0 {\n left: auto; }\n .col-sm-push-1 {\n left: 8.3333333333%; }\n .col-sm-push-2 {\n left: 16.6666666667%; }\n .col-sm-push-3 {\n left: 25%; }\n .col-sm-push-4 {\n left: 33.3333333333%; }\n .col-sm-push-5 {\n left: 41.6666666667%; }\n .col-sm-push-6 {\n left: 50%; }\n .col-sm-push-7 {\n left: 58.3333333333%; }\n .col-sm-push-8 {\n left: 66.6666666667%; }\n .col-sm-push-9 {\n left: 75%; }\n .col-sm-push-10 {\n left: 83.3333333333%; }\n .col-sm-push-11 {\n left: 91.6666666667%; }\n .col-sm-push-12 {\n left: 100%; }\n .col-sm-offset-0 {\n margin-left: 0%; }\n .col-sm-offset-1 {\n margin-left: 8.3333333333%; }\n .col-sm-offset-2 {\n margin-left: 16.6666666667%; }\n .col-sm-offset-3 {\n margin-left: 25%; }\n .col-sm-offset-4 {\n margin-left: 33.3333333333%; }\n .col-sm-offset-5 {\n margin-left: 41.6666666667%; }\n .col-sm-offset-6 {\n margin-left: 50%; }\n .col-sm-offset-7 {\n margin-left: 58.3333333333%; }\n .col-sm-offset-8 {\n margin-left: 66.6666666667%; }\n .col-sm-offset-9 {\n margin-left: 75%; }\n .col-sm-offset-10 {\n margin-left: 83.3333333333%; }\n .col-sm-offset-11 {\n margin-left: 91.6666666667%; }\n .col-sm-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 992px) {\n .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 {\n float: left; }\n .col-md-1 {\n width: 8.3333333333%; }\n .col-md-2 {\n width: 16.6666666667%; }\n .col-md-3 {\n width: 25%; }\n .col-md-4 {\n width: 33.3333333333%; }\n .col-md-5 {\n width: 41.6666666667%; }\n .col-md-6 {\n width: 50%; }\n .col-md-7 {\n width: 58.3333333333%; }\n .col-md-8 {\n width: 66.6666666667%; }\n .col-md-9 {\n width: 75%; }\n .col-md-10 {\n width: 83.3333333333%; }\n .col-md-11 {\n width: 91.6666666667%; }\n .col-md-12 {\n width: 100%; }\n .col-md-pull-0 {\n right: auto; }\n .col-md-pull-1 {\n right: 8.3333333333%; }\n .col-md-pull-2 {\n right: 16.6666666667%; }\n .col-md-pull-3 {\n right: 25%; }\n .col-md-pull-4 {\n right: 33.3333333333%; }\n .col-md-pull-5 {\n right: 41.6666666667%; }\n .col-md-pull-6 {\n right: 50%; }\n .col-md-pull-7 {\n right: 58.3333333333%; }\n .col-md-pull-8 {\n right: 66.6666666667%; }\n .col-md-pull-9 {\n right: 75%; }\n .col-md-pull-10 {\n right: 83.3333333333%; }\n .col-md-pull-11 {\n right: 91.6666666667%; }\n .col-md-pull-12 {\n right: 100%; }\n .col-md-push-0 {\n left: auto; }\n .col-md-push-1 {\n left: 8.3333333333%; }\n .col-md-push-2 {\n left: 16.6666666667%; }\n .col-md-push-3 {\n left: 25%; }\n .col-md-push-4 {\n left: 33.3333333333%; }\n .col-md-push-5 {\n left: 41.6666666667%; }\n .col-md-push-6 {\n left: 50%; }\n .col-md-push-7 {\n left: 58.3333333333%; }\n .col-md-push-8 {\n left: 66.6666666667%; }\n .col-md-push-9 {\n left: 75%; }\n .col-md-push-10 {\n left: 83.3333333333%; }\n .col-md-push-11 {\n left: 91.6666666667%; }\n .col-md-push-12 {\n left: 100%; }\n .col-md-offset-0 {\n margin-left: 0%; }\n .col-md-offset-1 {\n margin-left: 8.3333333333%; }\n .col-md-offset-2 {\n margin-left: 16.6666666667%; }\n .col-md-offset-3 {\n margin-left: 25%; }\n .col-md-offset-4 {\n margin-left: 33.3333333333%; }\n .col-md-offset-5 {\n margin-left: 41.6666666667%; }\n .col-md-offset-6 {\n margin-left: 50%; }\n .col-md-offset-7 {\n margin-left: 58.3333333333%; }\n .col-md-offset-8 {\n margin-left: 66.6666666667%; }\n .col-md-offset-9 {\n margin-left: 75%; }\n .col-md-offset-10 {\n margin-left: 83.3333333333%; }\n .col-md-offset-11 {\n margin-left: 91.6666666667%; }\n .col-md-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 1200px) {\n .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 {\n float: left; }\n .col-lg-1 {\n width: 8.3333333333%; }\n .col-lg-2 {\n width: 16.6666666667%; }\n .col-lg-3 {\n width: 25%; }\n .col-lg-4 {\n width: 33.3333333333%; }\n .col-lg-5 {\n width: 41.6666666667%; }\n .col-lg-6 {\n width: 50%; }\n .col-lg-7 {\n width: 58.3333333333%; }\n .col-lg-8 {\n width: 66.6666666667%; }\n .col-lg-9 {\n width: 75%; }\n .col-lg-10 {\n width: 83.3333333333%; }\n .col-lg-11 {\n width: 91.6666666667%; }\n .col-lg-12 {\n width: 100%; }\n .col-lg-pull-0 {\n right: auto; }\n .col-lg-pull-1 {\n right: 8.3333333333%; }\n .col-lg-pull-2 {\n right: 16.6666666667%; }\n .col-lg-pull-3 {\n right: 25%; }\n .col-lg-pull-4 {\n right: 33.3333333333%; }\n .col-lg-pull-5 {\n right: 41.6666666667%; }\n .col-lg-pull-6 {\n right: 50%; }\n .col-lg-pull-7 {\n right: 58.3333333333%; }\n .col-lg-pull-8 {\n right: 66.6666666667%; }\n .col-lg-pull-9 {\n right: 75%; }\n .col-lg-pull-10 {\n right: 83.3333333333%; }\n .col-lg-pull-11 {\n right: 91.6666666667%; }\n .col-lg-pull-12 {\n right: 100%; }\n .col-lg-push-0 {\n left: auto; }\n .col-lg-push-1 {\n left: 8.3333333333%; }\n .col-lg-push-2 {\n left: 16.6666666667%; }\n .col-lg-push-3 {\n left: 25%; }\n .col-lg-push-4 {\n left: 33.3333333333%; }\n .col-lg-push-5 {\n left: 41.6666666667%; }\n .col-lg-push-6 {\n left: 50%; }\n .col-lg-push-7 {\n left: 58.3333333333%; }\n .col-lg-push-8 {\n left: 66.6666666667%; }\n .col-lg-push-9 {\n left: 75%; }\n .col-lg-push-10 {\n left: 83.3333333333%; }\n .col-lg-push-11 {\n left: 91.6666666667%; }\n .col-lg-push-12 {\n left: 100%; }\n .col-lg-offset-0 {\n margin-left: 0%; }\n .col-lg-offset-1 {\n margin-left: 8.3333333333%; }\n .col-lg-offset-2 {\n margin-left: 16.6666666667%; }\n .col-lg-offset-3 {\n margin-left: 25%; }\n .col-lg-offset-4 {\n margin-left: 33.3333333333%; }\n .col-lg-offset-5 {\n margin-left: 41.6666666667%; }\n .col-lg-offset-6 {\n margin-left: 50%; }\n .col-lg-offset-7 {\n margin-left: 58.3333333333%; }\n .col-lg-offset-8 {\n margin-left: 66.6666666667%; }\n .col-lg-offset-9 {\n margin-left: 75%; }\n .col-lg-offset-10 {\n margin-left: 83.3333333333%; }\n .col-lg-offset-11 {\n margin-left: 91.6666666667%; }\n .col-lg-offset-12 {\n margin-left: 100%; } }\n\ntable {\n background-color: transparent; }\n\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left; }\n\nth {\n text-align: left; }\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px; }\n .table > thead > tr > th,\n .table > thead > tr > td,\n .table > tbody > tr > th,\n .table > tbody > tr > td,\n .table > tfoot > tr > th,\n .table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.428571429;\n vertical-align: top;\n border-top: 1px solid #ddd; }\n .table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd; }\n .table > caption + thead > tr:first-child > th,\n .table > caption + thead > tr:first-child > td,\n .table > colgroup + thead > tr:first-child > th,\n .table > colgroup + thead > tr:first-child > td,\n .table > thead:first-child > tr:first-child > th,\n .table > thead:first-child > tr:first-child > td {\n border-top: 0; }\n .table > tbody + tbody {\n border-top: 2px solid #ddd; }\n .table .table {\n background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n padding: 5px; }\n\n.table-bordered {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td,\n .table-bordered > tbody > tr > th,\n .table-bordered > tbody > tr > td,\n .table-bordered > tfoot > tr > th,\n .table-bordered > tfoot > tr > td {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td {\n border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc; }\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; }\n @media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd; }\n .table-responsive > .table {\n margin-bottom: 0; }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap; }\n .table-responsive > .table-bordered {\n border: 0; }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0; } }\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\ninput[type=\"file\"] {\n display: block; }\n\ninput[type=\"range\"] {\n display: block;\n width: 100%; }\n\nselect[multiple],\nselect[size] {\n height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .form-control:-ms-input-placeholder {\n color: #999; }\n .form-control::-webkit-input-placeholder {\n color: #999; }\n .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .form-control[disabled], .form-control[readonly],\n fieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .form-control[disabled],\n fieldset[disabled] .form-control {\n cursor: not-allowed; }\n\ntextarea.form-control {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px; }\n input[type=\"date\"].input-sm, .input-group-sm > input[type=\"date\"].form-control,\n .input-group-sm > input[type=\"date\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm input[type=\"date\"],\n input[type=\"time\"].input-sm,\n .input-group-sm > input[type=\"time\"].form-control,\n .input-group-sm > input[type=\"time\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-sm,\n .input-group-sm > input[type=\"datetime-local\"].form-control,\n .input-group-sm > input[type=\"datetime-local\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-sm,\n .input-group-sm > input[type=\"month\"].form-control,\n .input-group-sm > input[type=\"month\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n input[type=\"month\"] {\n line-height: 30px; }\n input[type=\"date\"].input-lg, .input-group-lg > input[type=\"date\"].form-control,\n .input-group-lg > input[type=\"date\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg input[type=\"date\"],\n input[type=\"time\"].input-lg,\n .input-group-lg > input[type=\"time\"].form-control,\n .input-group-lg > input[type=\"time\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-lg,\n .input-group-lg > input[type=\"datetime-local\"].form-control,\n .input-group-lg > input[type=\"datetime-local\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-lg,\n .input-group-lg > input[type=\"month\"].form-control,\n .input-group-lg > input[type=\"month\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n input[type=\"month\"] {\n line-height: 46px; } }\n\n.form-group {\n margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .radio label,\n .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n cursor: not-allowed; }\n\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n .input-group-lg > .form-control-static.input-group-addon,\n .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n .input-group-sm > .form-control-static.input-group-addon,\n .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select[multiple].form-control,\n.input-group-sm > select[multiple].input-group-addon,\n.input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto; }\n\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select[multiple].form-control,\n.input-group-lg > select[multiple].input-group-addon,\n.input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto; }\n\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.has-feedback {\n position: relative; }\n .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,\n.input-group-lg > .input-group-addon + .form-control-feedback,\n.input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,\n.input-group-sm > .input-group-addon + .form-control-feedback,\n.input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d; }\n\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442; }\n\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after ~ .form-control-feedback {\n top: 0; }\n\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .form-inline .form-control-static {\n display: inline-block; }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto; }\n .form-inline .input-group > .form-control {\n width: 100%; }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0; }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px; }\n\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n border-radius: 3px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .btn:hover, .btn:focus, .btn.focus {\n color: #333;\n text-decoration: none; }\n .btn:active, .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn.disabled, .btn[disabled],\n fieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none; }\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none; }\n\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .btn-default:focus, .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,\n .open > .btn-default.dropdown-toggle:hover,\n .open > .btn-default.dropdown-toggle:focus,\n .open > .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n background-image: none; }\n .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,\n fieldset[disabled] .btn-default:hover,\n fieldset[disabled] .btn-default:focus,\n fieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.btn-primary {\n color: #fff;\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #51656f;\n border-color: #262f34; }\n .btn-primary:hover {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #51656f;\n border-color: #42525a; }\n .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,\n .open > .btn-primary.dropdown-toggle:hover,\n .open > .btn-primary.dropdown-toggle:focus,\n .open > .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #42525a;\n border-color: #262f34; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n background-image: none; }\n .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,\n fieldset[disabled] .btn-primary:hover,\n fieldset[disabled] .btn-primary:focus,\n fieldset[disabled] .btn-primary.focus {\n background-color: #67808c;\n border-color: #5c727d; }\n .btn-primary .badge {\n color: #67808c;\n background-color: #fff; }\n\n.btn-success {\n color: #fff;\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #64a71a;\n border-color: #2f4f0c; }\n .btn-success:hover {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #64a71a;\n border-color: #518815; }\n .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,\n .open > .btn-success.dropdown-toggle:hover,\n .open > .btn-success.dropdown-toggle:focus,\n .open > .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #518815;\n border-color: #2f4f0c; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n background-image: none; }\n .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,\n fieldset[disabled] .btn-success:hover,\n fieldset[disabled] .btn-success:focus,\n fieldset[disabled] .btn-success.focus {\n background-color: #7ED321;\n border-color: #71bd1e; }\n .btn-success .badge {\n color: #7ED321;\n background-color: #fff; }\n\n.btn-info {\n color: #fff;\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #217dbb;\n border-color: #124364; }\n .btn-info:hover {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #217dbb;\n border-color: #1c699d; }\n .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,\n .open > .btn-info.dropdown-toggle:hover,\n .open > .btn-info.dropdown-toggle:focus,\n .open > .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #1c699d;\n border-color: #124364; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n background-image: none; }\n .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,\n fieldset[disabled] .btn-info:hover,\n fieldset[disabled] .btn-info:focus,\n fieldset[disabled] .btn-info.focus {\n background-color: #3498db;\n border-color: #258cd1; }\n .btn-info .badge {\n color: #3498db;\n background-color: #fff; }\n\n.btn-warning {\n color: #fff;\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning:focus, .btn-warning.focus {\n color: #fff;\n background-color: #cc6d00;\n border-color: #663600; }\n .btn-warning:hover {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #cc6d00;\n border-color: #a85a00; }\n .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,\n .open > .btn-warning.dropdown-toggle:hover,\n .open > .btn-warning.dropdown-toggle:focus,\n .open > .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #a85a00;\n border-color: #663600; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n background-image: none; }\n .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,\n fieldset[disabled] .btn-warning:hover,\n fieldset[disabled] .btn-warning:focus,\n fieldset[disabled] .btn-warning.focus {\n background-color: #FF8800;\n border-color: #e67a00; }\n .btn-warning .badge {\n color: #FF8800;\n background-color: #fff; }\n\n.btn-danger {\n color: #fff;\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #d50000; }\n .btn-danger:hover {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #ff3c3c;\n border-color: #ff1818; }\n .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,\n .open > .btn-danger.dropdown-toggle:hover,\n .open > .btn-danger.dropdown-toggle:focus,\n .open > .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ff1818;\n border-color: #d50000; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n background-image: none; }\n .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,\n fieldset[disabled] .btn-danger:hover,\n fieldset[disabled] .btn-danger:focus,\n fieldset[disabled] .btn-danger.focus {\n background-color: #ff6f6f;\n border-color: #ff5656; }\n .btn-danger .badge {\n color: #ff6f6f;\n background-color: #fff; }\n\n.btn-link {\n color: #67808c;\n font-weight: normal;\n border-radius: 0; }\n .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n fieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none; }\n .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n border-color: transparent; }\n .btn-link:hover, .btn-link:focus {\n color: #465760;\n text-decoration: underline;\n background-color: transparent; }\n .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n fieldset[disabled] .btn-link:hover,\n fieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 4px; }\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-xs, .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 2px; }\n\n.btn-block {\n display: block;\n width: 100%; }\n\n.btn-block + .btn-block {\n margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%; }\n\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear; }\n .fade.in {\n opacity: 1; }\n\n.collapse {\n display: none; }\n .collapse.in {\n display: block; }\n\ntr.collapse.in {\n display: table-row; }\n\ntbody.collapse.in {\n display: table-row-group; }\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease; }\n\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n position: relative; }\n\n.dropdown-toggle:focus {\n outline: 0; }\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box; }\n .dropdown-menu.pull-right {\n right: 0;\n left: auto; }\n .dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.428571429;\n color: #333333;\n white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #67808c; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed; }\n\n.open > .dropdown-menu {\n display: block; }\n\n.open > a {\n outline: 0; }\n\n.dropdown-menu-right {\n left: auto;\n right: 0; }\n\n.dropdown-menu-left {\n left: 0;\n right: auto; }\n\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.428571429;\n color: #777777;\n white-space: nowrap; }\n\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990; }\n\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto; }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .btn-group > .btn,\n .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n .btn-group-vertical > .btn:hover,\n .btn-group-vertical > .btn:focus,\n .btn-group-vertical > .btn:active,\n .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.btn-toolbar {\n margin-left: -5px; }\n .btn-toolbar:before, .btn-toolbar:after {\n content: \" \";\n display: table; }\n .btn-toolbar:after {\n clear: both; }\n .btn-toolbar .btn,\n .btn-toolbar .btn-group,\n .btn-toolbar .input-group {\n float: left; }\n .btn-toolbar > .btn,\n .btn-toolbar > .btn-group,\n .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.btn-group > .btn:first-child {\n margin-left: 0; }\n .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.btn .caret {\n margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .btn-group-justified > .btn,\n .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .input-group .form-control:focus {\n z-index: 3; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell; }\n .input-group-addon:not(:first-child):not(:last-child),\n .input-group-btn:not(:first-child):not(:last-child),\n .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 3px; }\n .input-group-addon.input-sm,\n .input-group-sm > .input-group-addon,\n .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 2px; }\n .input-group-addon.input-lg,\n .input-group-lg > .input-group-addon,\n .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 4px; }\n .input-group-addon input[type=\"radio\"],\n .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n border-left: 0; }\n\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .input-group-btn > .btn {\n position: relative; }\n .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n z-index: 2; }\n .input-group-btn:first-child > .btn,\n .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .input-group-btn:last-child > .btn,\n .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none; }\n .nav:before, .nav:after {\n content: \" \";\n display: table; }\n .nav:after {\n clear: both; }\n .nav > li {\n position: relative;\n display: block; }\n .nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px; }\n .nav > li > a:hover, .nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .nav > li.disabled > a {\n color: #777777; }\n .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed; }\n .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #67808c; }\n .nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .nav > li > a > img {\n max-width: none; }\n\n.nav-tabs {\n border-bottom: 1px solid #ddd; }\n .nav-tabs > li {\n float: left;\n margin-bottom: -1px; }\n .nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.428571429;\n border: 1px solid transparent;\n border-radius: 3px 3px 0 0; }\n .nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd; }\n .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default; }\n\n.nav-pills > li {\n float: left; }\n .nav-pills > li > a {\n border-radius: 3px; }\n .nav-pills > li + li {\n margin-left: 2px; }\n .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #67808c; }\n\n.nav-stacked > li {\n float: none; }\n .nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n width: 100%; }\n .nav-justified > li, .nav-tabs.nav-justified > li {\n float: none; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px; }\n .nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto; }\n @media (min-width: 768px) {\n .nav-justified > li, .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n border-bottom: 0; }\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 3px; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd; }\n @media (min-width: 768px) {\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 3px 3px 0 0; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n display: none; }\n\n.tab-content > .active {\n display: block; }\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent; }\n .navbar:before, .navbar:after {\n content: \" \";\n display: table; }\n .navbar:after {\n clear: both; }\n @media (min-width: 768px) {\n .navbar {\n border-radius: 3px; } }\n\n.navbar-header:before, .navbar-header:after {\n content: \" \";\n display: table; }\n\n.navbar-header:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .navbar-header {\n float: left; } }\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch; }\n .navbar-collapse:before, .navbar-collapse:after {\n content: \" \";\n display: table; }\n .navbar-collapse:after {\n clear: both; }\n .navbar-collapse.in {\n overflow-y: auto; }\n @media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none; }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important; }\n .navbar-collapse.in {\n overflow-y: visible; }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px; }\n @media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px; }\n @media (min-width: 768px) {\n .container > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-header,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0; } }\n\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px; }\n @media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030; }\n @media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0; } }\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0; }\n\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px; }\n .navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none; }\n .navbar-brand > img {\n display: block; }\n @media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px; } }\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 3px; }\n .navbar-toggle:focus {\n outline: 0; }\n .navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px; }\n .navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px; }\n @media (min-width: 768px) {\n .navbar-toggle {\n display: none; } }\n\n.navbar-nav {\n margin: 7.5px -15px; }\n .navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px; }\n @media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none; }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px; }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px; }\n .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none; } }\n @media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0; }\n .navbar-nav > li {\n float: left; }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px; } }\n\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px; }\n @media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .navbar-form .form-control-static {\n display: inline-block; }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle; }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto; }\n .navbar-form .input-group > .form-control {\n width: 100%; }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0; }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0; } }\n @media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px; }\n .navbar-form .form-group:last-child {\n margin-bottom: 0; } }\n @media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px; }\n .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px; }\n .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px; }\n\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px; }\n @media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px; } }\n\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important; }\n .navbar-right {\n float: right !important;\n margin-right: -15px; }\n .navbar-right ~ .navbar-right {\n margin-right: 0; } }\n\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7; }\n .navbar-default .navbar-brand {\n color: #777; }\n .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent; }\n .navbar-default .navbar-text {\n color: #777; }\n .navbar-default .navbar-nav > li > a {\n color: #777; }\n .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; }\n .navbar-default .navbar-toggle {\n border-color: #ddd; }\n .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n background-color: #ddd; }\n .navbar-default .navbar-toggle .icon-bar {\n background-color: #888; }\n .navbar-default .navbar-collapse,\n .navbar-default .navbar-form {\n border-color: #e7e7e7; }\n .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555; }\n @media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777; }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; } }\n .navbar-default .navbar-link {\n color: #777; }\n .navbar-default .navbar-link:hover {\n color: #333; }\n .navbar-default .btn-link {\n color: #777; }\n .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n color: #333; }\n .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-default .btn-link:hover,\n fieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc; }\n\n.navbar-inverse {\n background-color: #222;\n border-color: #090909; }\n .navbar-inverse .navbar-brand {\n color: #9d9d9d; }\n .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-text {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent; }\n .navbar-inverse .navbar-toggle {\n border-color: #333; }\n .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n background-color: #333; }\n .navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff; }\n .navbar-inverse .navbar-collapse,\n .navbar-inverse .navbar-form {\n border-color: #101010; }\n .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #090909;\n color: #fff; }\n @media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent; } }\n .navbar-inverse .navbar-link {\n color: #9d9d9d; }\n .navbar-inverse .navbar-link:hover {\n color: #fff; }\n .navbar-inverse .btn-link {\n color: #9d9d9d; }\n .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n color: #fff; }\n .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-inverse .btn-link:hover,\n fieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444; }\n\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 3px; }\n .breadcrumb > li {\n display: inline-block; }\n .breadcrumb > li + li:before {\n content: \"/ \";\n padding: 0 5px;\n color: #ccc; }\n .breadcrumb > .active {\n color: #777777; }\n\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 3px; }\n .pagination > li {\n display: inline; }\n .pagination > li > a,\n .pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.428571429;\n text-decoration: none;\n color: #67808c;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px; }\n .pagination > li:first-child > a,\n .pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px; }\n .pagination > li:last-child > a,\n .pagination > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px; }\n .pagination > li > a:hover, .pagination > li > a:focus,\n .pagination > li > span:hover,\n .pagination > li > span:focus {\n z-index: 2;\n color: #465760;\n background-color: #eeeeee;\n border-color: #ddd; }\n .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n .pagination > .active > span,\n .pagination > .active > span:hover,\n .pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c;\n cursor: default; }\n .pagination > .disabled > span,\n .pagination > .disabled > span:hover,\n .pagination > .disabled > span:focus,\n .pagination > .disabled > a,\n .pagination > .disabled > a:hover,\n .pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 2px;\n border-top-left-radius: 2px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 2px;\n border-top-right-radius: 2px; }\n\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center; }\n .pager:before, .pager:after {\n content: \" \";\n display: table; }\n .pager:after {\n clear: both; }\n .pager li {\n display: inline; }\n .pager li > a,\n .pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px; }\n .pager li > a:hover,\n .pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .pager .next > a,\n .pager .next > span {\n float: right; }\n .pager .previous > a,\n .pager .previous > span {\n float: left; }\n .pager .disabled > a,\n .pager .disabled > a:hover,\n .pager .disabled > a:focus,\n .pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed; }\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em; }\n .label:empty {\n display: none; }\n .btn .label {\n position: relative;\n top: -1px; }\n\na.label:hover, a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.label-default {\n background-color: #777777; }\n .label-default[href]:hover, .label-default[href]:focus {\n background-color: #5e5e5e; }\n\n.label-primary {\n background-color: #67808c; }\n .label-primary[href]:hover, .label-primary[href]:focus {\n background-color: #51656f; }\n\n.label-success {\n background-color: #7ED321; }\n .label-success[href]:hover, .label-success[href]:focus {\n background-color: #64a71a; }\n\n.label-info {\n background-color: #3498db; }\n .label-info[href]:hover, .label-info[href]:focus {\n background-color: #217dbb; }\n\n.label-warning {\n background-color: #FF8800; }\n .label-warning[href]:hover, .label-warning[href]:focus {\n background-color: #cc6d00; }\n\n.label-danger {\n background-color: #ff6f6f; }\n .label-danger[href]:hover, .label-danger[href]:focus {\n background-color: #ff3c3c; }\n\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px; }\n .badge:empty {\n display: none; }\n .btn .badge {\n position: relative;\n top: -1px; }\n .btn-xs .badge, .btn-group-xs > .btn .badge,\n .btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px; }\n .list-group-item.active > .badge,\n .nav-pills > .active > a > .badge {\n color: #67808c;\n background-color: #fff; }\n .list-group-item > .badge {\n float: right; }\n .list-group-item > .badge + .badge {\n margin-right: 5px; }\n .nav-pills > li > a > .badge {\n margin-left: 3px; }\n\na.badge:hover, a.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee; }\n .jumbotron h1,\n .jumbotron .h1 {\n color: inherit; }\n .jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200; }\n .jumbotron > hr {\n border-top-color: #d5d5d5; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n border-radius: 4px;\n padding-left: 15px;\n padding-right: 15px; }\n .jumbotron .container {\n max-width: 100%; }\n @media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px; }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px; } }\n\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 3px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out; }\n .thumbnail > img,\n .thumbnail a > img {\n display: block;\n max-width: 100%;\n height: auto;\n margin-left: auto;\n margin-right: auto; }\n .thumbnail .caption {\n padding: 9px;\n color: #333333; }\n\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #67808c; }\n\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 3px; }\n .alert h4 {\n margin-top: 0;\n color: inherit; }\n .alert .alert-link {\n font-weight: bold; }\n .alert > p,\n .alert > ul {\n margin-bottom: 0; }\n .alert > p + p {\n margin-top: 5px; }\n\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px; }\n .alert-dismissable .close,\n .alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit; }\n\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d; }\n .alert-success hr {\n border-top-color: #c9e2b3; }\n .alert-success .alert-link {\n color: #2b542c; }\n\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f; }\n .alert-info hr {\n border-top-color: #a6e1ec; }\n .alert-info .alert-link {\n color: #245269; }\n\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b; }\n .alert-warning hr {\n border-top-color: #f7e1b5; }\n .alert-warning .alert-link {\n color: #66512c; }\n\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442; }\n .alert-danger hr {\n border-top-color: #e4b9c0; }\n .alert-danger .alert-link {\n color: #843534; }\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #67808c;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease; }\n\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px; }\n\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n background-color: #7ED321; }\n .progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n background-color: #3498db; }\n .progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n background-color: #FF8800; }\n .progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n background-color: #ff6f6f; }\n .progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media {\n margin-top: 15px; }\n .media:first-child {\n margin-top: 0; }\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden; }\n\n.media-body {\n width: 10000px; }\n\n.media-object {\n display: block; }\n .media-object.img-thumbnail {\n max-width: none; }\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px; }\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px; }\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top; }\n\n.media-middle {\n vertical-align: middle; }\n\n.media-bottom {\n vertical-align: bottom; }\n\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.media-list {\n padding-left: 0;\n list-style: none; }\n\n.list-group {\n margin-bottom: 20px;\n padding-left: 0; }\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd; }\n .list-group-item:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\na.list-group-item,\nbutton.list-group-item {\n color: #555; }\n a.list-group-item .list-group-item-heading,\n button.list-group-item .list-group-item-heading {\n color: #333; }\n a.list-group-item:hover, a.list-group-item:focus,\n button.list-group-item:hover,\n button.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5; }\n\nbutton.list-group-item {\n width: 100%;\n text-align: left; }\n\n.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed; }\n .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {\n color: inherit; }\n .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {\n color: #777777; }\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .list-group-item.active .list-group-item-heading,\n .list-group-item.active .list-group-item-heading > small,\n .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,\n .list-group-item.active:hover .list-group-item-heading > small,\n .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,\n .list-group-item.active:focus .list-group-item-heading > small,\n .list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit; }\n .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n color: #dbe1e4; }\n\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8; }\n\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d; }\n a.list-group-item-success .list-group-item-heading,\n button.list-group-item-success .list-group-item-heading {\n color: inherit; }\n a.list-group-item-success:hover, a.list-group-item-success:focus,\n button.list-group-item-success:hover,\n button.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6; }\n a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,\n button.list-group-item-success.active,\n button.list-group-item-success.active:hover,\n button.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d; }\n\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7; }\n\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f; }\n a.list-group-item-info .list-group-item-heading,\n button.list-group-item-info .list-group-item-heading {\n color: inherit; }\n a.list-group-item-info:hover, a.list-group-item-info:focus,\n button.list-group-item-info:hover,\n button.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3; }\n a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,\n button.list-group-item-info.active,\n button.list-group-item-info.active:hover,\n button.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f; }\n\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3; }\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b; }\n a.list-group-item-warning .list-group-item-heading,\n button.list-group-item-warning .list-group-item-heading {\n color: inherit; }\n a.list-group-item-warning:hover, a.list-group-item-warning:focus,\n button.list-group-item-warning:hover,\n button.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc; }\n a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,\n button.list-group-item-warning.active,\n button.list-group-item-warning.active:hover,\n button.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b; }\n\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede; }\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442; }\n a.list-group-item-danger .list-group-item-heading,\n button.list-group-item-danger .list-group-item-heading {\n color: inherit; }\n a.list-group-item-danger:hover, a.list-group-item-danger:focus,\n button.list-group-item-danger:hover,\n button.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc; }\n a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,\n button.list-group-item-danger.active,\n button.list-group-item-danger.active:hover,\n button.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442; }\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3; }\n\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 3px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n padding: 15px; }\n .panel-body:before, .panel-body:after {\n content: \" \";\n display: table; }\n .panel-body:after {\n clear: both; }\n\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel-heading > .dropdown .dropdown-toggle {\n color: inherit; }\n\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit; }\n .panel-title > a,\n .panel-title > small,\n .panel-title > .small,\n .panel-title > small > a,\n .panel-title > .small > a {\n color: inherit; }\n\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0; }\n .panel > .list-group .list-group-item,\n .panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0; }\n .panel > .list-group:first-child .list-group-item:first-child,\n .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .list-group:last-child .list-group-item:last-child,\n .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0; }\n\n.list-group + .panel-footer {\n border-top-width: 0; }\n\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0; }\n .panel > .table caption,\n .panel > .table-responsive > .table caption,\n .panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px; }\n\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 2px;\n border-top-right-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 2px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 2px; }\n\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 2px;\n border-bottom-right-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 2px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 2px; }\n\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd; }\n\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0; }\n\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0; }\n .panel > .table-bordered > thead > tr > th:first-child,\n .panel > .table-bordered > thead > tr > td:first-child,\n .panel > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-bordered > tfoot > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .panel > .table-bordered > thead > tr > th:last-child,\n .panel > .table-bordered > thead > tr > td:last-child,\n .panel > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-bordered > tfoot > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .panel > .table-bordered > thead > tr:first-child > td,\n .panel > .table-bordered > thead > tr:first-child > th,\n .panel > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-bordered > tbody > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0; }\n .panel > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-bordered > tfoot > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0; }\n\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0; }\n\n.panel-group {\n margin-bottom: 20px; }\n .panel-group .panel {\n margin-bottom: 0;\n border-radius: 3px; }\n .panel-group .panel + .panel {\n margin-top: 5px; }\n .panel-group .panel-heading {\n border-bottom: 0; }\n .panel-group .panel-heading + .panel-collapse > .panel-body,\n .panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd; }\n .panel-group .panel-footer {\n border-top: 0; }\n .panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd; }\n\n.panel-default {\n border-color: #ddd; }\n .panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd; }\n .panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd; }\n .panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333; }\n .panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd; }\n\n.panel-primary {\n border-color: #67808c; }\n .panel-primary > .panel-heading {\n color: #fff;\n background-color: #67808c;\n border-color: #67808c; }\n .panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #67808c; }\n .panel-primary > .panel-heading .badge {\n color: #67808c;\n background-color: #fff; }\n .panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #67808c; }\n\n.panel-success {\n border-color: #d6e9c6; }\n .panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6; }\n .panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6; }\n\n.panel-info {\n border-color: #bce8f1; }\n .panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1; }\n .panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1; }\n\n.panel-warning {\n border-color: #faebcc; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc; }\n .panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc; }\n\n.panel-danger {\n border-color: #ebccd1; }\n .panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1; }\n .panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1; }\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden; }\n .embed-responsive .embed-responsive-item,\n .embed-responsive iframe,\n .embed-responsive embed,\n .embed-responsive object,\n .embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0; }\n\n.embed-responsive-16by9 {\n padding-bottom: 56.25%; }\n\n.embed-responsive-4by3 {\n padding-bottom: 75%; }\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n .well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n padding: 24px;\n border-radius: 4px; }\n\n.well-sm {\n padding: 9px;\n border-radius: 2px; }\n\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .close:hover, .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.428571429; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0); }\n .tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .tooltip.top {\n margin-top: -3px;\n padding: 5px 0; }\n .tooltip.right {\n margin-left: 3px;\n padding: 0 5px; }\n .tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0; }\n .tooltip.left {\n margin-left: -3px;\n padding: 0 5px; }\n\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #333;\n border-radius: 3px; }\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #333; }\n\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #333; }\n\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #333; }\n\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #333; }\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\n .popover.top {\n margin-top: -10px; }\n .popover.right {\n margin-left: 10px; }\n .popover.bottom {\n margin-top: 10px; }\n .popover.left {\n margin-left: -10px; }\n\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 3px 3px 0 0; }\n\n.popover-content {\n padding: 9px 14px; }\n\n.popover > .arrow, .popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.popover > .arrow {\n border-width: 11px; }\n\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\"; }\n\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px; }\n .popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff; }\n\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25); }\n .popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff; }\n\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px; }\n .popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff; }\n\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25); }\n .popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px; }\n\n.carousel {\n position: relative; }\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%; }\n .carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left; }\n .carousel-inner > .item > img,\n .carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n line-height: 1; }\n @media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px; }\n .carousel-inner > .item.next, .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.prev, .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0; } }\n .carousel-inner > .active,\n .carousel-inner > .next,\n .carousel-inner > .prev {\n display: block; }\n .carousel-inner > .active {\n left: 0; }\n .carousel-inner > .next,\n .carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%; }\n .carousel-inner > .next {\n left: 100%; }\n .carousel-inner > .prev {\n left: -100%; }\n .carousel-inner > .next.left,\n .carousel-inner > .prev.right {\n left: 0; }\n .carousel-inner > .active.left {\n left: -100%; }\n .carousel-inner > .active.right {\n left: 100%; }\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: transparent; }\n .carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n .carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n .carousel-control:hover, .carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .carousel-control .icon-prev,\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block; }\n .carousel-control .icon-prev,\n .carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px; }\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px; }\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif; }\n .carousel-control .icon-prev:before {\n content: '\\2039'; }\n .carousel-control .icon-next:before {\n content: '\\203a'; }\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center; }\n .carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: transparent; }\n .carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff; }\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n .carousel-caption .btn {\n text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px; }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px; }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px; }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px; }\n .carousel-indicators {\n bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n content: \" \";\n display: table; }\n\n.clearfix:after {\n clear: both; }\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.pull-right {\n float: right !important; }\n\n.pull-left {\n float: left !important; }\n\n.hide {\n display: none !important; }\n\n.show {\n display: block !important; }\n\n.invisible {\n visibility: hidden; }\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0; }\n\n.hidden {\n display: none !important; }\n\n.affix {\n position: fixed; }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm, body.dashboard .sidebar .sidebar-inner .quick-add-incident span, body.dashboard .sidebar .sidebar-inner > ul > li > a > span, body.dashboard .sidebar .bottom-menu-sidebar {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n\nhtml {\n position: relative;\n min-height: 100%;\n -webkit-font-smoothing: antialiased;\n overflow-y: scroll; }\n\nbody {\n margin-bottom: 60px;\n padding-bottom: 60px; }\n\n.uppercase {\n text-transform: uppercase; }\n\n.margin-top {\n margin-top: 20px; }\n\n.margin-bottom {\n margin-bottom: 20px; }\n\n.no-select {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\ndiv[role=tabpanel] ul.nav-tabs {\n border-bottom: 1px solid #d5d8d7; }\n div[role=tabpanel] ul.nav-tabs li a {\n font-weight: 400;\n display: inline-block;\n padding: 10px 25px;\n border-radius: 0;\n font-size: 0.9em;\n letter-spacing: 0.01em; }\n\ndiv[role=tabpanel] .tab-content {\n border-left: 1px solid #d5d8d7;\n border-bottom: 1px solid #d5d8d7;\n border-right: 1px solid #d5d8d7;\n background-color: white; }\n div[role=tabpanel] .tab-content .tab-pane {\n padding: 10px; }\n\nlabel {\n font-size: 14px; }\n\ntextarea {\n resize: none;\n overflow: auto; }\n\n.markdown-control {\n position: relative; }\n .markdown-control:before {\n position: absolute;\n display: block;\n right: 0%;\n bottom: 0%;\n width: 40px;\n height: 40px;\n font-size: 2em;\n font-family: \"Ionicons\";\n content: \"\\f4e6\"; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 45px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9; }\n\n@media (max-width: 767px) {\n .component-inline .radio-items {\n text-align: left; }\n .component-inline .radio-items .radio-inline {\n margin-left: 0;\n width: 100%; } }\n\n.minicolors-theme-bootstrap .minicolors-swatch {\n top: 9px;\n left: 9px; }\n\n.well {\n border-radius: 0; }\n\n.alert {\n border-radius: 4px;\n background: #F7CA18;\n border: solid 2px #d5ab07; }\n .alert.alert-success {\n background-color: #7ED321;\n border: solid 2px #64a71a;\n color: white; }\n .alert.alert-success a {\n color: white;\n font-weight: bold; }\n .alert.alert-info {\n background: #3498db;\n border: solid 2px #217dbb;\n color: white; }\n .alert.alert-info a {\n color: white;\n font-weight: bold; }\n .alert.alert-danger {\n background: #ff6f6f;\n border: solid 2px #ff3c3c;\n color: white; }\n .alert.alert-danger a {\n color: white;\n font-weight: bold; }\n\n.panel-danger {\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading {\n color: white;\n background-color: #ff6f6f;\n border-color: #ff3c3c; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ff3c3c; }\n .panel-danger > .panel-heading .badge {\n color: #ff6f6f;\n background-color: white; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ff3c3c; }\n\n.panel-success {\n border-color: #64a71a; }\n .panel-success > .panel-heading {\n color: white;\n background-color: #7ED321;\n border-color: #64a71a; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #64a71a; }\n .panel-success > .panel-heading .badge {\n color: #7ED321;\n background-color: white; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #64a71a; }\n\n.panel-info {\n border-color: #217dbb; }\n .panel-info > .panel-heading {\n color: white;\n background-color: #3498db;\n border-color: #217dbb; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #217dbb; }\n .panel-info > .panel-heading .badge {\n color: #3498db;\n background-color: white; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #217dbb; }\n\n.panel-warning {\n border-color: #d5ab07; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #F7CA18;\n border-color: #d5ab07; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d5ab07; }\n .panel-warning > .panel-heading .badge {\n color: #F7CA18;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d5ab07; }\n\n.btn.btn-default {\n color: #333;\n background: #fff;\n border: solid 1px #e6e6e6; }\n .btn.btn-default:hover, .btn.btn-default:focus, .btn.btn-default:active, .btn.btn-default.active {\n background: #f2f2f2;\n border-color: #e6e6e6;\n color: #333;\n outline: none;\n outline-offset: 0; }\n .btn.btn-default.disabled, .btn.btn-default.disabled:hover, .btn.btn-default.disabled:focus, .btn.btn-default.disabled:active, .btn.btn-default.disabled.active, .btn.btn-default[disabled], .btn.btn-default[disabled]:hover, .btn.btn-default[disabled]:focus, .btn.btn-default[disabled]:active, .btn.btn-default[disabled].active,\n fieldset[disabled] .btn.btn-default,\n fieldset[disabled] .btn.btn-default:hover,\n fieldset[disabled] .btn.btn-default:focus,\n fieldset[disabled] .btn.btn-default:active,\n fieldset[disabled] .btn.btn-default.active {\n background-color: white;\n border-color: #e6e6e6; }\n\n.btn.btn-primary {\n color: #fff;\n background: #67808c;\n border: solid 1px #51656f; }\n .btn.btn-primary:hover, .btn.btn-primary:focus, .btn.btn-primary:active, .btn.btn-primary.active {\n background: #5c727d;\n border-color: #51656f;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-primary.disabled, .btn.btn-primary.disabled:hover, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:active, .btn.btn-primary.disabled.active, .btn.btn-primary[disabled], .btn.btn-primary[disabled]:hover, .btn.btn-primary[disabled]:focus, .btn.btn-primary[disabled]:active, .btn.btn-primary[disabled].active,\n fieldset[disabled] .btn.btn-primary,\n fieldset[disabled] .btn.btn-primary:hover,\n fieldset[disabled] .btn.btn-primary:focus,\n fieldset[disabled] .btn.btn-primary:active,\n fieldset[disabled] .btn.btn-primary.active {\n background-color: #748c99;\n border-color: #51656f; }\n\n.btn.btn-success {\n color: #fff;\n background: #7ED321;\n border: solid 1px #64a71a; }\n .btn.btn-success:hover, .btn.btn-success:focus, .btn.btn-success:active, .btn.btn-success.active {\n background: #71bd1e;\n border-color: #64a71a;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-success.disabled, .btn.btn-success.disabled:hover, .btn.btn-success.disabled:focus, .btn.btn-success.disabled:active, .btn.btn-success.disabled.active, .btn.btn-success[disabled], .btn.btn-success[disabled]:hover, .btn.btn-success[disabled]:focus, .btn.btn-success[disabled]:active, .btn.btn-success[disabled].active,\n fieldset[disabled] .btn.btn-success,\n fieldset[disabled] .btn.btn-success:hover,\n fieldset[disabled] .btn.btn-success:focus,\n fieldset[disabled] .btn.btn-success:active,\n fieldset[disabled] .btn.btn-success.active {\n background-color: #8bde2f;\n border-color: #64a71a; }\n\n.btn.btn-info {\n color: #fff;\n background: #3498db;\n border: solid 1px #217dbb; }\n .btn.btn-info:hover, .btn.btn-info:focus, .btn.btn-info:active, .btn.btn-info.active {\n background: #258cd1;\n border-color: #217dbb;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-info.disabled, .btn.btn-info.disabled:hover, .btn.btn-info.disabled:focus, .btn.btn-info.disabled:active, .btn.btn-info.disabled.active, .btn.btn-info[disabled], .btn.btn-info[disabled]:hover, .btn.btn-info[disabled]:focus, .btn.btn-info[disabled]:active, .btn.btn-info[disabled].active,\n fieldset[disabled] .btn.btn-info,\n fieldset[disabled] .btn.btn-info:hover,\n fieldset[disabled] .btn.btn-info:focus,\n fieldset[disabled] .btn.btn-info:active,\n fieldset[disabled] .btn.btn-info.active {\n background-color: #4aa3df;\n border-color: #217dbb; }\n\n.btn.btn-warning {\n color: #fff;\n background: #FF8800;\n border: solid 1px #cc6d00; }\n .btn.btn-warning:hover, .btn.btn-warning:focus, .btn.btn-warning:active, .btn.btn-warning.active {\n background: #e67a00;\n border-color: #cc6d00;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-warning.disabled, .btn.btn-warning.disabled:hover, .btn.btn-warning.disabled:focus, .btn.btn-warning.disabled:active, .btn.btn-warning.disabled.active, .btn.btn-warning[disabled], .btn.btn-warning[disabled]:hover, .btn.btn-warning[disabled]:focus, .btn.btn-warning[disabled]:active, .btn.btn-warning[disabled].active,\n fieldset[disabled] .btn.btn-warning,\n fieldset[disabled] .btn.btn-warning:hover,\n fieldset[disabled] .btn.btn-warning:focus,\n fieldset[disabled] .btn.btn-warning:active,\n fieldset[disabled] .btn.btn-warning.active {\n background-color: #ff941a;\n border-color: #cc6d00; }\n\n.btn.btn-danger {\n color: #fff;\n background: #ff6f6f;\n border: solid 1px #ff3c3c; }\n .btn.btn-danger:hover, .btn.btn-danger:focus, .btn.btn-danger:active, .btn.btn-danger.active {\n background: #ff5656;\n border-color: #ff3c3c;\n color: #fff;\n outline: none;\n outline-offset: 0; }\n .btn.btn-danger.disabled, .btn.btn-danger.disabled:hover, .btn.btn-danger.disabled:focus, .btn.btn-danger.disabled:active, .btn.btn-danger.disabled.active, .btn.btn-danger[disabled], .btn.btn-danger[disabled]:hover, .btn.btn-danger[disabled]:focus, .btn.btn-danger[disabled]:active, .btn.btn-danger[disabled].active,\n fieldset[disabled] .btn.btn-danger,\n fieldset[disabled] .btn.btn-danger:hover,\n fieldset[disabled] .btn.btn-danger:focus,\n fieldset[disabled] .btn.btn-danger:active,\n fieldset[disabled] .btn.btn-danger.active {\n background-color: #ff8989;\n border-color: #ff3c3c; }\n\n.btn.btn-inverse {\n color: white;\n background: #474949;\n border: solid 1px #2e2f2f; }\n .btn.btn-inverse:hover, .btn.btn-inverse:focus, .btn.btn-inverse:active, .btn.btn-inverse.active {\n background: #3a3c3c;\n border-color: #2e2f2f;\n color: white;\n outline: none;\n outline-offset: 0; }\n .btn.btn-inverse.disabled, .btn.btn-inverse.disabled:hover, .btn.btn-inverse.disabled:focus, .btn.btn-inverse.disabled:active, .btn.btn-inverse.disabled.active, .btn.btn-inverse[disabled], .btn.btn-inverse[disabled]:hover, .btn.btn-inverse[disabled]:focus, .btn.btn-inverse[disabled]:active, .btn.btn-inverse[disabled].active,\n fieldset[disabled] .btn.btn-inverse,\n fieldset[disabled] .btn.btn-inverse:hover,\n fieldset[disabled] .btn.btn-inverse:focus,\n fieldset[disabled] .btn.btn-inverse:active,\n fieldset[disabled] .btn.btn-inverse.active {\n background-color: #545656;\n border-color: #2e2f2f; }\n\n.btn-outline {\n background-color: transparent;\n background-image: none !important;\n color: inherit;\n transition: all .5s; }\n\n.btn-default.btn-outline {\n color: #999; }\n\n.btn-primary.btn-outline {\n color: #428bca; }\n\n.btn-success.btn-outline {\n color: #5cb85c; }\n\n.btn-info.btn-outline {\n color: #5bc0de; }\n\n.btn-warning.btn-outline {\n color: #f0ad4e; }\n\n.btn-danger.btn-outline {\n color: #d9534f; }\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff; }\n\n.pager li > a, .pager li > span {\n border-radius: 3px; }\n\nbody.error-page {\n background-color: #f3f3f4; }\n body.error-page .middle-box {\n height: 400px;\n width: 400px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -200px;\n z-index: 100; }\n body.error-page .middle-box h1 {\n font-size: 9em; }\n body.error-page h3.font-bold {\n font-weight: 600; }\n\nbody.dashboard {\n font-family: -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n font-weight: 400;\n font-size: 15px;\n display: table;\n width: 100%;\n height: 100%;\n table-layout: fixed;\n line-height: 1.42857143;\n -webkit-font-smoothing: antialiased; }\n body.dashboard .wrapper {\n padding-left: 0;\n -webkit-transition: all 0.5s ease;\n -moz-transition: all 0.5s ease;\n -o-transition: all 0.5s ease;\n transition: all 0.5s ease; }\n body.dashboard .wrapper.toggled {\n padding-left: 230px; }\n body.dashboard .wrapper.toggled .sidebar {\n width: 230px; }\n body.dashboard .wrapper.toggled .page-content {\n position: absolute;\n margin-right: -230px; }\n @media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .wrapper {\n padding-left: 80px; } }\n @media (min-width: 991px) {\n body.dashboard .wrapper {\n padding-left: 230px; }\n body.dashboard .wrapper.toggled {\n padding-left: 0; }\n body.dashboard .wrapper.toggled .page-content {\n position: relative;\n margin-right: 0; } }\n body.dashboard .alerts .alert h5 {\n margin-top: 5px; }\n\nbody.dashboard .wrapper {\n width: 100%;\n display: table;\n height: 100%;\n table-layout: fixed; }\n\nbody.dashboard .navbar {\n z-index: 999;\n border-radius: 0px;\n border: none;\n border-bottom: 1px solid #00695c;\n background: #009c89;\n margin: 0; }\n body.dashboard .navbar a, body.dashboard .navbar a:active, body.dashboard .navbar a:visited {\n color: #ffffff; }\n body.dashboard .navbar a:hover, body.dashboard .navbar a:active:hover, body.dashboard .navbar a:visited:hover {\n color: #e9e9e9; }\n body.dashboard .navbar .navbar-toggle {\n margin-top: 15px;\n background: transparent;\n border-color: transparent; }\n body.dashboard .navbar .navbar-toggle.collapsed span {\n background-color: #ffffff; }\n body.dashboard .navbar .navbar-collapse {\n background: #009c89; }\n body.dashboard .navbar a.navbar-brand {\n padding: 34px 21px;\n line-height: 0em;\n font-size: 1.1em;\n letter-spacing: 0.04em;\n font-weight: 600;\n text-transform: uppercase; }\n @media (min-width: 991px) {\n body.dashboard .navbar a.navbar-brand span {\n padding-right: 10px; }\n body.dashboard .navbar a.navbar-brand span:before {\n font-family: FontAwesome;\n content: \"\\f060\"; } }\n body.dashboard .navbar .nav li a {\n height: 68px;\n line-height: 35px; }\n\nbody.dashboard .sidebar {\n position: fixed;\n left: 230px;\n width: 0;\n height: 100%;\n margin-left: -230px;\n overflow-y: auto;\n background: #333;\n -webkit-box-shadow: inset 0px -2px 3px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0px -2px 3px rgba(0, 0, 0, 0.25);\n z-index: 1000;\n -webkit-transition: all 0.5s ease;\n -moz-transition: all 0.5s ease;\n -o-transition: all 0.5s ease;\n transition: all 0.5s ease; }\n body.dashboard .sidebar .sidebar-inner {\n position: absolute;\n top: 0;\n width: 230px;\n margin: 0;\n padding: 0;\n list-style: none; }\n body.dashboard .sidebar .sidebar-inner .profile {\n text-align: center;\n padding: 20px 10px;\n margin-bottom: 0; }\n body.dashboard .sidebar .sidebar-inner .profile .dropdown-toggle {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner .profile .dropdown-menu {\n top: 108%; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar {\n width: 60px; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar img {\n border-radius: 50%;\n width: 50px; }\n body.dashboard .sidebar .sidebar-inner .profile .username {\n word-break: break-all;\n margin-bottom: 0; }\n body.dashboard .sidebar .sidebar-inner .profile a {\n color: #ffffff;\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident {\n padding: 10px; }\n body.dashboard .sidebar .sidebar-inner ul {\n clear: both;\n margin: 0;\n padding: 0;\n list-style: none; }\n body.dashboard .sidebar .sidebar-inner ul li {\n font-size: 0.9em; }\n body.dashboard .sidebar .sidebar-inner ul li:focus, body.dashboard .sidebar .sidebar-inner ul li:hover {\n background: #404040 !important; }\n body.dashboard .sidebar .sidebar-inner ul li.active {\n background: #4d4d4d; }\n body.dashboard .sidebar .sidebar-inner ul li.active:hover {\n background: #595959 !important; }\n body.dashboard .sidebar .sidebar-inner ul li.active a {\n padding-top: 14px;\n padding-bottom: 14px;\n border-top: 1px solid #666;\n border-bottom: 1px solid #666;\n color: #ffffff; }\n body.dashboard .sidebar .sidebar-inner ul li.active a:focus, body.dashboard .sidebar .sidebar-inner ul li.active a:hover {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner ul li a {\n display: block;\n padding: 15px;\n color: #ffffff; }\n body.dashboard .sidebar .sidebar-inner ul li a i {\n font-size: 18px;\n min-width: 17px;\n text-align: center;\n position: relative;\n top: 1px;\n margin-right: 5px; }\n body.dashboard .sidebar .sidebar-inner ul li a:focus, body.dashboard .sidebar .sidebar-inner ul li a:hover {\n text-decoration: none; }\n body.dashboard .sidebar .sidebar-inner ul li a span.label {\n float: right;\n margin: 3px 0; }\n body.dashboard .sidebar .sidebar-inner ul li a span.label.label-info {\n background-color: #6DB81C; }\n body.dashboard .sidebar .sidebar-inner ul li.sub-nav-item a {\n padding-left: 40px; }\n body.dashboard .sidebar .bottom-menu-sidebar {\n position: fixed;\n bottom: 0;\n width: 230px;\n z-index: 999; }\n body.dashboard .sidebar .bottom-menu-sidebar ul > li {\n float: left;\n display: block;\n width: 33.333%;\n border-right: 1px solid #ddd;\n border-top: 1px solid #ddd; }\n body.dashboard .sidebar .bottom-menu-sidebar ul > li a {\n color: #333333;\n display: block;\n position: relative;\n text-align: center;\n padding: 6px 0;\n background: #fff; }\n\n@media (min-width: 767px) {\n body.dashboard .sidebar {\n width: 230px; }\n body.dashboard .wrapper.toggled .sidebar {\n width: 0; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .sidebar {\n width: 80px;\n left: 150px;\n margin-left: -150px; }\n body.dashboard .sidebar .sidebar-inner {\n width: 80px; }\n body.dashboard .sidebar .sidebar-inner .profile .avatar img {\n width: 40px; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident .btn {\n padding: 3px 6px; }\n body.dashboard .sidebar .sidebar-inner .quick-add-incident i {\n font-size: 20px; }\n body.dashboard .sidebar .sidebar-inner > ul > li > a {\n text-align: center; }\n body.dashboard .sidebar .sidebar-inner > ul > li > a > i {\n font-size: 25px; } }\n\nbody.dashboard .sidebar-toggler {\n float: left;\n padding: 10px;\n position: relative;\n top: -15px;\n left: -5px;\n margin-right: 10px;\n cursor: pointer; }\n body.dashboard .sidebar-toggler i {\n font-size: 25px; }\n\nbody.dashboard .sub-sidebar {\n left: 0;\n top: 0;\n bottom: 0;\n position: fixed;\n margin-left: 228px;\n width: 22%;\n background: #F0F3F4;\n border-right: 1px solid #E8ECF1; }\n body.dashboard .sub-sidebar h3 {\n margin: 0;\n text-align: center;\n font-size: 19px;\n padding: 30px 15px 15px 15px; }\n body.dashboard .sub-sidebar hr {\n margin-top: 5px;\n margin-bottom: 5px; }\n body.dashboard .sub-sidebar ul.menu {\n list-style-type: none;\n padding: 0;\n margin: 0; }\n body.dashboard .sub-sidebar ul.menu li a {\n color: #666;\n display: block;\n padding: 13px 30px;\n font-size: 15px;\n transition: all 0.2s linear;\n text-decoration: none; }\n body.dashboard .sub-sidebar ul.menu li a.active {\n color: #6DB81C; }\n body.dashboard .sub-sidebar ul.menu li a:hover {\n color: #6DB81C; }\n body.dashboard .sub-sidebar ul.menu li i {\n margin-right: 5px; }\n body.dashboard .sub-sidebar .sidebar-toggler {\n position: absolute;\n top: 3px;\n left: 20px;\n font-size: 36px;\n cursor: pointer; }\n body.dashboard .sub-sidebar + .content-wrapper {\n top: 0;\n position: relative;\n margin-left: 26%;\n padding-right: 40px !important; }\n\n@media (max-width: 767px) {\n body.dashboard .sub-sidebar {\n position: relative;\n margin-left: 0;\n width: 100%; }\n body.dashboard .sub-sidebar + .content-wrapper {\n margin-left: 0;\n padding-left: 40px !important;\n width: 100%; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .sub-sidebar {\n margin-left: 80px;\n width: 25%; }\n body.dashboard .sub-sidebar + .content-wrapper {\n padding-left: 45px !important; } }\n\nbody.dashboard .page-content {\n width: 100%; }\n body.dashboard .page-content .content-wrapper {\n padding-top: 20px;\n padding-left: 40px;\n padding-right: 40px; }\n body.dashboard .page-content .content-wrapper.header-fixed {\n margin-top: 60px; }\n body.dashboard .page-content .header {\n position: relative;\n top: 0;\n left: 0;\n color: #333;\n background-color: #fff;\n padding: 22px 40px;\n width: 100%;\n height: 70px;\n font-size: 1.2em;\n border-bottom: 1px solid #eee;\n z-index: 99; }\n body.dashboard .page-content .header.sub-header {\n padding: 8px 2px;\n height: 50px; }\n body.dashboard .page-content .header.fixed {\n position: fixed;\n padding-left: 270px; }\n body.dashboard .page-content .header input, body.dashboard .page-content .header button, body.dashboard .page-content .header .btn {\n position: relative;\n top: -4px; }\n body.dashboard .page-content .header input {\n width: 20%; }\n body.dashboard .page-content .header + .row, body.dashboard .page-content .setup-page .header + .steps, .setup-page body.dashboard .page-content .header + .steps {\n margin-top: 23px; }\n body.dashboard .page-content .header h3 {\n color: #444;\n margin-top: 0;\n text-transform: uppercase; }\n body.dashboard .page-content .header .ion, body.dashboard .page-content .header .ionicons, body.dashboard .page-content .header\n .ion-alert:before, body.dashboard .page-content .header\n .ion-alert-circled:before, body.dashboard .page-content .header\n .ion-android-add:before, body.dashboard .page-content .header\n .ion-android-add-circle:before, body.dashboard .page-content .header\n .ion-android-alarm-clock:before, body.dashboard .page-content .header\n .ion-android-alert:before, body.dashboard .page-content .header\n .ion-android-apps:before, body.dashboard .page-content .header\n .ion-android-archive:before, body.dashboard .page-content .header\n .ion-android-arrow-back:before, body.dashboard .page-content .header\n .ion-android-arrow-down:before, body.dashboard .page-content .header\n .ion-android-arrow-dropdown:before, body.dashboard .page-content .header\n .ion-android-arrow-dropdown-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropleft:before, body.dashboard .page-content .header\n .ion-android-arrow-dropleft-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropright:before, body.dashboard .page-content .header\n .ion-android-arrow-dropright-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-dropup:before, body.dashboard .page-content .header\n .ion-android-arrow-dropup-circle:before, body.dashboard .page-content .header\n .ion-android-arrow-forward:before, body.dashboard .page-content .header\n .ion-android-arrow-up:before, body.dashboard .page-content .header\n .ion-android-attach:before, body.dashboard .page-content .header\n .ion-android-bar:before, body.dashboard .page-content .header\n .ion-android-bicycle:before, body.dashboard .page-content .header\n .ion-android-boat:before, body.dashboard .page-content .header\n .ion-android-bookmark:before, body.dashboard .page-content .header\n .ion-android-bulb:before, body.dashboard .page-content .header\n .ion-android-bus:before, body.dashboard .page-content .header\n .ion-android-calendar:before, body.dashboard .page-content .header\n .ion-android-call:before, body.dashboard .page-content .header\n .ion-android-camera:before, body.dashboard .page-content .header\n .ion-android-cancel:before, body.dashboard .page-content .header\n .ion-android-car:before, body.dashboard .page-content .header\n .ion-android-cart:before, body.dashboard .page-content .header\n .ion-android-chat:before, body.dashboard .page-content .header\n .ion-android-checkbox:before, body.dashboard .page-content .header\n .ion-android-checkbox-blank:before, body.dashboard .page-content .header\n .ion-android-checkbox-outline:before, body.dashboard .page-content .header\n .ion-android-checkbox-outline-blank:before, body.dashboard .page-content .header\n .ion-android-checkmark-circle:before, body.dashboard .page-content .header\n .ion-android-clipboard:before, body.dashboard .page-content .header\n .ion-android-close:before, body.dashboard .page-content .header\n .ion-android-cloud:before, body.dashboard .page-content .header\n .ion-android-cloud-circle:before, body.dashboard .page-content .header\n .ion-android-cloud-done:before, body.dashboard .page-content .header\n .ion-android-cloud-outline:before, body.dashboard .page-content .header\n .ion-android-color-palette:before, body.dashboard .page-content .header\n .ion-android-compass:before, body.dashboard .page-content .header\n .ion-android-contact:before, body.dashboard .page-content .header\n .ion-android-contacts:before, body.dashboard .page-content .header\n .ion-android-contract:before, body.dashboard .page-content .header\n .ion-android-create:before, body.dashboard .page-content .header\n .ion-android-delete:before, body.dashboard .page-content .header\n .ion-android-desktop:before, body.dashboard .page-content .header\n .ion-android-document:before, body.dashboard .page-content .header\n .ion-android-done:before, body.dashboard .page-content .header\n .ion-android-done-all:before, body.dashboard .page-content .header\n .ion-android-download:before, body.dashboard .page-content .header\n .ion-android-drafts:before, body.dashboard .page-content .header\n .ion-android-exit:before, body.dashboard .page-content .header\n .ion-android-expand:before, body.dashboard .page-content .header\n .ion-android-favorite:before, body.dashboard .page-content .header\n .ion-android-favorite-outline:before, body.dashboard .page-content .header\n .ion-android-film:before, body.dashboard .page-content .header\n .ion-android-folder:before, body.dashboard .page-content .header\n .ion-android-folder-open:before, body.dashboard .page-content .header\n .ion-android-funnel:before, body.dashboard .page-content .header\n .ion-android-globe:before, body.dashboard .page-content .header\n .ion-android-hand:before, body.dashboard .page-content .header\n .ion-android-hangout:before, body.dashboard .page-content .header\n .ion-android-happy:before, body.dashboard .page-content .header\n .ion-android-home:before, body.dashboard .page-content .header\n .ion-android-image:before, body.dashboard .page-content .header\n .ion-android-laptop:before, body.dashboard .page-content .header\n .ion-android-list:before, body.dashboard .page-content .header\n .ion-android-locate:before, body.dashboard .page-content .header\n .ion-android-lock:before, body.dashboard .page-content .header\n .ion-android-mail:before, body.dashboard .page-content .header\n .ion-android-map:before, body.dashboard .page-content .header\n .ion-android-menu:before, body.dashboard .page-content .header\n .ion-android-microphone:before, body.dashboard .page-content .header\n .ion-android-microphone-off:before, body.dashboard .page-content .header\n .ion-android-more-horizontal:before, body.dashboard .page-content .header\n .ion-android-more-vertical:before, body.dashboard .page-content .header\n .ion-android-navigate:before, body.dashboard .page-content .header\n .ion-android-notifications:before, body.dashboard .page-content .header\n .ion-android-notifications-none:before, body.dashboard .page-content .header\n .ion-android-notifications-off:before, body.dashboard .page-content .header\n .ion-android-open:before, body.dashboard .page-content .header\n .ion-android-options:before, body.dashboard .page-content .header\n .ion-android-people:before, body.dashboard .page-content .header\n .ion-android-person:before, body.dashboard .page-content .header\n .ion-android-person-add:before, body.dashboard .page-content .header\n .ion-android-phone-landscape:before, body.dashboard .page-content .header\n .ion-android-phone-portrait:before, body.dashboard .page-content .header\n .ion-android-pin:before, body.dashboard .page-content .header\n .ion-android-plane:before, body.dashboard .page-content .header\n .ion-android-playstore:before, body.dashboard .page-content .header\n .ion-android-print:before, body.dashboard .page-content .header\n .ion-android-radio-button-off:before, body.dashboard .page-content .header\n .ion-android-radio-button-on:before, body.dashboard .page-content .header\n .ion-android-refresh:before, body.dashboard .page-content .header\n .ion-android-remove:before, body.dashboard .page-content .header\n .ion-android-remove-circle:before, body.dashboard .page-content .header\n .ion-android-restaurant:before, body.dashboard .page-content .header\n .ion-android-sad:before, body.dashboard .page-content .header\n .ion-android-search:before, body.dashboard .page-content .header\n .ion-android-send:before, body.dashboard .page-content .header\n .ion-android-settings:before, body.dashboard .page-content .header\n .ion-android-share:before, body.dashboard .page-content .header\n .ion-android-share-alt:before, body.dashboard .page-content .header\n .ion-android-star:before, body.dashboard .page-content .header\n .ion-android-star-half:before, body.dashboard .page-content .header\n .ion-android-star-outline:before, body.dashboard .page-content .header\n .ion-android-stopwatch:before, body.dashboard .page-content .header\n .ion-android-subway:before, body.dashboard .page-content .header\n .ion-android-sunny:before, body.dashboard .page-content .header\n .ion-android-sync:before, body.dashboard .page-content .header\n .ion-android-textsms:before, body.dashboard .page-content .header\n .ion-android-time:before, body.dashboard .page-content .header\n .ion-android-train:before, body.dashboard .page-content .header\n .ion-android-unlock:before, body.dashboard .page-content .header\n .ion-android-upload:before, body.dashboard .page-content .header\n .ion-android-volume-down:before, body.dashboard .page-content .header\n .ion-android-volume-mute:before, body.dashboard .page-content .header\n .ion-android-volume-off:before, body.dashboard .page-content .header\n .ion-android-volume-up:before, body.dashboard .page-content .header\n .ion-android-walk:before, body.dashboard .page-content .header\n .ion-android-warning:before, body.dashboard .page-content .header\n .ion-android-watch:before, body.dashboard .page-content .header\n .ion-android-wifi:before, body.dashboard .page-content .header\n .ion-aperture:before, body.dashboard .page-content .header\n .ion-archive:before, body.dashboard .page-content .header\n .ion-arrow-down-a:before, body.dashboard .page-content .header\n .ion-arrow-down-b:before, body.dashboard .page-content .header\n .ion-arrow-down-c:before, body.dashboard .page-content .header\n .ion-arrow-expand:before, body.dashboard .page-content .header\n .ion-arrow-graph-down-left:before, body.dashboard .page-content .header\n .ion-arrow-graph-down-right:before, body.dashboard .page-content .header\n .ion-arrow-graph-up-left:before, body.dashboard .page-content .header\n .ion-arrow-graph-up-right:before, body.dashboard .page-content .header\n .ion-arrow-left-a:before, body.dashboard .page-content .header\n .ion-arrow-left-b:before, body.dashboard .page-content .header\n .ion-arrow-left-c:before, body.dashboard .page-content .header\n .ion-arrow-move:before, body.dashboard .page-content .header\n .ion-arrow-resize:before, body.dashboard .page-content .header\n .ion-arrow-return-left:before, body.dashboard .page-content .header\n .ion-arrow-return-right:before, body.dashboard .page-content .header\n .ion-arrow-right-a:before, body.dashboard .page-content .header\n .ion-arrow-right-b:before, body.dashboard .page-content .header\n .ion-arrow-right-c:before, body.dashboard .page-content .header\n .ion-arrow-shrink:before, body.dashboard .page-content .header\n .ion-arrow-swap:before, body.dashboard .page-content .header\n .ion-arrow-up-a:before, body.dashboard .page-content .header\n .ion-arrow-up-b:before, body.dashboard .page-content .header\n .ion-arrow-up-c:before, body.dashboard .page-content .header\n .ion-asterisk:before, body.dashboard .page-content .header\n .ion-at:before, body.dashboard .page-content .header\n .ion-backspace:before, body.dashboard .page-content .header\n .ion-backspace-outline:before, body.dashboard .page-content .header\n .ion-bag:before, body.dashboard .page-content .header\n .ion-battery-charging:before, body.dashboard .page-content .header\n .ion-battery-empty:before, body.dashboard .page-content .header\n .ion-battery-full:before, body.dashboard .page-content .header\n .ion-battery-half:before, body.dashboard .page-content .header\n .ion-battery-low:before, body.dashboard .page-content .header\n .ion-beaker:before, body.dashboard .page-content .header\n .ion-beer:before, body.dashboard .page-content .header\n .ion-bluetooth:before, body.dashboard .page-content .header\n .ion-bonfire:before, body.dashboard .page-content .header\n .ion-bookmark:before, body.dashboard .page-content .header\n .ion-bowtie:before, body.dashboard .page-content .header\n .ion-briefcase:before, body.dashboard .page-content .header\n .ion-bug:before, body.dashboard .page-content .header\n .ion-calculator:before, body.dashboard .page-content .header\n .ion-calendar:before, body.dashboard .page-content .header\n .ion-camera:before, body.dashboard .page-content .header\n .ion-card:before, body.dashboard .page-content .header\n .ion-cash:before, body.dashboard .page-content .header\n .ion-chatbox:before, body.dashboard .page-content .header\n .ion-chatbox-working:before, body.dashboard .page-content .header\n .ion-chatboxes:before, body.dashboard .page-content .header\n .ion-chatbubble:before, body.dashboard .page-content .header\n .ion-chatbubble-working:before, body.dashboard .page-content .header\n .ion-chatbubbles:before, body.dashboard .page-content .header\n .ion-checkmark:before, body.dashboard .page-content .header\n .ion-checkmark-circled:before, body.dashboard .page-content .header\n .ion-checkmark-round:before, body.dashboard .page-content .header\n .ion-chevron-down:before, body.dashboard .page-content .header\n .ion-chevron-left:before, body.dashboard .page-content .header\n .ion-chevron-right:before, body.dashboard .page-content .header\n .ion-chevron-up:before, body.dashboard .page-content .header\n .ion-clipboard:before, body.dashboard .page-content .header\n .ion-clock:before, body.dashboard .page-content .header\n .ion-close:before, body.dashboard .page-content .header\n .ion-close-circled:before, body.dashboard .page-content .header\n .ion-close-round:before, body.dashboard .page-content .header\n .ion-closed-captioning:before, body.dashboard .page-content .header\n .ion-cloud:before, body.dashboard .page-content .header\n .ion-code:before, body.dashboard .page-content .header\n .ion-code-download:before, body.dashboard .page-content .header\n .ion-code-working:before, body.dashboard .page-content .header\n .ion-coffee:before, body.dashboard .page-content .header\n .ion-compass:before, body.dashboard .page-content .header\n .ion-compose:before, body.dashboard .page-content .header\n .ion-connection-bars:before, body.dashboard .page-content .header\n .ion-contrast:before, body.dashboard .page-content .header\n .ion-crop:before, body.dashboard .page-content .header\n .ion-cube:before, body.dashboard .page-content .header\n .ion-disc:before, body.dashboard .page-content .header\n .ion-document:before, body.dashboard .page-content .header\n .ion-document-text:before, body.dashboard .page-content .header\n .ion-drag:before, body.dashboard .page-content .header\n .ion-earth:before, body.dashboard .page-content .header\n .ion-easel:before, body.dashboard .page-content .header\n .ion-edit:before, body.dashboard .page-content .header\n .ion-egg:before, body.dashboard .page-content .header\n .ion-eject:before, body.dashboard .page-content .header\n .ion-email:before, body.dashboard .page-content .header\n .ion-email-unread:before, body.dashboard .page-content .header\n .ion-erlenmeyer-flask:before, body.dashboard .page-content .header\n .ion-erlenmeyer-flask-bubbles:before, body.dashboard .page-content .header\n .ion-eye:before, body.dashboard .page-content .header\n .ion-eye-disabled:before, body.dashboard .page-content .header\n .ion-female:before, body.dashboard .page-content .header\n .ion-filing:before, body.dashboard .page-content .header\n .ion-film-marker:before, body.dashboard .page-content .header\n .ion-fireball:before, body.dashboard .page-content .header\n .ion-flag:before, body.dashboard .page-content .header\n .ion-flame:before, body.dashboard .page-content .header\n .ion-flash:before, body.dashboard .page-content .header\n .ion-flash-off:before, body.dashboard .page-content .header\n .ion-folder:before, body.dashboard .page-content .header\n .ion-fork:before, body.dashboard .page-content .header\n .ion-fork-repo:before, body.dashboard .page-content .header\n .ion-forward:before, body.dashboard .page-content .header\n .ion-funnel:before, body.dashboard .page-content .header\n .ion-gear-a:before, body.dashboard .page-content .header\n .ion-gear-b:before, body.dashboard .page-content .header\n .ion-grid:before, body.dashboard .page-content .header\n .ion-hammer:before, body.dashboard .page-content .header\n .ion-happy:before, body.dashboard .page-content .header\n .ion-happy-outline:before, body.dashboard .page-content .header\n .ion-headphone:before, body.dashboard .page-content .header\n .ion-heart:before, body.dashboard .page-content .header\n .ion-heart-broken:before, body.dashboard .page-content .header\n .ion-help:before, body.dashboard .page-content .header\n .ion-help-buoy:before, body.dashboard .page-content .header\n .ion-help-circled:before, body.dashboard .page-content .header\n .ion-home:before, body.dashboard .page-content .header\n .ion-icecream:before, body.dashboard .page-content .header\n .ion-image:before, body.dashboard .page-content .header\n .ion-images:before, body.dashboard .page-content .header\n .ion-information:before, body.dashboard .page-content .header\n .ion-information-circled:before, body.dashboard .page-content .header\n .ion-ionic:before, body.dashboard .page-content .header\n .ion-ios-alarm:before, body.dashboard .page-content .header\n .ion-ios-alarm-outline:before, body.dashboard .page-content .header\n .ion-ios-albums:before, body.dashboard .page-content .header\n .ion-ios-albums-outline:before, body.dashboard .page-content .header\n .ion-ios-americanfootball:before, body.dashboard .page-content .header\n .ion-ios-americanfootball-outline:before, body.dashboard .page-content .header\n .ion-ios-analytics:before, body.dashboard .page-content .header\n .ion-ios-analytics-outline:before, body.dashboard .page-content .header\n .ion-ios-arrow-back:before, body.dashboard .page-content .header\n .ion-ios-arrow-down:before, body.dashboard .page-content .header\n .ion-ios-arrow-forward:before, body.dashboard .page-content .header\n .ion-ios-arrow-left:before, body.dashboard .page-content .header\n .ion-ios-arrow-right:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-down:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-left:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-right:before, body.dashboard .page-content .header\n .ion-ios-arrow-thin-up:before, body.dashboard .page-content .header\n .ion-ios-arrow-up:before, body.dashboard .page-content .header\n .ion-ios-at:before, body.dashboard .page-content .header\n .ion-ios-at-outline:before, body.dashboard .page-content .header\n .ion-ios-barcode:before, body.dashboard .page-content .header\n .ion-ios-barcode-outline:before, body.dashboard .page-content .header\n .ion-ios-baseball:before, body.dashboard .page-content .header\n .ion-ios-baseball-outline:before, body.dashboard .page-content .header\n .ion-ios-basketball:before, body.dashboard .page-content .header\n .ion-ios-basketball-outline:before, body.dashboard .page-content .header\n .ion-ios-bell:before, body.dashboard .page-content .header\n .ion-ios-bell-outline:before, body.dashboard .page-content .header\n .ion-ios-body:before, body.dashboard .page-content .header\n .ion-ios-body-outline:before, body.dashboard .page-content .header\n .ion-ios-bolt:before, body.dashboard .page-content .header\n .ion-ios-bolt-outline:before, body.dashboard .page-content .header\n .ion-ios-book:before, body.dashboard .page-content .header\n .ion-ios-book-outline:before, body.dashboard .page-content .header\n .ion-ios-bookmarks:before, body.dashboard .page-content .header\n .ion-ios-bookmarks-outline:before, body.dashboard .page-content .header\n .ion-ios-box:before, body.dashboard .page-content .header\n .ion-ios-box-outline:before, body.dashboard .page-content .header\n .ion-ios-briefcase:before, body.dashboard .page-content .header\n .ion-ios-briefcase-outline:before, body.dashboard .page-content .header\n .ion-ios-browsers:before, body.dashboard .page-content .header\n .ion-ios-browsers-outline:before, body.dashboard .page-content .header\n .ion-ios-calculator:before, body.dashboard .page-content .header\n .ion-ios-calculator-outline:before, body.dashboard .page-content .header\n .ion-ios-calendar:before, body.dashboard .page-content .header\n .ion-ios-calendar-outline:before, body.dashboard .page-content .header\n .ion-ios-camera:before, body.dashboard .page-content .header\n .ion-ios-camera-outline:before, body.dashboard .page-content .header\n .ion-ios-cart:before, body.dashboard .page-content .header\n .ion-ios-cart-outline:before, body.dashboard .page-content .header\n .ion-ios-chatboxes:before, body.dashboard .page-content .header\n .ion-ios-chatboxes-outline:before, body.dashboard .page-content .header\n .ion-ios-chatbubble:before, body.dashboard .page-content .header\n .ion-ios-chatbubble-outline:before, body.dashboard .page-content .header\n .ion-ios-checkmark:before, body.dashboard .page-content .header\n .ion-ios-checkmark-empty:before, body.dashboard .page-content .header\n .ion-ios-checkmark-outline:before, body.dashboard .page-content .header\n .ion-ios-circle-filled:before, body.dashboard .page-content .header\n .ion-ios-circle-outline:before, body.dashboard .page-content .header\n .ion-ios-clock:before, body.dashboard .page-content .header\n .ion-ios-clock-outline:before, body.dashboard .page-content .header\n .ion-ios-close:before, body.dashboard .page-content .header\n .ion-ios-close-empty:before, body.dashboard .page-content .header\n .ion-ios-close-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud:before, body.dashboard .page-content .header\n .ion-ios-cloud-download:before, body.dashboard .page-content .header\n .ion-ios-cloud-download-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud-outline:before, body.dashboard .page-content .header\n .ion-ios-cloud-upload:before, body.dashboard .page-content .header\n .ion-ios-cloud-upload-outline:before, body.dashboard .page-content .header\n .ion-ios-cloudy:before, body.dashboard .page-content .header\n .ion-ios-cloudy-night:before, body.dashboard .page-content .header\n .ion-ios-cloudy-night-outline:before, body.dashboard .page-content .header\n .ion-ios-cloudy-outline:before, body.dashboard .page-content .header\n .ion-ios-cog:before, body.dashboard .page-content .header\n .ion-ios-cog-outline:before, body.dashboard .page-content .header\n .ion-ios-color-filter:before, body.dashboard .page-content .header\n .ion-ios-color-filter-outline:before, body.dashboard .page-content .header\n .ion-ios-color-wand:before, body.dashboard .page-content .header\n .ion-ios-color-wand-outline:before, body.dashboard .page-content .header\n .ion-ios-compose:before, body.dashboard .page-content .header\n .ion-ios-compose-outline:before, body.dashboard .page-content .header\n .ion-ios-contact:before, body.dashboard .page-content .header\n .ion-ios-contact-outline:before, body.dashboard .page-content .header\n .ion-ios-copy:before, body.dashboard .page-content .header\n .ion-ios-copy-outline:before, body.dashboard .page-content .header\n .ion-ios-crop:before, body.dashboard .page-content .header\n .ion-ios-crop-strong:before, body.dashboard .page-content .header\n .ion-ios-download:before, body.dashboard .page-content .header\n .ion-ios-download-outline:before, body.dashboard .page-content .header\n .ion-ios-drag:before, body.dashboard .page-content .header\n .ion-ios-email:before, body.dashboard .page-content .header\n .ion-ios-email-outline:before, body.dashboard .page-content .header\n .ion-ios-eye:before, body.dashboard .page-content .header\n .ion-ios-eye-outline:before, body.dashboard .page-content .header\n .ion-ios-fastforward:before, body.dashboard .page-content .header\n .ion-ios-fastforward-outline:before, body.dashboard .page-content .header\n .ion-ios-filing:before, body.dashboard .page-content .header\n .ion-ios-filing-outline:before, body.dashboard .page-content .header\n .ion-ios-film:before, body.dashboard .page-content .header\n .ion-ios-film-outline:before, body.dashboard .page-content .header\n .ion-ios-flag:before, body.dashboard .page-content .header\n .ion-ios-flag-outline:before, body.dashboard .page-content .header\n .ion-ios-flame:before, body.dashboard .page-content .header\n .ion-ios-flame-outline:before, body.dashboard .page-content .header\n .ion-ios-flask:before, body.dashboard .page-content .header\n .ion-ios-flask-outline:before, body.dashboard .page-content .header\n .ion-ios-flower:before, body.dashboard .page-content .header\n .ion-ios-flower-outline:before, body.dashboard .page-content .header\n .ion-ios-folder:before, body.dashboard .page-content .header\n .ion-ios-folder-outline:before, body.dashboard .page-content .header\n .ion-ios-football:before, body.dashboard .page-content .header\n .ion-ios-football-outline:before, body.dashboard .page-content .header\n .ion-ios-game-controller-a:before, body.dashboard .page-content .header\n .ion-ios-game-controller-a-outline:before, body.dashboard .page-content .header\n .ion-ios-game-controller-b:before, body.dashboard .page-content .header\n .ion-ios-game-controller-b-outline:before, body.dashboard .page-content .header\n .ion-ios-gear:before, body.dashboard .page-content .header\n .ion-ios-gear-outline:before, body.dashboard .page-content .header\n .ion-ios-glasses:before, body.dashboard .page-content .header\n .ion-ios-glasses-outline:before, body.dashboard .page-content .header\n .ion-ios-grid-view:before, body.dashboard .page-content .header\n .ion-ios-grid-view-outline:before, body.dashboard .page-content .header\n .ion-ios-heart:before, body.dashboard .page-content .header\n .ion-ios-heart-outline:before, body.dashboard .page-content .header\n .ion-ios-help:before, body.dashboard .page-content .header\n .ion-ios-help-empty:before, body.dashboard .page-content .header\n .ion-ios-help-outline:before, body.dashboard .page-content .header\n .ion-ios-home:before, body.dashboard .page-content .header\n .ion-ios-home-outline:before, body.dashboard .page-content .header\n .ion-ios-infinite:before, body.dashboard .page-content .header\n .ion-ios-infinite-outline:before, body.dashboard .page-content .header\n .ion-ios-information:before, body.dashboard .page-content .header\n .ion-ios-information-empty:before, body.dashboard .page-content .header\n .ion-ios-information-outline:before, body.dashboard .page-content .header\n .ion-ios-ionic-outline:before, body.dashboard .page-content .header\n .ion-ios-keypad:before, body.dashboard .page-content .header\n .ion-ios-keypad-outline:before, body.dashboard .page-content .header\n .ion-ios-lightbulb:before, body.dashboard .page-content .header\n .ion-ios-lightbulb-outline:before, body.dashboard .page-content .header\n .ion-ios-list:before, body.dashboard .page-content .header\n .ion-ios-list-outline:before, body.dashboard .page-content .header\n .ion-ios-location:before, body.dashboard .page-content .header\n .ion-ios-location-outline:before, body.dashboard .page-content .header\n .ion-ios-locked:before, body.dashboard .page-content .header\n .ion-ios-locked-outline:before, body.dashboard .page-content .header\n .ion-ios-loop:before, body.dashboard .page-content .header\n .ion-ios-loop-strong:before, body.dashboard .page-content .header\n .ion-ios-medical:before, body.dashboard .page-content .header\n .ion-ios-medical-outline:before, body.dashboard .page-content .header\n .ion-ios-medkit:before, body.dashboard .page-content .header\n .ion-ios-medkit-outline:before, body.dashboard .page-content .header\n .ion-ios-mic:before, body.dashboard .page-content .header\n .ion-ios-mic-off:before, body.dashboard .page-content .header\n .ion-ios-mic-outline:before, body.dashboard .page-content .header\n .ion-ios-minus:before, body.dashboard .page-content .header\n .ion-ios-minus-empty:before, body.dashboard .page-content .header\n .ion-ios-minus-outline:before, body.dashboard .page-content .header\n .ion-ios-monitor:before, body.dashboard .page-content .header\n .ion-ios-monitor-outline:before, body.dashboard .page-content .header\n .ion-ios-moon:before, body.dashboard .page-content .header\n .ion-ios-moon-outline:before, body.dashboard .page-content .header\n .ion-ios-more:before, body.dashboard .page-content .header\n .ion-ios-more-outline:before, body.dashboard .page-content .header\n .ion-ios-musical-note:before, body.dashboard .page-content .header\n .ion-ios-musical-notes:before, body.dashboard .page-content .header\n .ion-ios-navigate:before, body.dashboard .page-content .header\n .ion-ios-navigate-outline:before, body.dashboard .page-content .header\n .ion-ios-nutrition:before, body.dashboard .page-content .header\n .ion-ios-nutrition-outline:before, body.dashboard .page-content .header\n .ion-ios-paper:before, body.dashboard .page-content .header\n .ion-ios-paper-outline:before, body.dashboard .page-content .header\n .ion-ios-paperplane:before, body.dashboard .page-content .header\n .ion-ios-paperplane-outline:before, body.dashboard .page-content .header\n .ion-ios-partlysunny:before, body.dashboard .page-content .header\n .ion-ios-partlysunny-outline:before, body.dashboard .page-content .header\n .ion-ios-pause:before, body.dashboard .page-content .header\n .ion-ios-pause-outline:before, body.dashboard .page-content .header\n .ion-ios-paw:before, body.dashboard .page-content .header\n .ion-ios-paw-outline:before, body.dashboard .page-content .header\n .ion-ios-people:before, body.dashboard .page-content .header\n .ion-ios-people-outline:before, body.dashboard .page-content .header\n .ion-ios-person:before, body.dashboard .page-content .header\n .ion-ios-person-outline:before, body.dashboard .page-content .header\n .ion-ios-personadd:before, body.dashboard .page-content .header\n .ion-ios-personadd-outline:before, body.dashboard .page-content .header\n .ion-ios-photos:before, body.dashboard .page-content .header\n .ion-ios-photos-outline:before, body.dashboard .page-content .header\n .ion-ios-pie:before, body.dashboard .page-content .header\n .ion-ios-pie-outline:before, body.dashboard .page-content .header\n .ion-ios-pint:before, body.dashboard .page-content .header\n .ion-ios-pint-outline:before, body.dashboard .page-content .header\n .ion-ios-play:before, body.dashboard .page-content .header\n .ion-ios-play-outline:before, body.dashboard .page-content .header\n .ion-ios-plus:before, body.dashboard .page-content .header\n .ion-ios-plus-empty:before, body.dashboard .page-content .header\n .ion-ios-plus-outline:before, body.dashboard .page-content .header\n .ion-ios-pricetag:before, body.dashboard .page-content .header\n .ion-ios-pricetag-outline:before, body.dashboard .page-content .header\n .ion-ios-pricetags:before, body.dashboard .page-content .header\n .ion-ios-pricetags-outline:before, body.dashboard .page-content .header\n .ion-ios-printer:before, body.dashboard .page-content .header\n .ion-ios-printer-outline:before, body.dashboard .page-content .header\n .ion-ios-pulse:before, body.dashboard .page-content .header\n .ion-ios-pulse-strong:before, body.dashboard .page-content .header\n .ion-ios-rainy:before, body.dashboard .page-content .header\n .ion-ios-rainy-outline:before, body.dashboard .page-content .header\n .ion-ios-recording:before, body.dashboard .page-content .header\n .ion-ios-recording-outline:before, body.dashboard .page-content .header\n .ion-ios-redo:before, body.dashboard .page-content .header\n .ion-ios-redo-outline:before, body.dashboard .page-content .header\n .ion-ios-refresh:before, body.dashboard .page-content .header\n .ion-ios-refresh-empty:before, body.dashboard .page-content .header\n .ion-ios-refresh-outline:before, body.dashboard .page-content .header\n .ion-ios-reload:before, body.dashboard .page-content .header\n .ion-ios-reverse-camera:before, body.dashboard .page-content .header\n .ion-ios-reverse-camera-outline:before, body.dashboard .page-content .header\n .ion-ios-rewind:before, body.dashboard .page-content .header\n .ion-ios-rewind-outline:before, body.dashboard .page-content .header\n .ion-ios-rose:before, body.dashboard .page-content .header\n .ion-ios-rose-outline:before, body.dashboard .page-content .header\n .ion-ios-search:before, body.dashboard .page-content .header\n .ion-ios-search-strong:before, body.dashboard .page-content .header\n .ion-ios-settings:before, body.dashboard .page-content .header\n .ion-ios-settings-strong:before, body.dashboard .page-content .header\n .ion-ios-shuffle:before, body.dashboard .page-content .header\n .ion-ios-shuffle-strong:before, body.dashboard .page-content .header\n .ion-ios-skipbackward:before, body.dashboard .page-content .header\n .ion-ios-skipbackward-outline:before, body.dashboard .page-content .header\n .ion-ios-skipforward:before, body.dashboard .page-content .header\n .ion-ios-skipforward-outline:before, body.dashboard .page-content .header\n .ion-ios-snowy:before, body.dashboard .page-content .header\n .ion-ios-speedometer:before, body.dashboard .page-content .header\n .ion-ios-speedometer-outline:before, body.dashboard .page-content .header\n .ion-ios-star:before, body.dashboard .page-content .header\n .ion-ios-star-half:before, body.dashboard .page-content .header\n .ion-ios-star-outline:before, body.dashboard .page-content .header\n .ion-ios-stopwatch:before, body.dashboard .page-content .header\n .ion-ios-stopwatch-outline:before, body.dashboard .page-content .header\n .ion-ios-sunny:before, body.dashboard .page-content .header\n .ion-ios-sunny-outline:before, body.dashboard .page-content .header\n .ion-ios-telephone:before, body.dashboard .page-content .header\n .ion-ios-telephone-outline:before, body.dashboard .page-content .header\n .ion-ios-tennisball:before, body.dashboard .page-content .header\n .ion-ios-tennisball-outline:before, body.dashboard .page-content .header\n .ion-ios-thunderstorm:before, body.dashboard .page-content .header\n .ion-ios-thunderstorm-outline:before, body.dashboard .page-content .header\n .ion-ios-time:before, body.dashboard .page-content .header\n .ion-ios-time-outline:before, body.dashboard .page-content .header\n .ion-ios-timer:before, body.dashboard .page-content .header\n .ion-ios-timer-outline:before, body.dashboard .page-content .header\n .ion-ios-toggle:before, body.dashboard .page-content .header\n .ion-ios-toggle-outline:before, body.dashboard .page-content .header\n .ion-ios-trash:before, body.dashboard .page-content .header\n .ion-ios-trash-outline:before, body.dashboard .page-content .header\n .ion-ios-undo:before, body.dashboard .page-content .header\n .ion-ios-undo-outline:before, body.dashboard .page-content .header\n .ion-ios-unlocked:before, body.dashboard .page-content .header\n .ion-ios-unlocked-outline:before, body.dashboard .page-content .header\n .ion-ios-upload:before, body.dashboard .page-content .header\n .ion-ios-upload-outline:before, body.dashboard .page-content .header\n .ion-ios-videocam:before, body.dashboard .page-content .header\n .ion-ios-videocam-outline:before, body.dashboard .page-content .header\n .ion-ios-volume-high:before, body.dashboard .page-content .header\n .ion-ios-volume-low:before, body.dashboard .page-content .header\n .ion-ios-wineglass:before, body.dashboard .page-content .header\n .ion-ios-wineglass-outline:before, body.dashboard .page-content .header\n .ion-ios-world:before, body.dashboard .page-content .header\n .ion-ios-world-outline:before, body.dashboard .page-content .header\n .ion-ipad:before, body.dashboard .page-content .header\n .ion-iphone:before, body.dashboard .page-content .header\n .ion-ipod:before, body.dashboard .page-content .header\n .ion-jet:before, body.dashboard .page-content .header\n .ion-key:before, body.dashboard .page-content .header\n .ion-knife:before, body.dashboard .page-content .header\n .ion-laptop:before, body.dashboard .page-content .header\n .ion-leaf:before, body.dashboard .page-content .header\n .ion-levels:before, body.dashboard .page-content .header\n .ion-lightbulb:before, body.dashboard .page-content .header\n .ion-link:before, body.dashboard .page-content .header\n .ion-load-a:before, body.dashboard .page-content .header\n .ion-load-b:before, body.dashboard .page-content .header\n .ion-load-c:before, body.dashboard .page-content .header\n .ion-load-d:before, body.dashboard .page-content .header\n .ion-location:before, body.dashboard .page-content .header\n .ion-lock-combination:before, body.dashboard .page-content .header\n .ion-locked:before, body.dashboard .page-content .header\n .ion-log-in:before, body.dashboard .page-content .header\n .ion-log-out:before, body.dashboard .page-content .header\n .ion-loop:before, body.dashboard .page-content .header\n .ion-magnet:before, body.dashboard .page-content .header\n .ion-male:before, body.dashboard .page-content .header\n .ion-man:before, body.dashboard .page-content .header\n .ion-map:before, body.dashboard .page-content .header\n .ion-medkit:before, body.dashboard .page-content .header\n .ion-merge:before, body.dashboard .page-content .header\n .ion-mic-a:before, body.dashboard .page-content .header\n .ion-mic-b:before, body.dashboard .page-content .header\n .ion-mic-c:before, body.dashboard .page-content .header\n .ion-minus:before, body.dashboard .page-content .header\n .ion-minus-circled:before, body.dashboard .page-content .header\n .ion-minus-round:before, body.dashboard .page-content .header\n .ion-model-s:before, body.dashboard .page-content .header\n .ion-monitor:before, body.dashboard .page-content .header\n .ion-more:before, body.dashboard .page-content .header\n .ion-mouse:before, body.dashboard .page-content .header\n .ion-music-note:before, body.dashboard .page-content .header\n .ion-navicon:before, body.dashboard .page-content .header\n .ion-navicon-round:before, body.dashboard .page-content .header\n .ion-navigate:before, body.dashboard .page-content .header\n .ion-network:before, body.dashboard .page-content .header\n .ion-no-smoking:before, body.dashboard .page-content .header\n .ion-nuclear:before, body.dashboard .page-content .header\n .ion-outlet:before, body.dashboard .page-content .header\n .ion-paintbrush:before, body.dashboard .page-content .header\n .ion-paintbucket:before, body.dashboard .page-content .header\n .ion-paper-airplane:before, body.dashboard .page-content .header\n .ion-paperclip:before, body.dashboard .page-content .header\n .ion-pause:before, body.dashboard .page-content .header\n .ion-person:before, body.dashboard .page-content .header\n .ion-person-add:before, body.dashboard .page-content .header\n .ion-person-stalker:before, body.dashboard .page-content .header\n .ion-pie-graph:before, body.dashboard .page-content .header\n .ion-pin:before, body.dashboard .page-content .header\n .ion-pinpoint:before, body.dashboard .page-content .header\n .ion-pizza:before, body.dashboard .page-content .header\n .ion-plane:before, body.dashboard .page-content .header\n .ion-planet:before, body.dashboard .page-content .header\n .ion-play:before, body.dashboard .page-content .header\n .ion-playstation:before, body.dashboard .page-content .header\n .ion-plus:before, body.dashboard .page-content .header\n .ion-plus-circled:before, body.dashboard .page-content .header\n .ion-plus-round:before, body.dashboard .page-content .header\n .ion-podium:before, body.dashboard .page-content .header\n .ion-pound:before, body.dashboard .page-content .header\n .ion-power:before, body.dashboard .page-content .header\n .ion-pricetag:before, body.dashboard .page-content .header\n .ion-pricetags:before, body.dashboard .page-content .header\n .ion-printer:before, body.dashboard .page-content .header\n .ion-pull-request:before, body.dashboard .page-content .header\n .ion-qr-scanner:before, body.dashboard .page-content .header\n .ion-quote:before, body.dashboard .page-content .header\n .ion-radio-waves:before, body.dashboard .page-content .header\n .ion-record:before, body.dashboard .page-content .header\n .ion-refresh:before, body.dashboard .page-content .header\n .ion-reply:before, body.dashboard .page-content .header\n .ion-reply-all:before, body.dashboard .page-content .header\n .ion-ribbon-a:before, body.dashboard .page-content .header\n .ion-ribbon-b:before, body.dashboard .page-content .header\n .ion-sad:before, body.dashboard .page-content .header\n .ion-sad-outline:before, body.dashboard .page-content .header\n .ion-scissors:before, body.dashboard .page-content .header\n .ion-search:before, body.dashboard .page-content .header\n .ion-settings:before, body.dashboard .page-content .header\n .ion-share:before, body.dashboard .page-content .header\n .ion-shuffle:before, body.dashboard .page-content .header\n .ion-skip-backward:before, body.dashboard .page-content .header\n .ion-skip-forward:before, body.dashboard .page-content .header\n .ion-social-android:before, body.dashboard .page-content .header\n .ion-social-android-outline:before, body.dashboard .page-content .header\n .ion-social-angular:before, body.dashboard .page-content .header\n .ion-social-angular-outline:before, body.dashboard .page-content .header\n .ion-social-apple:before, body.dashboard .page-content .header\n .ion-social-apple-outline:before, body.dashboard .page-content .header\n .ion-social-bitcoin:before, body.dashboard .page-content .header\n .ion-social-bitcoin-outline:before, body.dashboard .page-content .header\n .ion-social-buffer:before, body.dashboard .page-content .header\n .ion-social-buffer-outline:before, body.dashboard .page-content .header\n .ion-social-chrome:before, body.dashboard .page-content .header\n .ion-social-chrome-outline:before, body.dashboard .page-content .header\n .ion-social-codepen:before, body.dashboard .page-content .header\n .ion-social-codepen-outline:before, body.dashboard .page-content .header\n .ion-social-css3:before, body.dashboard .page-content .header\n .ion-social-css3-outline:before, body.dashboard .page-content .header\n .ion-social-designernews:before, body.dashboard .page-content .header\n .ion-social-designernews-outline:before, body.dashboard .page-content .header\n .ion-social-dribbble:before, body.dashboard .page-content .header\n .ion-social-dribbble-outline:before, body.dashboard .page-content .header\n .ion-social-dropbox:before, body.dashboard .page-content .header\n .ion-social-dropbox-outline:before, body.dashboard .page-content .header\n .ion-social-euro:before, body.dashboard .page-content .header\n .ion-social-euro-outline:before, body.dashboard .page-content .header\n .ion-social-facebook:before, body.dashboard .page-content .header\n .ion-social-facebook-outline:before, body.dashboard .page-content .header\n .ion-social-foursquare:before, body.dashboard .page-content .header\n .ion-social-foursquare-outline:before, body.dashboard .page-content .header\n .ion-social-freebsd-devil:before, body.dashboard .page-content .header\n .ion-social-github:before, body.dashboard .page-content .header\n .ion-social-github-outline:before, body.dashboard .page-content .header\n .ion-social-google:before, body.dashboard .page-content .header\n .ion-social-google-outline:before, body.dashboard .page-content .header\n .ion-social-googleplus:before, body.dashboard .page-content .header\n .ion-social-googleplus-outline:before, body.dashboard .page-content .header\n .ion-social-hackernews:before, body.dashboard .page-content .header\n .ion-social-hackernews-outline:before, body.dashboard .page-content .header\n .ion-social-html5:before, body.dashboard .page-content .header\n .ion-social-html5-outline:before, body.dashboard .page-content .header\n .ion-social-instagram:before, body.dashboard .page-content .header\n .ion-social-instagram-outline:before, body.dashboard .page-content .header\n .ion-social-javascript:before, body.dashboard .page-content .header\n .ion-social-javascript-outline:before, body.dashboard .page-content .header\n .ion-social-linkedin:before, body.dashboard .page-content .header\n .ion-social-linkedin-outline:before, body.dashboard .page-content .header\n .ion-social-markdown:before, body.dashboard .page-content .header\n .ion-social-nodejs:before, body.dashboard .page-content .header\n .ion-social-octocat:before, body.dashboard .page-content .header\n .ion-social-pinterest:before, body.dashboard .page-content .header\n .ion-social-pinterest-outline:before, body.dashboard .page-content .header\n .ion-social-python:before, body.dashboard .page-content .header\n .ion-social-reddit:before, body.dashboard .page-content .header\n .ion-social-reddit-outline:before, body.dashboard .page-content .header\n .ion-social-rss:before, body.dashboard .page-content .header\n .ion-social-rss-outline:before, body.dashboard .page-content .header\n .ion-social-sass:before, body.dashboard .page-content .header\n .ion-social-skype:before, body.dashboard .page-content .header\n .ion-social-skype-outline:before, body.dashboard .page-content .header\n .ion-social-snapchat:before, body.dashboard .page-content .header\n .ion-social-snapchat-outline:before, body.dashboard .page-content .header\n .ion-social-tumblr:before, body.dashboard .page-content .header\n .ion-social-tumblr-outline:before, body.dashboard .page-content .header\n .ion-social-tux:before, body.dashboard .page-content .header\n .ion-social-twitch:before, body.dashboard .page-content .header\n .ion-social-twitch-outline:before, body.dashboard .page-content .header\n .ion-social-twitter:before, body.dashboard .page-content .header\n .ion-social-twitter-outline:before, body.dashboard .page-content .header\n .ion-social-usd:before, body.dashboard .page-content .header\n .ion-social-usd-outline:before, body.dashboard .page-content .header\n .ion-social-vimeo:before, body.dashboard .page-content .header\n .ion-social-vimeo-outline:before, body.dashboard .page-content .header\n .ion-social-whatsapp:before, body.dashboard .page-content .header\n .ion-social-whatsapp-outline:before, body.dashboard .page-content .header\n .ion-social-windows:before, body.dashboard .page-content .header\n .ion-social-windows-outline:before, body.dashboard .page-content .header\n .ion-social-wordpress:before, body.dashboard .page-content .header\n .ion-social-wordpress-outline:before, body.dashboard .page-content .header\n .ion-social-yahoo:before, body.dashboard .page-content .header\n .ion-social-yahoo-outline:before, body.dashboard .page-content .header\n .ion-social-yen:before, body.dashboard .page-content .header\n .ion-social-yen-outline:before, body.dashboard .page-content .header\n .ion-social-youtube:before, body.dashboard .page-content .header\n .ion-social-youtube-outline:before, body.dashboard .page-content .header\n .ion-soup-can:before, body.dashboard .page-content .header\n .ion-soup-can-outline:before, body.dashboard .page-content .header\n .ion-speakerphone:before, body.dashboard .page-content .header\n .ion-speedometer:before, body.dashboard .page-content .header\n .ion-spoon:before, body.dashboard .page-content .header\n .ion-star:before, body.dashboard .page-content .header\n .ion-stats-bars:before, body.dashboard .page-content .header\n .ion-steam:before, body.dashboard .page-content .header\n .ion-stop:before, body.dashboard .page-content .header\n .ion-thermometer:before, body.dashboard .page-content .header\n .ion-thumbsdown:before, body.dashboard .page-content .header\n .ion-thumbsup:before, body.dashboard .page-content .header\n .ion-toggle:before, body.dashboard .page-content .header\n .ion-toggle-filled:before, body.dashboard .page-content .header\n .ion-transgender:before, body.dashboard .page-content .header\n .ion-trash-a:before, body.dashboard .page-content .header\n .ion-trash-b:before, body.dashboard .page-content .header\n .ion-trophy:before, body.dashboard .page-content .header\n .ion-tshirt:before, body.dashboard .page-content .header\n .ion-tshirt-outline:before, body.dashboard .page-content .header\n .ion-umbrella:before, body.dashboard .page-content .header\n .ion-university:before, body.dashboard .page-content .header\n .ion-unlocked:before, body.dashboard .page-content .header\n .ion-upload:before, body.dashboard .page-content .header\n .ion-usb:before, body.dashboard .page-content .header\n .ion-videocamera:before, body.dashboard .page-content .header\n .ion-volume-high:before, body.dashboard .page-content .header\n .ion-volume-low:before, body.dashboard .page-content .header\n .ion-volume-medium:before, body.dashboard .page-content .header\n .ion-volume-mute:before, body.dashboard .page-content .header\n .ion-wand:before, body.dashboard .page-content .header\n .ion-waterdrop:before, body.dashboard .page-content .header\n .ion-wifi:before, body.dashboard .page-content .header\n .ion-wineglass:before, body.dashboard .page-content .header\n .ion-woman:before, body.dashboard .page-content .header\n .ion-wrench:before, body.dashboard .page-content .header\n .ion-xbox:before {\n margin-right: 2px; }\n body.dashboard .page-content .sub-header {\n font-weight: 300;\n text-transform: uppercase; }\n body.dashboard .page-content .sub-header a {\n text-transform: none; }\n body.dashboard .page-content .striped-list .striped-list-item {\n border-bottom: 1px solid #f0f0f0;\n padding: 8px 0; }\n body.dashboard .page-content .drag-handle {\n cursor: move; }\n body.dashboard .page-content .user-grid .user img {\n border-radius: 5px;\n margin-bottom: 15px;\n border: 0; }\n body.dashboard .page-content .user-grid .user .name {\n font-weight: 600; }\n body.dashboard .page-content .user-grid .user .email {\n color: #444;\n margin-top: 4px; }\n\n@media (max-width: 767px) {\n body.dashboard .page-content .content-wrapper {\n padding-left: 20px;\n padding-right: 20px; }\n body.dashboard .page-content .header {\n padding-left: 20px;\n padding-right: 20px; }\n body.dashboard .page-content .header.fixed {\n padding-left: 20px;\n padding-right: 20px; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n body.dashboard .page-content .header.fixed {\n padding-left: 120px; } }\n\n#welcome-modal .modal-dialog {\n margin-top: 65px; }\n\n#welcome-modal .modal-content .modal-header {\n border-bottom: 0; }\n\n#welcome-modal .modal-content .modal-body {\n padding-bottom: 50px; }\n #welcome-modal .modal-content .modal-body header {\n text-align: center;\n font-weight: 600;\n font-size: 22px;\n color: #444;\n margin-bottom: 23px; }\n #welcome-modal .modal-content .modal-body p {\n font-size: 13px;\n color: #555;\n margin: 0 auto;\n width: 80%;\n text-align: center;\n line-height: 20px; }\n #welcome-modal .modal-content .modal-body .go-dashboard {\n text-align: center;\n display: block;\n margin-top: 10px; }\n #welcome-modal .modal-content .modal-body .get-started {\n margin-top: 40px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 {\n text-align: center;\n padding-bottom: 50px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a {\n color: #666;\n display: block;\n margin-top: 12px;\n font-size: 13px; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a i {\n font-size: 38px;\n color: #6DB81C;\n display: block; }\n #welcome-modal .modal-content .modal-body .get-started .col-md-4 a:hover {\n text-decoration: none;\n color: #999; }\n\nbody.login .form-bg {\n border-radius: 10px;\n margin: auto;\n margin-top: 60px;\n padding: 30px;\n width: 320px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2);\n background-color: white; }\n\nbody.login .logo {\n margin-bottom: 30px; }\n body.login .logo img {\n margin: 0 auto; }\n\nbody.login .login-input {\n height: 45px; }\n\nbody.login i {\n font-size: 22px; }\n\nbody.login .btn.btn-white {\n background-color: white;\n transition: background-color 0.5s ease; }\n body.login .btn.btn-white.btn-trans {\n background-color: transparent;\n border: 1px solid white;\n border-radius: 4px;\n color: white; }\n body.login .btn.btn-white.btn-trans:hover {\n background-color: white;\n color: #7ED321; }\n\n.setup-page {\n padding-top: 60px; }\n .setup-page .logo {\n display: block;\n margin: 0 auto 30px; }\n .setup-page .steps {\n margin: 0 auto;\n border-radius: 2px 2px 0 0;\n margin-bottom: 20px; }\n .setup-page .steps .step {\n padding: 20px 0;\n text-align: center;\n position: relative;\n font-size: 13px; }\n .setup-page .steps .step:not(:last-child):after {\n content: '';\n position: absolute;\n bottom: 31px;\n left: 55%;\n display: block;\n height: 1px;\n background: #94A1B8;\n width: 100%; }\n .setup-page .steps .step span {\n width: 23px;\n height: 23px;\n display: block;\n position: relative;\n margin: 0 auto;\n margin-top: 13px;\n border-radius: 25px;\n background: #f0f3f4;\n border: 1px solid #94A1B8;\n -webkit-transition: all 0.2s linear;\n -moz-transition: all 0.2s linear;\n -ms-transition: all 0.2s linear;\n -o-transition: all 0.2s linear;\n transition: all 0.2s linear; }\n .setup-page .steps .step.active span {\n background: #7ED321; }\n .setup-page .setup-success {\n text-align: center; }\n .setup-page .setup-success i {\n font-size: 47px; }\n .setup-page .setup-success h3 {\n margin-top: 25px;\n font-size: 21px;\n color: #556579; }\n .setup-page .setup-success .btn {\n margin-top: 40px; }\n\n.component-inline-update {\n padding-top: 8px; }\n .component-inline-update label {\n display: initial;\n font-weight: normal; }\n\n.component-group-name {\n font-size: 18px;\n padding-left: 10px; }\n\n.component-group-other {\n font-size: 18px; }\n\n.stats-widget {\n text-align: center;\n margin-bottom: 30px;\n background-color: #fff;\n border: #eee 1px solid; }\n .stats-widget.full-stats-block .stats-bottom {\n border-top: 0 !important;\n color: #fff;\n position: relative;\n margin-top: -1px;\n z-index: 1000; }\n .stats-widget .stats-top {\n padding: 20px; }\n .stats-widget .stats-top > span {\n display: block;\n text-align: center; }\n .stats-widget .stats-top > span.stats-value {\n font-size: 24px;\n font-weight: 400; }\n .stats-widget .stats-top > span.stats-label {\n padding-top: 5px;\n font-size: 14px;\n font-weight: 300;\n color: #777; }\n .stats-widget .stats-chart {\n margin-top: -20px;\n padding-top: 10px; }\n .stats-widget .stats-body {\n margin-top: -20px;\n padding-top: 10px; }\n .stats-widget .stats-body .list-group {\n border: none;\n padding-bottom: 0;\n margin-bottom: 0; }\n .stats-widget .stats-body .list-group .list-group-item {\n border-right: none;\n border-left: none;\n border-color: #eee; }\n .stats-widget .stats-body .list-group .list-group-item:last-child {\n border-bottom: none; }\n .stats-widget .stats-bottom {\n border-top: #eee 1px solid;\n color: #777;\n padding: 12px 10px;\n text-align: center;\n background-color: #f9f9f9; }\n .stats-widget .stats-bottom.bg-green {\n background-color: #7ED321;\n color: white; }\n .stats-widget .stats-bottom.bg-blue {\n background-color: #3498db;\n color: white; }\n .stats-widget .stats-bottom.bg-red {\n background-color: #ff6f6f;\n color: white; }\n .stats-widget .stats-bottom.bg-teal {\n background-color: #0dccc0;\n color: white; }\n\n.minicolors {\n position: relative; }\n\n.minicolors-sprite {\n background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2YAAACWCAYAAAC1r5t6AAEuWklEQVR42uz9a8xt25YVhrU+1ner7qseLiEjhERwfkDFeWAEl6dCQcAUCBDCwUSJwg+jRPIzgGVZMcZ2DCKyIycxiSOi2JbMr8hBgFNVGKNAHgKCTBnbUYCYEsHYIoiKKuYW9zzu2XvP0fNjjUfrbfQx5/r23ufWPnX2PvrOWmvOueYc87HmHG201luzv/GzvstvVmG4/3N39H8GAwzAnASHw8zgDpjRdAcOFPz0v/J1mvrm/374h3+48Oevfe1rOh/PnF/xdv+5TvgLf+EvLAv9vJ/38/ATsdzP/bk/l9tZ6c/l/XEyr8/3B9ZT3X07r/1hM/04+U62XW1X2ka/X9Rn63l0e33fHmnLbtvhONOxqiffw9m+9HW4+9h+X87dR5vbv4M+11prHW/mP3/16lU9jqO+fPnSP/nkk/rxxx/XDz74oP7Yj/2Y/8iP/Ej9F/7l/8lLfAXAVwB8mV75L5v26LwvAh8X4EMAHwH40O9//P5Dm58/wn3ZD/pnu7//AMA3APw4gB9ty8GSX++Y9iXAfyqA7wbsOwH/jtYg/vvquiP+ZcC+StO+dJ+GrwDHF+4N+tCBj+3+NxrdduJjzJ3t0z+k6R+01w8B/B0AXwfwX2R3H6AA+J7291UAX4Xjq7DldH0Fjq/A8GV425v7+/s00PRxSnDDJ9TQj0ejDB/D23RrO+Ft+n3+R+F17tQ32s58HUCFHzWen7d9p7Zv0cre6rZ+QnbwJ6AZ9MVnrGMu2t+tX7bvKOnPNnz+0sl96er+9kWEX8ZH9P7Di/f9l6D3q/9ve3/+7zsB/FQA39Xef0f71ev9Sm/U8U4Qpr26xR3Iduijzfv++QO6Z32j3av+Nj3N6N+3Afi72x58B7X4q9JCPkVfkcOfff42AMCLTcO1wWdn7IPkfvW3743/o2/xB/cE4MmAL2D+PXl7tfv78NrmP9F3nxy4GQ5zvALwCoYDwCsAB7y9WpvnOML87LUv4+174/NT+/xLDthX27LffwD/JV0n/+n65zbw1w7Yn2yfv3HA/lzb5qtX67bHfvB613Va2O/dsXA8wfAExxOAG9A+zwP7BThusPYKfAEWTxIcX2jffUuXwk/HJ4DX/S3PLZ9mhMh6z8YNZvZWnwx//s//+bf9pHkHnlzfun+1VrRr8VFAspvn1Ol/k/U8GwwlgITbA26btNN3856zzBusiwYunHsOBsDatPQzvS9t/8PASfbq7n1Zb5/HX1/mOI7Spo1lGhDDcRx49eoVXr165S9fvsSLFy/w4sUL//jjj/HBBx/gx3/8x/G3/tbf8h/5kR95rLeU/HkG7elMO51Zr3rhbQ6uzRejASNr/7PWHitJG4v27qwt2E6LtVcvbXppG7f1z6gxTt+1Ns/ae8fcsOkdSXbGbV3Ozu9i/aKZLbOweAm7baMza2NJH9+6z3VaJ+9zRLVlLD2/c35hrONbDofXdujaOeFu9iP99dNlfF3Q274/H2P4g0N2vj56rnbkdcCNt2vmbQKr1wJZ/bo9+/JunofB3kfPtS/fr3Qtzp/uuJD1D8uPJv6Q9Admj/UoXL6S/Yz7342ac3u4m9c7j7dkB3jndjvzGsPPdvEH2oki72u+B9miu9XuDr8/66J+ZGcgF8kNsNs8O3Z8nrqSX76PVuL77jjafmMjb34RYF+6vy/hmVPGrzBekbW93h/5Tsv572xn5EMAf76dgz8K4McA/F/akORHn4eD/XQfV5VfS+/ZKC0We5qzwzGuewPwN98q8Pna175mb8iQfa6BGTOgz1yWAUJpAxHt8rC3ts0z4IJ9l9Toe/UChNtVm2jesm1337alzSsEVvV54SfgqzSGq7ehgypdDjTNGtgO66O/oy/XAJe5u7XXDsxqm4fjOFBrtfbeXr16Za9evSovX770Fy9e+CeffGLf/OY38eGHH9o3vvEN+/rXv24/+qM/ih/7sR8zz35JHVBhgiG+XVwCNY8Ard7HelB9351Huw110BZm2WwPdn1Wz3p5Gb52mZ5darxTm1uNKyponVjfdfapk+s21+2vdxuzDn7aJ0sOgtOrJ03vc9bT760rzHN17CTrLIn0wufjxNu+ejsvxnvRgLC5w3UPze64tnfPra+HwG77yfK6nbv5xmOTNpFCmN1b5APOTqjHx7kddeNz5+OaXLbL63I0lYrPdVGb5jctXHtm/Vje97t42HRsedj8fVvG5JVbU8vMTYz9Nx6c9fBrsAC6+8CHj9/tvP9mR65dTeZ0PzEB0u1Y+Bxc6Oc4rL8kIxY7sGXJz1e/43t87gkgQ7Jq7bDqwMrTQ7/mpw2oKEmDffcYze9VdoJfrnYo25myh5ZFxsjKCVQ6G5/yizvfeWOxOStlDtZZaeDsJ3038osAfjaA7wfwXwHs1wL2RYN9l4VBuzscm09GC5KhOI9BmY/391cf593hXynwX9GA269og3xftzsp/e8C+MsA/k8A/l+NEv3JCMy+C7B6/sMcd2JbAVlY9u0Ds0/hF/B5ZMweAUV6p/LnAK8N8HkEZIHATxhT6+vsQFAAFOi7fTmTZXwDNHcADFfATJfj7XFb5HvhcwNObmaF2KxKoCoFZg2QIQNpDYDd7pPqYMRqrf3vrmM8Dj+Ow2ut3hiy2l7tOA57+fIl2l/55JNP8PHHH/sHH3yAv/N3/g5+/Md/HF//+tf9gw8+CEM5jgmsLMMw9NkSMLaAMwJmFe2VcElt/TCvE7ghYdX4SnbIIL7vrhJPAFRNgJogSdR7Q8YOtmnmQOWdcfoqIcoOzsJ7BmXc+b1mRjJQtVLMVR6a1s7rBBQV3qZ7W+ZoU/qjtT+OK33LCbx56JjPLncEgsbAFkYsr7ULAksXv19vlad1YC1gbZDZnowYeNjyipEds9PvK4BFwMtzG3RnAN8exzbGaTUaW54jCR0c3XcnwuJ5Mce23MHs/cfhPNDQLruJeH2AngD4x2/Hm5CmL9v2k7oK7tbOu9GPOIP30pfwDjh9gfV92GACQKdDwmebAKj7OMbekLShtvtCO07KkFny2RJEgAQ1IQcndgF7rv60OSck04aWKgnytM10CPjwPclkZ0OeJ0RdETrwtoeWJVnMNntjD+DB65254jIZiLH6oRBr9uonW3fxSwD+mwB+PYBfDdjPLiioA3yZ3NXX1yqMGT8huYNnBNBW9iy+lvuT5rsNjgL/h+rc4n8C4E8A+CEAfxZ3bf1PEmBm38nDZ3l3vJjchHyzrH0WgNR7YLYCsvPBpmsQtrtX+gMMmm9A2hlQ8k27+Dm2kwyeMmEbIHYGzFy27y49DmLTOnM11snAirY/ANYdazqfS+/va63eARsDtVpr6V9qrBg6GOt/r1696sAMx3F4B2QvXryoL168wMuXL8vLly/x0Ucf+QcffIBvfOMb+MY3voEPPvjAP/roI0LPiKUhZ4jAG4hSfFMnGGNpY/UJyjrBUQnP9PkO6m9b7P+5EmGgJ0NKUFnojId7njPwYtAm83ln7ADqrTW2s2QdpNUVhDnp91xqbnB2711/UFcAbf3z8YD0AMYqFTs6jXdmpagd3jHn4QKpnDrWHrvZdc67E1Se7KqFNclNIDkez1ANnM7ziy9Zun09Ab5dIBvwum6pL8v7+Q65zs9Y2mQFvrK+ft7ITTv8ep927dqdFd+dKT8HD0qOnNE02yfcvnUZaDhTTKqU8RyYMZR5RL6oSNOxlfj5BRjDBshmgIx3Kvl3S1b1iKr0SmH6WBcF+ZZNQJkpWHt79UQ/wf++DcAvBPDfAezXGexn3ve0DPjTQdmUJzJL1sGYEdiyFJA5saGRQWP2LANnE6D5+OwowPdW1O8F8NsN/tcA/2MA/g8A/n0ALz/jwOyr8ZdoOx1u6GoDKmH47ACpt7q+d8noI1vuww8/3B6HM5DzpuxaIovc3R3LlRxRwNCWMRO2LZM92hVoOwNmm/cdBBmAgxiwsH7+LBLIgODa50qAC8SIjScJAbPBijUTDzQvjw7SrNZaGJQdxxGAGdeUvXz5Ep988ol/85vfrC9evLAXL17Yhx9+iP738ccf+4sXL6b6zqNsyXFJ06wyRtU6tPoyL+0VAtCYFevLYYK1paNqcewpkDPZVRoka77pyPKONGYMjR1j1sylWK4StbesypNiOpbe9fvu479aXawiShl9/FeI50JjyjLwVsNaLIV3SN531ikyXwtzlgIr2yADEh/aZIOss2BlldY1jiVI5Dy5DuL0uyzQCfXPzTk86AMn6zXWYSt5bwIhWPjY98PhKE3COOZ7Gyjtpd4ygGBc3hVFjunl7jyeOrZTSUcqkkUdw7V+zgpxXjlJYR7PAYg9DW02D4TwfT8jRF94D4vnK4COMzbsTerJNmVyV+Vn9uDfifqPAMXTBZQ52xHbt/xsv0sCZIFznablwOwm+M1OYKTCqOd16Naa2P2ZS+qCTWuPP/PA7O8B8NsB/BrAfrahNCBUiB3jv1mPXNoxqu39TsroWKWMJFcMIE2kjAGU9fkdwFmDg6UByPv0+l8uwD9RUf+JxqT9uwB+P4D//LMJzPAVqSPzeLfTIT7LLnRQjRnetitjWN9bcGX83NeYPQrImAzCXmF/xogtrNIDbVTQ5AlQc3lMVGH/kGyTvzeAUqvdGCDVzALLmEkK5b2Cq/A9BlZmZg04mZkNRqtJNcc8RMnjaB/Vinlr45je5+n74zisyxYbc1ZqrUO+2P7w8uVL60DsxYsX+Pjjj+2jjz6yFy9e+De/+U3rfw28WaV+TyWABsIkdlJDBsItOm1IGQmbBFxjMv2I8kVWBzKZtQU0JqArW9aUDpSdcmq4yhm5SK5mO+OJlJGli1V2Jlzpyy1XuqULZzUfnj64r7tEsT9YPcXLtQGzLmOcnFo8FixzNGLY4pq3IzoJsDxnWMJdwn0eqjqPoYvMjhR+6/PMV04quxX5jqEiBOJB/+crozMesQpqGkvuKzNoXdrosTbNWK64YdVCK8KF4qMd8zqjWj73nKwdk+vmfM4foidSx1G6N/alBnDpY7/8nDtz5VY9NrAkjM4ZUCs4N9zxcyLPHhyVzMimGx41APlCQlGdcU72jJ262AE8uDN8rG/rfZXLz3a+LHYC0kyua7sci39AFFmsbZiZM2phueU789n49/0Afitgv6GgfOcd7qBBISMDpxyYObFl+uoC0KqwY7HGLK0tWySMfZDQhDkrYyDIx+f7q6EA31tQv/eA/zbAfxDAHwTwpz5jjNlXhClrd0JQPRlffLb7CfjnkjF71/+plPFRYw4BOsH840FW7AyQGfZ1XX5iQmJYDT14B5l9S7fBJiMNIAV2q9WpqUlHPQFmvM7Ong3mi4EZyxW77LGfo2Zrv8gc24oK1Yvxd5xYsd6OWwNh3pm04ziGlPHVq1fHcRzWppXEhbEzZvjkk0/w4YcferPMxze/+U28ePHiDvIyXwthyHrJFTyZX3OWbPSlapQy9lqyGvt6iTUmqQGlP+w7m/yAYoQuGexZAsIyCnAsWyc4qzVT/LWdqrNgrsscO02o6DLrFW86B+fWG56aqXRGjBWlnO1QxzipD7FjZt5qtKOeyhiHrcPS9uJ+RkZgsVRHNAnO+pcuRiX500vZO0tHoyLTZcsajKwEPT0DlvxobJYN2vned7BmDAJ1t7PNJJd6IOhS1aDnYwHPHx7cn8WkdvARNWZs+IT8tvtGVo51pp87Q1TAtrjJkjP9CDTKJI2dNTsdV1+0gmfVbRmUOWHQrurLzgCtHtfbHpjdTr5q+0O9Zc4svVAcl1V/1kAZvw6mrESAZp85YParAfunDPb33yWJpd3NI0PGssVu7JHXmOV1ZqusMZc07pwZy6g5W6WMNcgYfXyuAULOPSjw7y6ov/WA/1bA/z0A/3MAf/IzAsy+eg5hgtEH2WWF9++B2WcAmPmGcUqPUQMOx4PATQZ7PXssVuTySce5MYera6LIFzOQZiplTEBVYLS6cUhntjrjVErBcRxWSkGt1XochDgldpnhIWxZqClz91H7lQCxwZi5+43BYJMm9m24uxeWLrLBR8sh6+sqDMxIwuivXr3qWWV2HId1UMbArAOxjz76qH7yySel1aH5y5cv76ALOYnDSj3bIQBmshSwHRNgdSKpNsliNzHobFlkHbA6dVcZb1p+IBmVIA31jdVkeOg3tiwAuP56TIBVM8MPp7bUiCC1/ox/duZSXOfSDVkL3Z1g2XycRQljtOxAUiVWlxoxPqC+HNy5M0ZCSm7j8ET0XSVXNOy4g7FuImHDyy+4J7aLYTCptMXq3VTIA8DzzGLP+jZ7WbsPfsgaOBikU5M2GuZrl9MxhLBFxCkAyWvb3uzAhFPeZJOsujWqMHAFWEZbdumqGqhVzeWyNcTNmjcYc3qWYmTmxYzRstEP2eQ69JaLOtq/gYByg7HmvBkB5J2XNcT1DF/hgnMDw3KCY4CHLQDtBCRcGYIohjwHZjeBNVcwcAfWtiMaj6Cex0Fad/Z/EfcgA2daxmcXOPn53T4x/xh0XQdmBMR6P3jEp3S7/PMKwHcHkOGfMdgvt8YnRSBWgAC+CgGtEhiyCNQQXlfDD9vWmJ2BMn2dIC2TMjKLVgNoK+0+bYNJq7/GUH8N4H8SwL/0rjNoTyhfiUXmqsNV0bjRxHCXiYr198Ds3fiXyeweAFu5M/nKZJ2ZezDQqifrGnc3XQ/Vbu3YNCfWiwFXb9eI1esmG02q2GWL1hmoBNChyQSHu+HGwr4AcF6PAjN67yR1LA2chfqzxnwNEKuSxQa2uvNisMTnurLOmjUpY7fE7+6LvbbMXr58aQ2sBSkjv+8SxlevXpVXr17VWqu5jmyLJ8ZigpdJFp1wTDK9lgbI+tdJFUiGcdHcEBO8YWOjv1BKi6RLUKQx2rz483p3uWUnk278EXSYmAjTFbCJEUgCTKKUMed2qgA1p2ynWVvGn7sI0ZHHzfWHY8U0+dibgOTHiC37l65+vF+d9c1rQDFY6tkI4HQAE1wXfQPCBAFVI9Nin0ctdPp5XR6h1oDAnngWbnLaVA5ZEyZvsm2rX4wtoxPRjdKVIwxmHr5KQxfHEqbFJwCrmGb2oQSCt+3MlsZj5zwQYSuTOL9r0XQkXkBTeskDNWdZZVks35XFIvaEiV10Oq6cGdk34+mUE39KYE2m2TyzxbjwNXxEf3n1WdnKhPMzrBYmWenfI+SlP+voNzBWmtFHlzCmUkZizsbrO/vv+wH7Jw32q0uDLROQFbK5LwvP1M0/dkxZEVOQgsyhESJltADE1Dqfa80mOJtM2Wz5lDJGpsxEfGkE0ipsQNL6qwz1VwH444D/L95VBu0J+BKNCGykELscSEtHmN92jlm4+t9Cjtlb5Z7fJaOPbLmf+TN/pjJLZzb4Z46H6SPppD7syjkxq9EyYcUCaOsyQ0zZYXH3w/uoq7gyErCDvA+DcSwzFEbOxMSjgylm77iubLgyErgKIK4DOAZlCs6ojoyBWVEb/OM4nNi0wiCySRdxHEcl6aJ1R8b2B2LB6nEcpYdKdyOQzpB9/PHH9eXLl3j16tWdhduwYZ5YABr3tTYh0+6IurnuMu9kmV8jCGMHele2zpJ2GXJNV5V5UIt6sr73BEX2HejzOzDrr0PKSH7/AcNYRJwBy1g0AFksMFfgNmOe14QyJ0ARxYZs62HD/EP/Vs/GrMaMoQRb64MsH5C+M2/jr078ls2TVjsbZTZc9I1gRjeKGEBg+s038DLjBmKG2MqUWlvWMZWmDCDv22Mj927VzkxSq91qpiQ1jGFOBqu2Hwrve8g5s3lNkkm9mHKQnb+RlSmxYib1ib5oCi068Te2zQbgkZjTxvC6cbs8wHBjhtOBap6w2BZjU+/2R3c21Jpb58iiq0AAbNbaNY/n/bDX1nYssVRbm/wzaSMuGDWVgCA1YN9ucleWlUtXdtVZZ6LJgtylMev0nYz7ZMjoEXmoADPDuYwx++pVAtu55Db5Vq8nKwBuvYZMZIxql9+ljP5OGoD8PQD+OUP5h6azYkmki4WcFudnFQUym1YDCMtkjcyinWWYxfoydWZUUKaujBZqy7TGrI7PnVlj0FaGSNN/LVB/LYB/HcDvA/CfvVvAzL4cLY2MmbKTgGmeHwvj3zNm79C/Z9SY2QVoKyfM184eP3M/VDt7BUoLOMJqBKL5YUAcXDYNZRagZhvXxPCeAVObXsXWfqyzyQ+HlFGAVmmvNZM50nwnaSRb6aNLFLPg6A7AiDHrLoxgS/wG1soGmOHly5f11atX5cWLF+zS6I1dQ5dB1lpn+VPiuOYEyAJ7tguVrjlz5uQsP9wZyXlxIZ8Q5YzBQ0OxDT/B2T6/GharSQjqWyzzJQ/AfAVmXCTHhXLV84K54PuPyUA4We4bdbyRktkLy7KKEI1U+pHR8QWcNXOGUImWGX9AODggqznLbEpKjUyajxNXhW3y4UpYOXC6ChO2s4Zn4wwjRotzwtXt0GMJIrs0pmwYnw+vi7zQ6buTlPUwxtmBH2pinNGBYaVlnbdP13KN28zMTgJoFmtTF4bOwL8vNg5ZTTgiq8iB4EaB0nX8Jrw5PTr9mJ3zzFyPs5M81RcDlPCEup3QMQXnQckP+rPbA6+6yZ3LfBcrrsDshuuiuUfYss2Y9XNK1XYOl1kGAFGABXf7kiyJDc/YC1yelqSBnYy4dXAmdWWFbfPJLt/ajrx7wOzbAPxjcPsX4eU7ipUFhOUAbfJLuRujETNmQ4RdBuSBhE1HN8Yql8SjUkaWMM5pHurMatpaBmF1QM/SFB4diHaQ5sD/sMJ+C4B/DsAfwDsSTvcE+9LU0Ya7tK3Twkgt1nyzeyfhbfO7bxtIvdP886cFzNRt8EFQlppsMChqTFUAZMRseRIS3X+HnkgXFeA5rYvrv1xZPq4N659l/xRIPReYQQ08ZFkk75kBUzDGn5k9c9zt8J2zypK6MhcgBgJjB08nYFa7C2ObXhoL1oFYB2gcND0A3CeffOKNpQsSxZATRrePusEuUEMQWaZjmlom2ZEK4/L+ZV5rlolzzz4PNk2rrZDoMzEpPjYBqYREfbcDSNgvJCwZyOWiJiDMaIpvhQG2GH9kDo0xoW3ubW3LHGIAklvlS/XUyc3cloEjX4AbwgBiAEc2qVSTGIeBixwbyhSD0VrOCX3ZLV7vwyY+tac34uEGl7ZeZm2bBkc1C5aKRmxbtJPPcWYoHAPXe8XwZ5MA7DBW0am+ujKwca9myLVReQMlfYSRGv5e8J/sTpA0KOxtBIaH9kzdIulqGldYZ9MoygDtmBp8BWRallUexC+WjCnILD/BdI9EpLG7fJf6IQVmTw+CMrtAVifdrKsStTNdYcZKCjC7bdiw8sCxe8TSZHuD70zZjRgzBmGFasqMQFp/9e7O+E78+37A/hV4+a+hltHmYoXkiUWkiwXRfbEkph+lAaQi7FiUMuZh0wzAbMkte46UkUFYXk8Wa8tKqKCrKAQ9p6zRxzEosO+qsP9VBf4HDvyTeAfqz+6ujCYCa0NODi99AK1He8+YvWv/2L79pBbsTL64mzaAV2LOsQVdZGoBRne97ktAZLnPqsuyVFeGVkjmtdZhnS+gzgVgMZC0zPpezT1onwJIo/U71ZQpEHPNMZNA6LGNnlXWjUDo1YUt6+Ct2+GzRX7peWW9xoxcGAfQauDMGjizxpbVly9f+nEcw0q/G4RwXVs9wzRdzefRcMNX7/VocqhlWUdTNyaOjFyGxaVaofsmtWeLoayyZoH6YyYIyKGhFsb1nAA2AhEp49h3tpuU+YttvglrBmx89kJLI6CyRb6IsAdqAsJeLNMc/35GJozb15lVccjTLXuKlmcWO6SWji4g70xSUj/liTff8iYLgd45B7rQrcziZFQstWW3LbqX0ihU3C47Dj5iibj1bZAIAIuFbQE41yjNhOyNY/VtcrbV54EBx8xfU9OckBOoO71Kdd186Y6EIzzMo31ky3HYd2DMdvpBnACKM4CSHPNHQVm5IJkS9Z+MLz/KlNkDO+Pn4CzrOT2KA7mpT3M9Gd93BSfLCTbc/xw8MmVjw8SYWUlqy9jwQ+vLDLCnd6GL978G7B9Bvd1GLZwXwK0Bs0KQJpMyFnFeLKlD47siZazUshLyzGpodf88TUBMuMHaLoPJqxnsv3EA/54D/xqA3/kTC8zKF9vJfADKcCKcLmB9xPit55iF+9JbyDH7zAVPvA3GbAe0TqYHwMZAqPeIhIXLTDyWmjPK7GIzDmd3xA4+GigzMvHoZh0DJPRssLkrk/nq3xVwOMDYBUu2LLcBXtm8fgy6MQgaumRgdrufnmF1z2YhLEvsDNpikd8BGwEvdmLswAwM1F69elVJmjjAWpMzllevXvmLFy/A+Wcd3L18+RLNVMSqb/pUwl7VBtKChBEx5ssoAmzUnB335wvXjw3cws6MZKW/GB2qY1xmJKh3K5YyUj3SliXj4DUjIMbzQo2ZIh8CaBo6rQqF9ReadqoyS3dLzOo5bJq5ryopZd34wwf3U2Xqmn/AAkkPIM2R2E+Ee9EEPDwGeH/GdAOIYQTBxnyDLqOiQTMJhG41SUO+aIv4jscmK9HBo8zLWqSBTUYMWEq1ePPj/jlPjlEdGFXJUYmAu4fAbWcKmOSXo+ZrOC5q6HbMS7eRy9bbOPfB6fp3R3J0JGG6H4t2BAzRGbG6C90nUd+LcUprCw/+pvar8QA7HWsNvr+sgboCGbhAWsmtxE9IJj9hgFTSd8Nd7rf++7YTaHPDuT7zTI94sq87kGa4rtvT+chVpWc5ZnYhedoDNQZlLF9EZMsYoAUARiBtcTP5Cfv3vQD+APz2y1Fbm0ppZjzTUbIYV2N1j0JLGDRDJnFcJY3RnfFKyvhcq/xcyuijbnq1y+8mIBbm9c+VZIsTgvW9tPZkmn8Ge6qw31Fh/3UA/zCAv/oTxJh9+d6okg2eWOwUFAFnOlBY3j4we9fX9y4ZfWTL/Y2/8TfOANjClnUExC6DZuaUk4UWjjymGT3Za60dfJUOMGi9gRnrjFGXIXYQQ2HMxd0rM2icE9amj2WScGfOKuuSQGXJdhLFDJgVrRPjZboRCS3rwpCVLkUU+WLpx5zAZK8z8437Iup95q0Bs9qAVKVlbsdx1JcvX9YuaWzThl3+ixcvagNyt2YUguM4/MWLF/XVq1d9WWusWT2OY+IXJZxcJI3c31KWzKeaqSbDne7RkbHSYPvO1Z7nszGbmsTl1vhyi2CHxjM3xmDNrrQg7UxIxLaYns37wRJG7tS6Wkyqa2PNJA2LE+PkOSzUBKkIEQTK+vSjPTQRYkRzjWrcEsisYuWj+Hv9tmOtZixk0bnLbtvAR73Wqn9vmFVU4oTMUCtgVuG1GVY0IDhMQvoYo0jU7peB3dmYyjJDD8fXQl0jsTa97dVmG6svlYCDGO0mH0OMQsoEYofYo6bXV1kDj1573pmpZ+XAP/fl+j161ox1y/vaK/gofqAD3TubVxdHxHm8WCxLMtyRNeghdWf8lMwD7o3lyTblmG05tONe23L9uN7Pb7/GSk+lvG+3nFBXu97+A3b5Vy77VzlmGUh74lHP8a2nE9YsA1sXdN+O/vMHG7sDdBnSfALwKko1d5wf8EZCzNh3HWV5dgdoIbeMN9J/dAlr1hkpuw4z+BT//SNNuvjlu3Sx/Q2AZujT7VaoziqCtDzHbNrnr5JGBWq4kDLas6zyVynjCsYcM0szt8d3AmIsZzR6X3AD2lKdNQNqe23s2a+ssP+oAr/DgH/zJwCYfZGoWhkRA/Y2stmv4n2N2Tv378ouP5EcZt8L5hsETDzbRgMW9WRZVyZNJIQd0LBrImidXMtViRnkGjMQc5a1YamDk5oyBVUQu3sGW5WW5ZoyF3aNrfd7cHWXKQZpYwdwAG6UTWYaKk1yxm6Jz3b5Y33EkFkHaR1wdSasSReN5oEZsw7E3b2oC6JtFGF+4pw+pI51lTN6yy1zAAcp/tjIsJuBOGGpkEklNWjmiQJgqw64CGBT4KWSRsukjIj0XhVNZgBnyM1AlDFY3UlCfpmJRJEZsg7cMvmiGt9zwLQPKxAn+OYLY7bajOwERzZrl5wgZGd/XAoJh5xNA4nb91suliohezBzNKyQCzeJV6hONhXi7KFyRZcE58VlXkw/+BpyKSPwtj8WDebX2sRRv8ubcYLrvv4mQ/gZr9aJqPLIBNLyMZrAw4CGJ0Ky/MBOt30nl8qllFN+e3z+xlXtzBN7aMu9avepIYB207F6H0jO6Jgr58WNN/surtkvNnEmaxT1H63hCtIoZbXjlB6QL/pJj+wR8w+K/uporBt/aDT2I06MWcbZvtPYGLKb5yHjxVZWrE8b4KyDMa07+5Z3Jb8M4J8Gyr8QAJkX5ABtlTRmtWaZ+UdupW8JQIugrI5BBAuALJcyxvqyWFMGAmMuEsc7lNJgaXZltMGUkVBx7CkGW5axZnSlfRWwf8OBnwbgXwHwzW8dMCtfphGBROLjUkUNMv7wtHr+XQdSnysp4xkwe4RBI7Cj5h/qwmjJOpZA6c4OKXBDdF4MdvmcedYZM/pu4TBmWq4KGFMmbLxm7NnZcgn4sgyY9XUmDotGNWlcb9bnFbLB7wCtyxkr1Z3daq1HB2QNjA3jkMaQlWaRrzlm1mvQ+rxeS8YgrbFyDATv+7Az8UC8E/smj9lJxhhAGc0/nNR/Hj0znGSNmmPGpFOlEiHzhC3LQJqptMrFfvwBKOMuwEyQpNvKpOmfajMD2sgaHvPLJgzY2+TXjeFHTf+mkb4t38yOwwRpnJyGNMJ6gic1tHDyaDfnzjmfn/6pIXhbD5f75Ld8SBynPbxhSggnM3Nn1hwWrOeHa2IHv2IB740GMq0d67wY6+w6w0cB2VH6OBksbv/gPAcrSNPIgKO7Vlrw8W/HkG7PPXDbg+GIzXDpdm5skTn29dN5GcYm87fnYcK8pscaeBDFVvdMo2tYBZZ9eXeL1H3HuuULDYh5Y83K/ebTQVpn0a6YoRNv9rIZyy649sjIXgnHiGX+mfFH5m14LvRbIM1VLRmw97YvF+iq7VQo73Lx36Bb8G6TO55gMYVipmwYfZjIF7M/zi1Lssy+9TlmXwTsj8LLr47SxXJ3iDSL4GwANIM9FZRQa1aSmjI1/yipnJEljVHKON0aHUiDph+pL+OaMk8Cpvf2+C6AzIIByJQ6TlGkhf9Ags44vcJ+b4X9IgC/CcDLbyFjRjVmhXQ/Zmvxdag3MxkmfPtSxq997WthfW8hx+xzZf7RpGdZhlkmY4QabXR5oSxjTc64A2n9dt6ljF1OaE12yOCLm7Y14aCFAoMl4BEJI2ZSG4ekLiyVMipAI9mhkxSRs8ucgFnpbezghuWNmPVl0M/t/eLCSKYfA7Q1KWOlejIA6BLEo4G1W6856w6MXb7YAFp98eJFbXJGa5b41iSQN2Lh7NWrV/dtWuIWx07yZ46MVaz1sfbtGYdAyKbK7IBNK/1ALvE2LGkXq6NOh25c7nHA3l5yYw7i5LXuyopJgdw6VJK3bxkwA7FkylnEsDZP+D89BSuIm+HTIDN9CzHViszzkbApbbQVWnZZHSwYecArpnGhRRt+sgB1cic0i46KdLuA0/lyH4btE8V38WXXUvbtu6XXg1OxFwcy97GmUP9EEssO7ypdpIaOLV3KDrmmykOGGQb/yZlqE7TctectaYyy3txYLjuvuTokgQyCuy19dFVkdmuYhzhdFR5ZSiPwN65YlXY619LRdONQbYs3AnUCdQJ2pSMCAmIDlB3tz5/nzW7724ZdkFA7FiiDWR2GvVyA2RkiOgNjV0YgmxsDTr6SoaRNcJs93XHyE/beK6GFCTewkJm+MpNwAE9+Z8tu4sI4ECCDT2bOINllQDQCsW8lY/bzAfxLqOVX3kFX4xfrbbaPwZjWmtUCK5NTipLFQnJFE6MQO6k3u3JljCL3sn3v29csYPrMHn81+eAcs/v0G26BJVNoNl9BnwHAfl2F/SCA3wXgP/wWMGZfwtBf48E7S/rePy0p43vG7C0wZkkQ9ILLuK4M0YnQmf3pQERYLgZR1pgulQUOEJSAxNF7VGv7zXY6+Dk2mWaLhT2iXb5fGH7wMbEzeSJviwOihSEbbetW9iTDHOtimSNJFwvlmHmttTQXxl5X1k0/vIM0ssuv3YmRHRtbJlmXKZbGktUudezs2atXr0CZaXMf6NdEg9PBIt+wL89i58aMaOlSxurRmRHKktmq/KtJ+VXFGi2V15nRmthcYyttFCmfH+27tHOLlBHR/MOji1yOkizea5c4k9Uy3ynamR+WEGgFWkY5wNnU6cTowoJhMdrP/yJzFnt8HNxMnE8AoAysKh2Gu9xvhow5AQgj7d5gWlqn3pklC515yeZsaKcy4Jvc/pDfuVUChK3GiZnAjrPNwN6RA2Txb8bqGJFWGWNIeqM6t+hYGJm2vmxtoMx7PVhleWKd7PICtWvr0GDESBtdtxyrZ+SaOEw5FiaJrV+IGWX7VGLrxhkM7qm0z+zmyeMQfYHydGfMCu6d1cKSxt757gDtAVnjA2rAK/bsjDnT90/SbYuavBv2scxnlF+5Bp56LM5w3SYlm3FDj//6wtM+WDud5hFLmc/LJPi4qOJLLfEL7sDFkDNlwMaV8YbFmfFbA8x+Gdx+CPX2HfNgdobsdiJlbNd0Y9XMCszWWrNZZcX2GnnA9L7GLANjlmaYecKcqayRWbO6tcXfMWdGe1bps7VfSfzPBZZFeSNGLV5b5vsP4Bc58GsB/LlPnzHrF5ixTXH2np6GkCHvmWP2uTL/eJeMPrLlvvu7v3snW1ymkXEHAxvOIBufWaLI4C8x4dBtmsodhTFTtswTyaPvgBczcB1IdPOPRJaodWSeMGqWgMoBsBJp4+79aCcZqRixZgPEkfNkB3BOWWXdJMQbGKudzaIcM3ZjRA+FJmljPY6jW+ZbA3ZduggGZn2e1JjlakB1RLsgk+rqsB4+e42GhZWkjUMdWFdn+dG/rgi1ZyUUHCG3zXeTnqSLtDFrtDJk5NDY883Gvqkzo0gcF3zDiJR73TWxaV/dCaJa0wO/xUzYrALzU4A2YVpt3z6EY6sngGyBx9RhH7+p0PZl91xkbL4GHXcq10OVVI0YnK3UQ/ZV+6wlUUQNh6gPn8lwg6zTejUtD3Snh75Y7IcEBE9j1aJTaN+GR8rYZB/FIWcp0wIoSNvuIFO/thi7MKMcWfDAhvkaHLBMMWGDez5djYMMcQUurLfnVLD5nTHrPfthANJvCk3WeLsB9qqBs3oOQB4Y+S0nmMZOoBRLGffAjAumdhpCPCAC3BTc2sX7CwyokWDlFkuinr7QWu8TOwVJIwg7YUNmekx6ckXCUFDWLfE9AWStoc7SRQmkhrozfuo5Zr8csB9ELV+NVvhllS1mAM0JpJWS1JqVxPRjdWUszfKpL7UCNQZjbJe/ZphZkCxG1mxXY1aDVUk0/1CmbEoYI1NWRh2zBclivbCbqWOAagC176rAHwfw6wD82U+fMeMR24I4+pQFSiPhkvGeMXvX/vWOzkV9WWaMEcAUMVbOwIa+E1wYQbVftD4eyxwsmTBrLFfMpIuBQRNghqQ2jA1ElD0zAYE7S3wos9bBFM7NP7JwabCNf/tcWwYbyxbZZn+AJQZjZPzR7fAHG0fgzGqtpTFkfhxH6c6LzWVxLNvAm3cgRyCw0DEIxvHsqhi6mZkujjptnjnPi/v8YvCB+Vn7YZ7Vusm40WWgdF9Sd8IvEqqdNJx9Q1Xrzfq+nUgaPcmM5HokF92O57c0D5lSCKALQ7Sn0i8Ek5D4WTPQ6pjawZotoMsFDLnILTngmqqj3FNj9azf3dc0pW4TlbuttWqGjTNncijXTl7Sqh6IjOw7FlwWzx5FtjuVfiEvyxEuVqONuKO+43RG3VxdHv3Pfshy3R72cedh29HSktiwuIbleGUndqklLdLL73+dPTukU/4Ko6rrmUO59uD7Mw+NTMp479CybYadwL7dVgoe4/fk+NoFq8ZRYPTXD2dhVeDTHQPvuD4wI4bIkvHt0abadX+KAnvXFuz92LFBouIKKxMElAW27FOXMn4fqv0Aavnqfbu3SDvaBqCF2rOVRSslZpuZSBhLYJHKhimbtvkqAiwhfPrK+AOSV4YkVBqBHavEktVQXzYN/CfEZKHmDQg2/9r2/TQA8g7fVWF/zD9FcPYEfPt9OMNt78ZYENmzba7Op5JjFtb3FnLMPlc1Zg8AM5U1MkCafdoVZLmwYEGGmAAuXb9mnGVBzxwY3T8fOyljAtI4HJpr1VIjj0eBWa+Vo3WXTY1ZJSCm0kUnJirMo8wyY4kizSttvU6ArNveFwqdPjoQ4xyzzqQ1IMbyRbScM6P5fhwH75e7Ow4e7BZMsozE7ySM5Mo45IvMqNlU/h2IIdMV2IvnEkdGNj5c9EXhaq7J6LF4/Af4QpJFa6nYs8WTMdPGpQ0m0BZSopNstaBciDszK51MYn8ZaNXAlu2dGGOMNJ+BOtwZIWtZDUBUtuj0HZbNHdXJMKLnlBntbqznAurM88Ls3HNm2TwKkqHVD+cw+2BGywjQ9XqsVmvWt1M5FU4Apq3Yesonc+bIuqSSc9eoHS6awJF+ZkZ1bdZvoON6scG+GV0JEJUMBL6T9NV8MQlh634+/gr6zFimGQOjQ4xbYx/J+3/uU+ubGNUD8vfmOEOSWm19/wt10p2kjE46OY9siVlee3YiY7QL0AVcG39kf19oIKYGA32Fb1dej1mCmt4UbQVkLp8Tk5RCqkFrbvSlROKJiZzb7dyJsQggMyRu9n5uEh7AVzHamDowItJ8ULasrNM+zRwzw/fB7Yfg5aur0UfGlN2aRvk2QdgAbrEGzUJNGQO03AxkDZi2jStjXluWWeYX0k+UDTizhTFzMftnMOZDtjgN/jGSytjS47y2DOnAhqfvOzjzTwWc3Rmz8esRuaI9OBQ0RrjeM2afUcZs9zkz9RiW92bWgY1LAHVg4RgkMeumjJ18N4A9coZktozr3LCztQ9Mj9SJyfJ2YnNvCvTUBl9YMGbNwmuTQIKki/dhjenKCMkuqxIqPcCUu3fZYZc8VmLAynEc9dWrVyNgun3m2rUOvlQqWZi9U2DmdO+qiBnMTCCFX1zPYSa1X83t/wZjlqn9mHCC1Jvdr/moFAzgUO9nVQEaXaYMyHYuJQw8erB0R559R2uNNWUHRNroecHcsBasdBAqjeL6jjZYbDUiG8agzANzdSA27/6dSpzY3F8jWSM2eWZRgBa3agtvdDf/6IYUk5qtA9SMvRmAy+J6SDbX66dqcjzudVEe3RUrj0+yVLAGRYkLNcsW/TZGHCzEaBt9p0o1wNicTUuUmdhTm9kJxA9/XjKdMRwBCAHDt+NcWzusW8hP18lZVxbdO9XZY8DPagScbZZIJlQLj+E5yTODPNEVTLr8cI1OB11PNSmzEObYKlCt1ZjdfGrnRpbZMfs7XeLG1TFWALzC4hJk66DOmZ3Gzkk+s4TXZdlp/iVuMDzBZygXcguRnc7whPLCBuXsdgiTGXtqXchbmQwZM2bWdqS/Pt1W1/ri58aPWmu2NCdjzgozZEYAnFEeyxoTdix1Y/zUGLPvQ7UfhHX5YgdbxJL5jUw+qOasTw/AzRZmrRuBIMAcBmjqyFgaoCpDH1E2wGxKGVdAxmzZapevDozqxohmkd/ZsGidP+GmB4BmsGb3sa8tA8kc75WmkS1DsAQxHv78rgr8sfopMGfTlbE7z6gkIou2Zx2BsYTk81dj9q7/E7C0AKYMiCUgzZltGv0eMgvh4OhkXQtrJo6Kah7iiRQx+x5b5ENqwaCgLTP7SGrAsnkM2kabEkniaHuvP2MWLKkrgxiNjJwxZtY0t6wzbWTyMRiv/plkjE5sGJrFfm3vQcuGzDNuW68zC3JMlROKQVyQGgkoqr4Y0wWWzVwUfjV29xi7VEjotOdjRruxpPWziR5LF8gBSEj6DVZ0VcCWx1oxtuobAMwTidlO47bKLG2BQ5llicteeHKqfBjkO5BkloFsKKpY4HMnmlk7xcQWmD6HUzDxVGk4MYo2zB5ATFZ77YYYZiELrSujLfBbGHpcc45aMDIT8XHRutk9nNrLffniwfLTauv/4B7uDHIorIFC64YlfMndGbgByti63vxuHkKRAB3kWO3xCJ2JsnlsGzBlS3t4Z+2auYhHB0/v7h3gEGm55oh98xZNMErSjMjcfu+1eU0PQNbG2azJQbtT5Ki+a+fTKKnF1dwmuDJS9EGHt60mFV6pUw5hy56iSyOk7mjYpb+axiAP1pjthIV+AdqUk2Hb/C8M7my1QZgdTFwIKHc1ZnY+bi0lVzeLoNFsVl2VhNhhzFjKdLAfOKlM8NWJLRCZmam5Lv0l00I+ofogLFqQMUrhHBuuvH27/O8D7Afh9h0DTJ0xZTs2LQCxWwRobjC/oVgEYlUAmQn/dAdKE6D5hnfqdWUrILPBgmXW+Vmo9GTO6sgem0yYD9MPriOblvl17BtCDMB9zkEXszUwBgKaO+7b19fvKrAfqnfm7P/+1oBZtW9HsSLi3QehTRyqRLXPH2P2Lhl9ZMv9xb/4F5/Flp1IHKHMEz+DEnZMpYxBP6HOi7Q+zSDLctF6O2/ufog8EfJ5YbuQ1Jdlhh/0uTCoam0cAKmtTy3xKwGZ0izzS2cxOw3V68jMrPTarnt/pzrLFRPjjw6qnOrUQMzXqCnrZh/dOr/P786MfX5rp27Tj+OoLJ909+GKxwaGjD3S2jJizIbDneSYOWWbDcYMksuMxB7fVyPDMd0TwmzXB2GdZSrFyyzzSYsZ6TAs5h8HMWGVZIzKnlVjxw0JoVZdprJjlgKtaMfhW4gJSirrHb06HpRz3ywIHaNDoxGbOC3164ZdI6Fkr1FlVlZC8qoC7aTAcLlvsbWJi+qt9m1RxhembJK3443BG3w+OQpao489eOXbErA83SFF7wj9Lr0NodVGgxkEkInZ0nFVU8uOvqytAyNZiDSLNb0hWNPvyu8dcn64jWNWB7BOuW3j/ORR1RlrOZhNNzmOhBQGLUPMWTcA6cjSpGDKlH16dR64/ECXKTM6xIkwkeWMji8AeKJKnCjuqoHlMOlkZo1dcxCvhrNDVrTUkxVVgpJBoBHSvN2ip+TNiMwELiwZkm6qyziaZ18gq/wMjC0gTICZgrO3C8x+8d19MWHKUFq5ETNkDNBue4CWGoUYzKKUsQSL/Chn3LsznoVNv76Uka3y7+/LaGWlbDJ+P1taydqk4iZ1ZTUMBEYHxv7+JnVmwFJjRq9AhX23A3/cgV8F4IffCjD7Jt0E9AbLkvZ4Q1x/09Qhep9j9o5JGZ9RX3YmaYSAr3ZvM3ZrXCzkZT4o18zVHbFPVFfGJO8MmfmHgLZl/SKD1PeB7ZL1q5yRpYoj6y1hz1TWyFJGD4HNbXn6rIwZqL7sIDMQZxv8O8aa71mSSDLHLm08GHCR6Ycfx1F7fRsde/YqXNgP86STJvVlSiSlMkYnYGb3oOmDlH8MwpyVgIhlWV4T7KXSRksYs9SNwR8DZ2Ck2Vq92OX7qoRElpK9YfTC8HHdjnxbMi223FKj+1lbBhxN3tghWEkCpjOw5Sn4WnFxlJJ4yFEMJI2JAfCGefBNnzJlcpEg+EdH83zdXjQcyeV1cX3+rGFCG2HL9fERR78Yjcx+IJvj4JYAxt3xT2u+ztq4cVQ8Qzr+jHHXchPP9U7T1OnYd+tmIJVs9GtEGYZmDLI/xlcc1VkG85xexC7fGjCb9WU+Rvk5OHiah9fW0azUeT5nzk7MPzBrx77QJIu3IkYfJGPcGhu2HerALHXb94mhiyX4KjmN2591QMEkfS0ZAEMOxhnoaJ3Zx2+jF25fws1+P6x8FeUm4EvqxnrewCJlPGHQmEVrGWd3+/wi9vkTlJXEobFIzVkGyN5UyqhW+XZqk1+pZVW4Ph9g0xMp4978I0oXLcnJ2AC076zAv+p4+hWO24s3B2bed0QeAA/eIPv1XKc72/sas3dTyujPYMgsW47AE8sZU2ljN7/oQEzBizBtRt/3JMfM1bCDvy82+OOWnDBfDPjAWWYEpNQeH4lF/gCC9LnUWg/6TnH3g5YDZ5V1ZrCDrc6S9eWIFesujFzz1d9Xmu/EiB1ijV/6+poT4wB5nQ3roG1XB9eDqxsTWJiVclX+CW7xiqD/P4sEcyagQHVlBLaCmM4jsRQ6jdKZt6xPu0NuS6B0oFjmipbluNfuK2XX2TAFWy6o1m3Ffqe3r9X1ECEtzJM+7ypnrCHrTO30Z8B0lVQ0u2QX4+vOINNrjUJNI3d4Jykfh+ch+lN4iD7wluM191F9rSoFVEc3i/t5KeM0TUOKYY5hCEycibR38SUcxh09o2s+3J1s8I22yetnrN1NP8zFEbJLEX1Wjblkg/E2gtGIMGtT1NiNNOaIbZdOYgzAYRqf9H3vcSu+AWgNwBml143Q654DR+fP6PcVTDd72zrQNx/rjTo5ljKyXk6zC5UxKfL+1eVQtJ3KG2Pnr1DX8EaSLRZi3VmqJ+ry3kTGuNb7eJNt9arQIwiOH/D/bw3uUsr+N+rCmC2j32xhnEM5yLir6UaUmJqcBJt834Cykg9alMzUaaknwww8C5iU6L1xAVtiAnKLiO/Ne5PfCccfhpevTXt7AlevI2XswdNFTEHMwnfu9vm5O2O00FcgVjaujDspo22t8lXKqO/vy9dtuDSHSM/6MmstRBtKnHx0HiC9M/uAyBtBdyB+wo4n4S85UP4dwH4LgA/eCJh97I4bae+1o5T9bsczkX4I3Qn6U2Ck3jYwq+8ZMz97rwYd7MpoFJ68ADuRObJLo4v5hy7rmlMmtWnKYHkiQXRpn+3YtBMHxstpCsxEuljIIKOyW2PPIwNZ4gNgsHV0wEXLsxGHqxNjB3CUPeYiRez1ZR2MdaYs1J61dXWpY5AxAuiAz/m81AwX1IRMYqDU8MzoSKqJX2L+4XteKvNH3Jra190zdBkk3i3pG+kPo8/c13AwZgexZgc2FpOWMy0MNqqfSs4zv5Mzri8Cs2jr4UGwGKWM7MQYhY+etkA5O2trCUd/uVdlR30tZuRDZh4ZKV/cIOdJbyMpMe/M48YrS+cMwYgCvsppx5qy8+hxH2yK8LAYjLRtMvEU6jiXZWO7Q53hGOOqW3KKoJGcralPjEHcs0HBxHe0mfItzwZvJLKBLf85W27HeHpoGzORXEd4o+Ill55+naDM1AhEa87Ype9F6E6cO8rPTqAPY3HuzkK6uRgyLJb8PbWpTlAmethx/tJ8f1C6UwdqB1a7IG24GfDkzRWyM2UdkIHYMRNikerKBjgr06PidiM1KcgsUVkyj0ANgqX0d2UZc6CgbDgv8jLCILKkNQPp/e/VG3TO7vVuvwe1/KoUdAXw1aWMtwekjBRAvQA3C+u92+eb5JvZImX0E/v8KGFUBu3RgGmtL8NJiLQTCGMDEA+DGJbUlk1JIys19tJFS5iyCMwWgPZrK+yfd5R/+o2A2SdCB4cHnNxE2S3fRP1h9qkxZu860PvJBswWkCbMVVZXNuzjsa8NCyIfMsdwAXDdZt5ovWemHmypr/b6ocZM6ssCkNuBtc74neSTOdeSiUNjYMX6MZrRZMMEhGu4+ufOXFVxZhwyR5Y3aj0Y1ZiBcstATBtLJhcXRq6Do2M0ATHfK3ZoaFPExFJGU0zDwKxI7rIl0V9IjAxp/mQXNoST7YbxLQlc29VGaRZAYj1ZaYSVacBqMQeAqYB6gizrKghkdi+PFp71YhvCkpiyKGms9ODE4NUmuqynNWSRWVPuzqjNtdZA/JCKWaRypknG4ZyxfUU396gbJq6S//zMU9vD3cFAeQR8JrI/9xVTQ1g/Y4rPGkx1ogGBod/t2w3GIcngwrT3V5MdclMgMw4gxogZeyYGa36bph6urAuGy6OHaAcPB9xMQJe4UPbrwU96AZZtg82HjBhU3rkQNuwxaLgQY1Yo48w4LP6YerzRmf8EGl4+u/eF0p1KMFSwYOJdiCGbLBkGILMGygzePjmJHyNrNmWOlRiA2wBrXaI8Qdqho9VtR25Aq2i7uy7e2iV505wyBWSIrvOBaCSsUPA8h8qrurNF3JAuaHmN2RIiXc4Z07cBzAr+YVj5xy+ZMduYeyxM2SZouu5qzrgaK0oaLbXQz+zzo0tjbddxBGQmUsZoANIDpvuV7ImUMYopK0Vf1xAwnRl+cB2ZXkUVbPbBYC2CMGHGzoAZHPidjvJXAPs334AxW40/PQ5SpSMTi3bdxwPgrQKfH/7hHw7rews5Zm9VyvguGX1kyz0IzE5rzbiejGtAtPaL82241iwBZmDZowAvT2SY2AReg4BbAHH6PZmWyRXBoK0Dw+6CyLI+YcwYlNVdsPTOPp9cFbucceSa9XPH2WVSF9ZryI7u5kiyxA7ImIUbksgeLq1mH622rLsx+ob+mIyZP04qjcFsrTsDgTSWNR4zx4x8FoITY7WVLBgyxooQ+3WpABReZfqO72R5NWovDdP/n3fMXTSZBMCEaVhQZXYGFlOM1egiAjQkIsasKsxG6CfXoMWH00GiRn4sOdhS/Ty7zJa2jLXUKZI0I7aF1IbWr8Aul+NM2EbF1m4H3002nDPG5sqMHB8NbSC5d/6DVNIo84wz0ppaqLFE04aepHycLGfzOqtO5vgeawKHDf6QPUocgE9Wa/x/ANDmXFnvYGkQfc3l0KmbUo2gEYMlbx0jM5KHdit+J8/GmTHgVc4tOzZXTGt9vpf3Npn0qAPmpmNobVRiSB1t5tAJPg965lHU5FPOCDIAMXk/nBoR0Ucz1L6vt2/oBdhk28d4/S0wY2id312NSxF3uwkBmDVj641pAALqwmLIyWxMr8Rk1NYyh+PVAGho7xtLBuALzJQ5SRfbMe7vGYyF2jJIBBgZgXRXxoK1XuwUoFnCoqnENwNigR1zLIYfCyMqYMw2QQfHa9MNPwcof2AwYrVxorsas/CqeWVqk3+7MP/gjLMbSjHc5BryNOMsC5qOgdMzYHoFZFPKmBuA2Ka2rG7qywrJGQs5M97GkNNjtWUQWWb2+aS2LKgN2+/vCcC/UWF/DrC//NrArDB1raMOu06NjNK5fTrmH++ljG/2T9gjKHOlgIdlgvKewZQlcsbSC8oyKSNiNhmE8eIaNbsAYqe5ZGw8koRUd/CExmb1mrDxnow/TC3iVcrIDo3kzsgZZIFVo7yy4fRIrJkRUwVh0IbrYmfD2vub1JkNi/xuf+/u3QykunvpwKvXl7m7dTaNgGJvF+9XqPOrGeNkp2TJUPyZ1pPVSTaxd0Ylw0IgD5NmcqNi7w7nZ3y8n1B97ok4sFIHkqaF5GzekbrKFY8MqHmkBSHzzXN6RmgFIyGaXShNJ1GpXopTxniQWNE2zJjTY9jTqrWzmjOVMrqcu1ij5Doi6Ht4auJcGAFtYnZ0RN7RR51YDZRIGwJq7owWJHguF2Go6QuFUSI3ZK1WjTI+iZUMvVBX6R9tx1stWm2gn9PlJvm10t0ql2SsVRdp4SzwG1CeXSv5xqDuDC1PzioWJnUd83EYZ7f5IoIMDJoHcrCQTBGrrLFrrPkHtnxOXPpGd/PlkBRiVIkxxOJ6FjUdiEKpDsRuoZqMgVmBGoAgGHyUYPah8rHb+D1be3//e9X+Cu5ui18w2ja9Z6zDqk/NaWYPDRN3k86YcTSA2bULo1E/ld/jpKsaLfE9MmbBjTwJ6g21Z1i5vZevLWH8g/fRJgZmze3KbAmGXqzvF83ojm2TerNRdxbZtLsRCDNlhZiwWGv2OkHTZfte2TJsAdmEi9EinxkzZsvq8rsD8gDpXf3Y5Lszxszp11yESbsDUfu3HPYLXgcS3YGZieEH6XkXiYbUlvH0T4Mx+wys7zMlZXxdtgyzvmsAHQV0O9OOjDGTZYO9fQM7rZ/mXQLYwVRNZIqFlu1tpVXP2q8OyEhqyOtY7PEZzG2kjKA/ljJ2R0Pr78kuP2PIhpwQsw6NGTOo1LCZdZSktmxIGfu2GdC15fk7at+fbTdwNpVGJz0vKVqwjteuY52gjKWMLs6MrPALJVhOTJrPsquxKVuNDU0Lwx1rwLRTz8IvdJlOtSmDYaNaFa/TPr8Wki0i9/1XKeMZlmF9WUDHHKXsK1hdxZdJbhkEnM05Rxt7zzwdJwtTAyCMDF5G/UkNGpl/TCljzfG0YSlaCtlgNRI3Z8ypoTuJ+WqsCHaFNJxlPoXtuzxLjZi3NgZlFmupgjuyYUowSY5oBMaWyzrkCbIziq/7u8gNsUbkZcdET59J2OByNJhFW7d3L4Mwwqsuwwx0zTSjxBD3B/5Q6fduqNa6UKydMzb/YNmiNUdGqTczz63Uu5NF8FPsY/aQ6V3aqIAsCh5NOntaY7ZjyyCgDNJxZvfGSiYNPkDaNPgwb1vxaGdvmKYdHAemNWYQR0aTvOYuZexZaAGzubhTEpum3epsbLAst0aPoMuyWChqvOtO9HNMIIdbfLxWD/R/Ays/JzBdnSXrdWF2S+SKdsKiscTxJjlmVG9WS9y3tu1yK8JTTV9QJ+EgAhN7DcoqON8sgjG1y58yRrXNn1duXRiz/t7IkgRBKtxh2/GQC2POju0kjHyf4ifb7f75awfsXwXsdzwbmH0ThiJBqiNjUhQzKuvXrsunBMze15i9fWC2BWM7uSLb3ieMWpAzkhNjBzdVzD8W+WJiZ8/zWDK5kzsOF0QGbZ3lEzYtZKVlmWe0XSeWjOvJXGrMVMrYmTAGdiFwGkBnuPp2CtWYBTdHDpLmeW3acRxHB3f8vrNpB7FpnT2zkEs2HTG7PFTBbH9/399CSj3VQCNSWCaSxS5THPglsc3vVvdjErNndsdAGgUW8EvC6FsW/bWANSMc4OsOBE1mgqycHU7ad2uNQWzDMt+k5iwLntbhYAsyvvygr7dQlyoeZiXqA6+UNDa6czVklEURpKeJaRB5IzNZDdZVj3JD6njP+JZWvF0jm3n/ChdFhcKkCWycQpwHeBK/RpOY7krHXh7Hg7FaUBmBmwG2ars0DFlmgxlImucLeLoDqulAqFflLGwnQBRq5xqzZdawlNb0ESLsPyxyHOmApx8/azLFXFQzeduwXwRGB5uHiJ6Nr5IR1G0jkmDWCBo936oAd7qGhg2gsmYeA7QgI06abzbon2OROCqsMuokqieckfyLeTVmyWZg7qwzY6bMQn3ZaqF/35NCvzY2F59HrAxhcutQ9uDoMgFYYLQoDoyZsSy7jDEAI8xyW2vLuPxvMHEZ0eUrybUEUCOh1xYgJp+BGD7dz3nJwg3ajrx6dm/21wPlH93WkmXmHyxL9JMasyu3xtNQamsujWdSxpLa5tfBKmmNmV3Y5fvCmlXhfSNzZiEC2wJ7ZkllWTT6yNmzrMZsBWH7GjOMp2JJnm4O/PYK++OA/YnnMWbVUfiqpzqPHQAzz9U0n4b5x9e+9rWwvreQY/Z5tcs/Y8NYqheADaZDo1HHHAS6mE1jkFNpfQsoZGljUg+mEkjf1Ix1pmwBXyQ3VAmkujIyg+aZAyO9hu+KMYhtsstYijncEPv7LiHEdGg0CqQecsW+/pZd1s07rNvhdzDXZYsdFLbvdsljCKbuckUAXdbY96OI/BIiMbUFN5zY/3GpVlZfpvVnHcvUMsEYG3xwuRYzdp453WPDlPhCl+RfBk4yzfQ9OZpUBmvsNEcADWIKAnExYYAWdg6XkkBsxGkqNlRw1pdaQVmHWB5kjPy+LhHWNZhzZy4xaiBRvSYaVJU2enoifcnD8vQcuo44eiKek3DjYFm/kdudWAYmysuzfaDvaCBz0rZchBiPxSIT9KTGb2nkqhGNx9hPJcL5s8bDJRyNTDw7IouT5f5awHKcZqeliOMiYg1cv0F190Yj63xrAixDdD8bpiBcpW8JU5aHPJcgYHSCcZp5NlkzD66MloIxEIPBHc8oLcvsFJxG/CcYy3LXmHgKSkFbSSj21RiMGbs6elQaopzIGHcybjtRdy8qNjX6gHzenMOOOp2A2/MYsy+i2P/2EpSlEsasxux2XmO2rUHLAJrBSmnB01mt2d6VcQI1UI2ZLYBsrTGL4dImsek1aYEtjow2hiluD9aV5QzZKinefeKho/4buwlQk9/b/85hPwt3p6AHgVkboeBngO14KicpI6Z6oP9gPo81Zu+S0Ue23J/+03/6UWCmYGwBS8jrzxT4ZIAqnSeSxi5dTCWQ7HLY69KI9SosWSRZ48HL0ntn2WGXNDZwxK/eJYcsVWwgrbAlfs8mwwypHutv6wjL+r34q0sbvW2vEgs2WCqpKxs5Zl2qSBJEZwasuzCSI6PLeoZlfjf70PUIGB946Nj1hjbyO08yzTwzN6xTBVilvmyR4NlqcOh+bhS55eSDZm2HND2FMSFA2ZMMgFpjQjZrMQfyNAmXtqnTVAbNH9mhxew83Zto/MhQatac1QDU4r5xXZnL59hxzuhJXw5/CJhOTxBwki4MSd5als9IrXWo/USieLrt69mnmhB/QAqYyTkRZZM+cszEuRFXhy05zhwQ99CuMtN4cRaW3bPckfHRg2u7cOxe1OSJXs6TmjNiykPOWX/fXYWMWL6QZEz7uXb+ovsiQp1MfI+w3JQyzqozl5qnKGcsAsoiA1ADa25L3lTHr8OBEYkLoyVM2c5Hg8ifW4ns241Ph+nRlAg66nOqIQgyIcHiwuirfLEIBAzSR/GPHEHPz3RlNPungPLTJ0DiVO4LV8bLP7tm0nzj2NgBms9ss7XWTAHaZGPPrPPP7fJjuPQqZawjx2wNlTayx3eUxjXXbU2Zui4qQ8YGJjvGLDJjCNMjGLX4+WdU2G932P/sYWD2oc+Ae76/MCum7ozO7H539J0Pgfc1Zu++lDGArUS+GEARYt1YkAGyXHGMgJqxkYe5+9iGmQW7fJYuJkYhyoxp+9gUxGV5ZyCWMGepM+NFbtm23kwAHIT1UtYMtdYOGrsTIog1q219IGki2+uPdZBU0dhAhECYcYbZq1evDqo700y1LmEMwKzLQTtYBZlhXXaZfNaVqbP8cJffSBmrzbIsxipVLPGdw4XpgeykdktNjbJGm9IDF24mC6oU8w9rNWbVYkHcAGIK1DCTtD2OeK1MnyUaUk+xcsZX5ZlwTnvkYS9njRlzaLz/kG/sECTXqU3rENsAs7Okg8ey6X4C/lnMHPtWbvfTsLd6/UN6fiCes94UOz66tsGYIUoXs5ozdmm0SuYgVBQ3Ppt0KyyMsBuxCWs2EgJYU67mRkzZbO7qDKjW+Wpo4MGx0Sh6l7OmfHSaB1NHwdEDRDHG6dMyZ/kSMQ3HgZVWBnXLgFck1sLv/5RBczLJPGPOMqZsC8zESlJbaM+qMfteFPsXT6WLS7A0uTQy2NqGT99Ocs2k5sw5fHqakJjF4GmuLXO5ltQ23xcLfVxIGdmZ0UOWWTfyiAYfXFN233JnzJ7akylGS9/ryu7CYzvNKcu8FtXoozNjJqwYxqCJLT0Fig74fQ77IwD+6kPA7JMx8vOAKkZrhP0zCaQ+V8DsESnjzpa+AakF+PB3yCI/GHnUWs3MmJGqUsu1fK/XWmXtfMACf2H3eFt93bp9/f7ZtN0fgb4A7joo1mU6K0YgDQLMBpAkMFYI0IGmOdnrO8kZ3d0P2u8h3ezgj7PcuqzRfVsxZnxd1Fvs7avCzpUVo0EeYwbNV8Bm7BrPBiCJrJGXy8qzTLGN0keL0Z0iN13e94DNiBL0Siwa7VDdNJytvQOaOrNhdDx24z6NlQvrj5ViSGzzVwhniSujukLueEwPDJ9K7HzU4niSRefpIZmSj3DU0kPoUofGIQOWXCjxa6ZLS5RBJaN8HsZfmiKDCbrkGAkRHM6B0GEHNiMQdyv/eCmLQ70IckzOkw+XR54WoYYeYY/1P9KBdjrP8AnQZwTC/IJjGgiB690t7n/aQQ+0Dw8hszkEs2I0vt/NQULtIjMvehwyawHQ1cBAzRczEK5UY5ByA0Z31xcgaKGWbAVnwGrYMA9DJjmz5P3CmiECtYB5Co0fiZlhB3nFyXYfdHq0rix7GLEnS2ZKl9WaQZk0QpvASvmFATDJOPPyqCtjgdnvxVMpC8VYGihqcsJYW0bujB1g+W1KGM9qyYzcF5klKwLIRmi1Ua3ZjUBWWYCY5pqdSRlLEjTN9WVXUsbSdBhlkTRWiZmY74/kd8AMtsuv0lPmLMK0GAxjgQXEqK3TZyZ4sOPJYb/HYf/9R4bOnj7yXBEwi3OTPLNdv+XTyTELW3kLOWbvGbMEmO3mJ4HOZ+DIlHFLllfHRk+YMFeTEg6e5to02fayTWHEQjA1m4WQg6JLPIARqHLNMaPjawLQvJtwkJlGJRBkxKwNySDb4Lf13xpg4qBqELjqNWfDiXFjrc8ujRX3ujKWNA62TM6NkyRzPM+r571/l3oyJ8zCpoXBhVH9M7opCNWYLVbvtgmWpuk8kprWzKbsgscnvwuwCEFrNTozeuLWWBMnE2bNAl2VJWhX2pErDMaxyty9942cMdp2VGiGWbTRP4Z4pblNtqVq8HaLVWx+4QOp0K/We0bUHQA0cBMwK+V9OSKqYFcIisOeN8PZe/PWezewEYWPbTOa8Jbd1cGQwUZ5oKlcNMj9nXwyJy9hhM0VD3TAN/LQGCo5tdsZ+HjLA/ORN2YM6zpS8XoPqJ4yh5Etxs/8iGYjMBsGHAFNzu2uHGePWWitaseW7aY5Fa3XkRn/duV36E2uOTNZJowP2InRZ+8EF84xAwVLYyYoG/3QTAZeGMiNwRSuklv5sNX9Lb6PEkcPNWWFKspKYp4PsUpYJY0lgLNYA2NDfAzKn1okhJRdZhuQBjUBKXGaEn2F68wyuWIDdmwGol3OwiIH26ghQq0gQbwFRWZsmQAxCCX4uCvjb8bNfnNqgV+TAOnUIj/Rje5qzcpJrlndWOtr8LSVwZSt4dN5rtnrShmruDDaYj8yKyEL2ZFM5mzCNLbInz7BNpgu/n8NSWTxXUW0xC9JkDR/LsuzdWXPDPjvOuzfBvB/vAZmYfMXA7GnRRtjhOZdZ7g+V+YfjwCzjXxRp9kGREFYrp4J5grGkjo129WwEbPVpZOZo2IhX/xeo8X1XAflpDHI4GXqxoUxzG/TeZ84fLpSzVkw/6DtGlnhd3fEe73WcYAll72OrIMhYs3AjBq9Z2ki15g517RxXRmxec6W+X0Zmeczos5Ht3fnheEJRdOxxsKWqSKQpYxYc5m1giutmaJO5lLyZids2SnHhFT4N3vY1HBGnpbkmLFtfsgvq1JTRu8rMkrl5Ca3VuucWeQrWKsEqRi03UUhdYx3GlWjVapKw4Xpx/5+xTlmBMP4+rIYCxD4Gnfqj/vKBrHjTBWxyMbwYswzJ9HXZGItYdWc6FufFoLhaARHRxfzLQpzjqt3YeNm22LzNWesL1wjHOr3szoBUwx3xhp9MMCnb56qWQIZsWcWp8/XGkD5BNzZb7a2WjqIt6dF05TuIHm7zQKmTtN0IFYIqA0pI8Q2n8FZ7/JUqVvCIl7cAbCVIbNFxmckX4x2+RHtrJb5FgCayzx+tYUNIGBGBGMh9iuAMTX4wGqPb2XRaM6870S+uEAhjxlnBTEjOlwXRW+L1Dil9VyljSWXMnZmyVRg+RAw+wLMftelhDGrOwugjI0/bteOjj27zAm4ZSDNiD3DrdWaRYfGFaBxRSSCpNG2UkYTMIZQX7aGSM/astWV8dzwQ4dEtMYTdN0XrBb4vgxk2KLwEMFQAG5n4MyB3+2wH8LFlfP0kY4k2wWMsc3A2ByX/VyZf7xLRh/ZcjspowIsrGYezFhlhh2egDdPMsY6AAs+01lYdRYeLbLDDBwuUkLMrDUOvWZJpYsDpEvtmYujoisr1kFZPzbiwtilipXkiK52+Y01q8y6UZ1YB2YH56KxsyJb5tN6BlAjeSO3O4BKtd/vwFVkjWkM8/ZekZAivV+65J8JSDMinjrRFOCQxb6zAg3D6jRvyA3z9gVKu4U9VtiF96LfZPTZAVeaSebiyOjJ/ZWDsB4BlWvHdz1FLg8PtenwDbxaPR1d8s4M0fTDwrwod9TjXr3eWZlN2HCoeW5Tj0UyWe4Pc3EYrkue1n1lhmnD3lUiJtli7sTMMDvlbDXiSx2UkX6P78PWnsyjbGljmLECoxkdUJnicpbTrec++mL0Xm2NZQluDXSr/f7swrOkhpTn59clbTyWQGSmLHysHOxYONg0MEHqIc/MNU/NOhhkS3RqYCGKn6k6Q2TLOhCD0pxVXhFkUxBft8ilMXvGXomWApUyukMlBWAIAA0PvG5H9gMQ6kaWGWOGJFjaLSnnKudSxhvl6WrQNM6MPdohKSrNXTSPiRbSLNEUI2fNQsEcVcddm3/8JtzKzwluKaUbcdgqYbQdSCPGrFyYfFjCwu2MQbJaszavmOaaxaDpaf5RAsh5rpTRwJll0/SjpBLGKWW8EVumYRSHCGB9Mf+414vVhQXLLfHFzGP5HH47IaOQ6+oMBfj5B+zXX7FmTx/Js/8SVV0zaO9rzD4DjNkzmbMAxDbr6wDsEACm29AaM2XPPAmfVpOQbrRxKCAjeeKuboyBl8oXNZtMl2PpIkiOmMkcPas3Y2DG4JXNSQhYoTk3cnB0ZbfGmQtde61YOY6DpYyB+eqySmLGKkMAcX7Umt0pZTy7B5CVopN0sdYN5UXLuZh/HNjnap3wWOkNMx1gMpz4/gNL8ZtaTJoETjubgHTGzCizDFHCuEgZfbWchK/azQsCynJYKQDLyHFxfl7jow1Hex+NO2pzaVwdGnnnfAMUPTk7flTUZCdm2LSsxVhu2ImnYygX95nQCiosoLgKJAaFRvlnLvUHPsHf1BlS9rIJWGhHa2R0LQKUthqVoq7Ih/NFXd27sOaog8Fj4sRovV3O0h4aP27yR664cELMsT1AtIP3ZT/nybcBtCLAbWlEradfnc+Bx4EitxUgO+vimCUTxkxdG4N0ka3zGagpUihBFhWZR0u6kBB3RoT6M7XLB3k0ukA3Bmseas8UrPlGTGyBMQvyRWXJkmlBzigmhhAjkHIT7xWbAHCpOWPmDLJ9KFCnAQhLWLOl1kyRY8KWITEG8bZjr057zDcU/DPRwrIAh9paZiDsxDa/s2yhxuy2D55mhm1nDOIlAjQrsFsZHFhJgqbrImlcg6YfkTJON8YO1NYwh0IJfEWSAbvJh9ZYWsKT7QKkM0OPvh83mRefpRkrptEU8dVgvxvAKWv29KE6LvrJILJvas7iSNi7nmP2eQdmGi5tauyxeT+MIkjaiKROrAA4EiOOyAG0XC4yCMky1DrT5lIr5pvaN1d5IrFkHTSaSCUZgFUk9WbEijGAc2LNWEJpBJYKyScruybSOirJGsFW9iInrMRwucgaRyYZuykmy6gdvsv1obVkru0dy5wN0tD9wkX9Eww/Epv8IWV0scLHao+vAdNp9ZJtchdtp7JjuiQBZ3obrixdpB3zYzoz1rIJlMbqzMh2+TztmQpsxiF7X8kqMiaVLzpVjzEwqzJ1BWfXfznQqDzwY4Hcubc11HXdL4gJBKyd7y6ME06OWLEV2cwY0kqMiC1ZXTZoXTu99G0rN+kALrJEkEKvvQshW/5z6HLtLJhnwQTRxt4totY7gTiPQzw8BlKzj+0OFlS+xkHV1hjGPrhgwTIkUShytnVVWJmA7KTu3dpPLeTClwSYBfBlIl+U94Epc2mkQykZI0Cw82mMVUtGAjkje/AoXsTIMWO2LMIY3+SbeWoUon6qHn0mbZNVlsgZszItNTPsMWDhdCDJgHaZT5b4wauFwaMj1F+GHyRnQA2tpbJjSMAYMU6DEiSw9Oo0OuMfAG5/3wKwLq3xiRlzk3BpNQSREOoqro2+C6G+YVhk1o2lfomSRpNaszVoOpMy2saV0ZdXW+SMHlwZSwNlGibdGbP5moVG5/b4q3QxZ5P3DJkt2WxZmqfM+/kH8BsA/DunjBnXOmePTJO7/NSgpYPm7xmzd+jfznHxhCVb3AuZaSIXRmyMPUJtFX3ubJYLa2Zq9HECwExYsgLgaO6RpbkQ9nM8wFNHfx2QUV1akCv2Y9DZJwFnIcCapIu6XmXJxva4dqwzexwbwI6L4trY59fjOHi6H8fRwSdnkjGAMwFpvaaN69eczq8lzCifowWThVB6Kb8KRgdZp9hz3MPqP3ZgRMaOec51hT4vTspgkO3MjkETPVbPApAaoOU12EqCgtcQU7R1/Z7U/z5DLG7yRSenPwQuhCVr0QSEO8ZOZ8AT38Y4LTJjhrxmiT8f9RBzDz4l91q9wAo1MGeNv7PazSlsyXXxagOoxw5+HXLACq6dqouchV0GK0krOXd4eaCGIX2uCWsza3Kxgo0t+FiZhFVXeG1HrLGzlbNFLabajfqtSnSeAdVNrFJmQ6Y7b6sBa3eAXgc2A+TbZ96mY2TxdMMOX8R/7RxaPwcOq0ZmKzzSKF/21bGzU/ox462sPfvgNEFdMDX/GPPrOtxhWCS7KlkEYj7S2gVh6aIRW4ABqScwM3C6GVsjcN1YJl9UhgxJ0LyP8Ot5DRUhmZQ5U2xjSSZzAGe3e4oIg64bJlvGbowsSCsl3nYXyaOthMEaIo5YmGY6QKNAjZ0bpR4LpwHTTzD7Z6McsghjtpEq2nMMQZLPmaFIrzMbxiBduqgMWlyP3aIzo4dMs52Ucb4vOLfK1/qyil7NhiZXZFfGQpVuIJhmwkJnIdJYZI2+NfTQejFLUk13rFiUbvKgRo0yx3/WgR/AprTq6YONw2J4eHo+HLspMXkPzN5RxszjibTMAj8BbsyS7Wq9tDasf88ae5bVpnWAETLOxA0QxGDptkCMmAsoGuxdNwBpr1o3xmYfAZidyRqljoylizzfhLkyBmwsQ8Q0BDGuU3N3a0BrMIwEqPo6CzFvI1ONzD8qZayNeySbkZBUkg98d2o0UQwWpOhMAs46oSQKQM/0iOSTEQKmbVksBiLb6jJfHzUwfBDObJGnk9Xk0Goe4tLY3AtrWWm/zgZUbJwZBai55S7oJ4xZbouvYkMXVWmXM87RvoN4MUOuR70vfYAzzirJGY1q0WyxG4n3q2gAn/ir2zSsmNbp3kBXXUfI22XfnQ67wYXTc2zWL02Gx7FheMjFsdd8+ahxSrz868r0DNOSDtDcqA+ZOfwRSCF2zZnV4+9m23GRIXqTh9o0H7HFmKOBqQFeazsdNs1ZQurA/UfvlpiJeSWrMY+doOB82Z0p23FZlDlUN9a530aRWYgvIGuYbpfPrBlbDi7sGBKHRiMJ48pJckWcA9JBjPJGWyBWlDOyRf6c5lDzj2mFcG4GkksblUnwhfsL9vgbcIYTSSM2n0tZ88oKyxn5mJhY6G+kzqlvTwbSgjtj4sSIjUNjb6mRXf6+xuy/jVv5OShGMkGpEcucFtP6sSuZ4yMyyDJt+ZF8j6cLSLNSxCa/pDVmuZyR6846eHECND4+FzL56IHNlWrLus7gNtQQtuFb43WNAK4yABaBWHkNYKZlE7v6szIfBz/fYb8RwB/NpYykpFmlCMkIxGbQliRLnytg9i4ZfWTL/cAP/MAOmJ0xX48wbEgcGlXGyGxLkDNq/ZhkmF3VmC3bJ8CYgUgGUcxwIVtOp0sWWSZPrLSsZfO4Hk3DoOn7XBMGmmcNePV6NG+ADSyHlHaBmDVuX6X6scJSSVmH1hQG2WO1hFByGaWm8HkTNixAvUwVWGNZVobnHol+VknjY6As2wqo8WKLz2FslWrL+rxau7t83KnDVzljcNwgkDYO0mOZk5vTsxyf1dVy1pyxfX4d/FE8E+zKyF36HHz5YOg2DlKoRx3Mydj9VnRkwlgOS3lyrxywzi0AmTuYqHCPlvUdjI3lJ4l07xKYR2liAwqDOeuSvm5TT3aLA08OW3pGgvdpRpHtVcLFpjU92dLjzjyh1iiPNAKb/XNgo1hBgXnczOHVSRYZAY3jfj7uTatd69mcMTHBbhs4sEmBtXo8YZAaSK6tY2EEBjpD6ExcWW3r7uAzrivsbwWq1Sga9XY9DeMFAlxq/bfMU8asg7IyGU5yibTBNuW1K7F2bHVrZAmhGoBwjtn92zeq0JksBndK7VTWiBOJo9SQuYAzySoLEsYiBodqm3+bff/gB2JTvmgUbF0YeGUAjQwWgXiqopSxSIdWs8kS0MZyRw2W7sDssN0N+B+DGXDQAegH56A9V4DU5x08/3ZSj5a4NAZWTJap6soo3+1mIOQUac0IpDZxLSeIFao12wVN50YY84rkYOkp4XX6rZQhY7xBHRfXAGlbfm8AlqoyBm0r5509xUASzV1dWSZpjHV24fv/6BaYfWPHiCWft+5m8TfwtnPMwvre55i9OWN2Arh2bosZyAo1ZiJD7OxTTRi0M/DVbepZZqhtV+Dksn4Gaks2GYO4DQAL0zdATf+ZyBLZdt4EmKmhSGkgq5tydEasOzreGKgRq2Vcd0bW+J5Y6oMYsVHDhhkBUMlQhaMFAjCL52MnnU1qypCUZ9VcxjiIKF8t8tXsQ7EdcOKL8Szq7CTMOXVidJHF1bjDVRKxq2zHMwklomU++CDaCU9mMn4PYclMY4dDRy1+RlIfoICrBrmiujUaIGtcH4G83GDMWH3kkWOBUX2TA9ERr+1h66h7K9TyxnZ2KDDd2C1kad0ltFRfxrLIBq7MQNVahRiz6dyIAZQa5OjAzModnHg3GbGkI1nbZXYHZrYkS9eYTTbwyrRC0EG4DraEdJzXVL0DvvvlPJ0n79LEe3uLSOAG2Ktt//j01Fk/ZyGzjH5KxkffB+MYro4GeEs7xkO2Wcj8tAEz72AXbM/f2LvbjTLMjMKlPQnm4rozzTS7YakzQ53StuX3aQvwYqHX3oXRQkrZLUgcNQltmjGYsGKcy8SANVaWqnA3ySnrv8UijosCnFji6DsfjTK9WKDgTE5DsMlXQEbjGJYNvPHpsIxB2+gvQ4NLhMycmu1bKePfi2I/P7BhVYBVsVgvZsn8yt+z83q0wIxFYHX65yeSSao167lmPoSEa61ZrDnjK31nhOH06kmOWa+mrAQEV2BWNwxZfP5pjRmWoPWYW5azYgWQMIzAgm3nq7yx/f0Sh/0sAD+yArMkLmRPi60SRjYC+TSA2Xsp45v92zFMOybMyfosAW11I380lR9KphkyS3w18MBa04YNA+a97oElgyJ7DLJAkiYyOBrgFdNFcsuYZW6LwqYtgdM7INjrvJhp6yCKgSrVhhViyBicOTOVnXmj0GiuYetSSmNDFDrnzKqxjNXuHVK79Wd8FaWYxXioRdIIBWcAMlWcujIqAKsk06oi0N7FFz8Pm+UByMEK33x9HbaTSepaPSRMOgmY3tGADN4MsSZq034SeCHWlcXOeR1OjFjkiytbZkOa6MHkY2UXuxhyhYJqSuIimOvZZU4RLInFhntyTlfBJgjU9evNTW3bfZW9NrBXR6bX/N2aDEp475mRpDYduRgSx0O241EsKTVlXY6Y6AKTQyJaV2bgkly3pQMbLO2pXe0YHlLj5k5R1uk5QWj/UuupICwTILdL/dDjJR3izvohmLVQVluw8vO1p58ZgjArtkzzpaPkCzu2djuiyBGUBbW6MTK7NnPMImTzEJ0bu4MebEdKEIVFB8cTHONi7oGNdBHIXeYn1RfMDztjdkOIN4um/7a63CsgU5XiSsZzLaBJ8ZqiNd2xfbLcYKJW8w+D2e+Cly8FkKN1ZVvWjOZ3kLUDVUP2eIvyx6xubJFIimNjZ8qWcOqZi1bKrDVDY85KiIPGEjZdEjapDkDGjoxsle8LY3avN0MwGdFqssmcAVpdpjb+KmHMP59LFjn8JZMu1gW0LUYoX3bgf+zAb8sZMwFY7vnYserslUL+jACp9zVmkdXyK2ljwphh4+TIDFgAYgLGAoOmUkfJDsvqymxjhe8iewxW91z/pcwa15slOWeXwCz5rMCscO1WX39juqyZl7iAvULbrGIE0gFWcHYkWWKXRlbeNtaMt76NSjVv3cmyf0/dbpeK1cWvgh7swzleneU3OKZjnGp76WLGkoXua+Iub1ckmWd3POQyRkDCpcU+n20muysjA7LMDMTVDKRTD7buNHyzQx4kVLNTXKnSCwLGWMao0yYUqzJl5TCnvJGPfBWVfhWwxqOYtdYc0NjJgKGyb77LJ0J0nFBAZDlL6tL5vuYsnzNyNjuQnSUbQda+lhE8vBEGYsFNRHBbsv95qYKTKYotjHj4wSszZ2qgSCxgYyJPx4L94UO4zunXQtnZ5SOvJdNOvTUZozF7hiQ8ywSgeRBYYQFhWEbXC9l83BYmbWoCTTgn17CwAbqiAUiULpLJi9wOLXt/AsZMLPEH0sKa0bxIGVfB4DIta5MhjwY5FUEsTJlFNiyzxWcrfaedXBmz74HZr7+zZFxXJp8vpzMos5wpqwLedp/9xMFxt85kfrTNL8SQldZBKEudWU2Yo2iXP4cPjSzxGZB1i/w7bMvOvsY97PP6FIBlNWVlYc6WLLIFdFnyuy4y0LH5+40O+y4APx6A2d8xw9G05eHZZ1gfDCagzCPaec+YfWaA2aMgzFm+qJJCljJyQDOSEOjGIC1SyY1sUmWMS82YSuwShkyXtwTI7QDWyA5rIAYMlogd3M0D2eeD2CoGbD0GwIhtG9b0zW2RA6W1/qzIvMrbkH1ydobsyzXWrksXSyZfpPkB/3imxoOofIRYWgKlue+dSBt3NWVVHsA1GWv357p+nLo0JiNVnGtWGygrvcaMdroDtkqmH+4rGANijRl3LIO7YNYLjRIqE+HSCjRMQMcKbrLaswmzeAx0lSjWRRzpxMclg3zEMtyvzW6sUZoJhDyHXAgg7v13844zqa0lnXcQAui1Vog1Ynz8LBWQ2gISVikiBlgY+2ATTM96sPv1U82wNteHXT2HYme0pHpwqouhz6hrYfCCjQY5ViIRykaVpZkwZO5hfVGYSvvCYx1APAeKwHx2src4ldPFC6UQF0lKLj6nF6kxWygY1V5bdHTEGibNAkJmxWIQrS1gJP7dq8qiwHECMgsGHwrCSuDqdm50KsRkW/r+3pFY5xfBNWh9e5AzfVvG206OrDITKGlklLkBZyW5ZZ+O2/B905NTE9iyIlQcIVAngw7fBEwbfjWKfee99owAXmDICIAdGzbsIDnlYhJiF2za7TwHbWHKdt/tLNoEaVbKgGIeDEEsrf1SSWCXw8daM7XJ75VsPjLLtLastBBpC3LdXUoZUlmj+gfvsshWUGkLyMwGjk2Ysppc0xX4uwD8SsD+SABm32w6eutOVUQXu20GHmw+X5JBic9Vjtm7ZPSRLXdll/+IzDGROypLZtSBV5ZskS4y+9UkckMKuGHkMsC1yBP5+xLg3GWODFj9pG4NynzpPJY9nvyZArNMpkhyxXDsyOAD4ugIZddkfQyylLkLEQUCGpd5O6fO6tha3RtyEJbWmVUsGWZGjJnnisfwunI2ebjy86SMG0sRlwYzDXhUogIPov9KRJoHIiNWbU8BuiEGTBOb5nn3hKOdI3xygU6W5Jft/7wJ/LzthInQEQOCVWSeVszZGcG/GW3NgfR3vVoE2paKF12Ow8we0xDpHWj3yPBSx9/D6IGFa4KbxGEEznyJO9YktC5RtCEbZLBTRQuY1YDrOl3DwDyRj1IwWnYM9Og6M7PLsbMU1JMdZFTjsjSS68G8Magm4xFA7rKX1WEijzSLB6BIorF4s3cQViyyYTxfpZBoodQh2tY2jFiR7qsvAdP9mtnlexWqOCtLlpkF2/y1NVhMQWyx17eFMOqHhF3jUxkj9a46QOv4JYRONxqwVMLEapZZJFTa4mdAfFxsDaJe9Y1Z2BrbRq58ZgRqTebnbJ+fuDKa/YP3C3vDiPXP3J5qFzVmGwlj3Tkz2gMgbVdP1g1CLFrqN6bQ/G4E0gcDSnBktETKaIu0j50ZpyujfjuKb28SJl0DC6yREDt2zODAkuG3N/awk1rrWFdWNwz41d89xMN+iwMRmOEpFe3owJuOFy3ZEfQse8+YfQYZsx3oQjTr8GSZxSxkV8PGwEg7/yKDzBi5DJiZ1Kp5Vh8mQJAt8ndGIWdsmiswo+Oc1rFJHRq7MkJAn++AILNkHB9A4dNFWLEuaWQwxxED1cwKh02TjLHXrS1s2QC5yNEOBzqzlJEJJMYyDEhckABLGc+cGP1k9NTf6NeTeRsy7QCynESsN1sK5iCFeSBTEF+ljGyVm6UMp6I6z5U7gS2LgCziQAoglnDpmXM2a8w4XDpCPJdtzjNRNYtL2c9a05HvrRTuUaVfJtUTJ/6H5HJXjXs2TWvLPl3t35ttaSP1e9P172SXKpk8bdEDORAne5XLWDFRQrf5KxZDo03ki+w2ob953rYpZ182YsD1rrJmL2Wh07P26jY6tSxqZPZsXYNLN9CFFY8eqh6NQTwyY5BDg0zaWOiMlMSJvkwV4EgusHmYDRI3J4YeJqct66QujvgL8JKanUIsQ7iAVdpYprQRWynjT4XZrwgFdoewZAdRiN3Y47C8xgwllzl2p8d6BshkWmrDnzBltbFqvgGFWLPNVoAWpYwawBxrzTjLrAbWzIYT47y2q4hZbeOAupMyZmYfoUZD5JeZTDFjywqQyjajK6PtWLW/34GfAuDHBjCr34Y0GyfLAQryI0tVBe+B2WcAmCXgC8Jq7ZY3qedCwoxldWbptgRwLSBKAVzGAAr4shNWzSW/bGGROmjaMGcLS8bLZUyVODhWAWaF3RE7GGJ7/QYgK9W9sXSykCxxAVhtmRvVjvVcs26QMtZJAdxIHCfTqI6adDaCqzsHSnOeWc3VfiasGqv97ITL2hl+eNoZehSMcXKtUH+6o+6rFtMR680qOZW42E0edMP1GqzfJyircacs4wbWGG2TEFkWFk4vxUIyRZUtzi5cHaCtBmlihHTKhiH4PNqQsHgiorRl8GaYyBh3JS24Se467J6d7SUj3EfocUo/2Qo8BshwCzJCd2BbKRVs8LPpUULauwcZPDuV7VkGuJLap6VY/EEIdIa+sM871Rak0s8rhLfgusa8LfYwdUgjw6pKIQs/EEhDYpcPYc0IqRgSJh0poHTpMFp4jyUAd0oanTLNPIA0H8LGQs6LKmnUHLN+9Dk1bJU0Qm4xbAASFIFZZplNQLbklxE2cnJ0Z8YryDZZbUogTTtwzK4FdjUzAeEiOd7JYht+kpmz20oj9p2LjNl/C8W+G4XA007KWKW2rSbOKUWA3ABZnI12lWNGgAuUVzYMQ3bW+jaljlJvZm4oVkbUMwM0HnAom6DpQs+BaJPfhxWmjPHW1lJFyggZ3EAC0OwCmO2s7zNHRgWYdctoIw2YPpEywoDvAez7APzhyZh9yeD+ekNm/tkEUp9bYLZhxbJ5iykIyQ0ViOHE8KM7OXYHRWXESg+Y1uws7O3ylSFLLfwV8G3qz7IMNBMgBrXP3wE3ZroIwIVw6waerNs70/pLrfXgjDMyAHEGfg3hOeWRVXFdVIMSE9arM2l1I4EMDBmxaf14jgin0SllkEXYhYFXFTfGAcIOCpc+yTF7lD2ruQgxgS4XDNniKqC+/uJgYj7TsXv49HAywbozIHqR7fS3riYWQYMBaXrxTKAKojSEzzYgWl5Tth7rA2yXXxMBpEoTV+g8hZTcEnqA1rqqN1Tal543f+zplKAJT9ZjidzPPW+FL5I73zws/eGHaD9D9dHnbssX27k2xh/mZGOjy6RthjSiW+PZr2dRnHrebl/+z/cNP+1wGAFFT8/8em5iOBZiQJZ5DOzCBqDxceTfmiEFZ4ZY56LiQf0WW4GzbX4Ebh2UIRVCuljm89ZXPt3kPFiKZaAZZkJEmZBKC64RTAI6FWZrDRmvd5EpYoODs7LSnUW+FmQakIdKU3fRLOEvpcbM7DdPVgwiVUSUKB4kieTPnZWrxJoVkTseHBqXWe030Na/V55hEFIKsWW3rbW+3WLaWC5pzFmiPozAUsYaotKN5Iy7AOl4lWZ1k3lYdAy8Bh4z9tjVmJ2za+eGNTJA8w86A7P67b6U8rKxx+798huY897nmL1D/wSI2QUrpmHQDGz8pC6NjT8qfVkliFpfxpK8fu34xm1R1+HCzhlizdmSY5Y5OirzlgE4kRZe1ZUFRkvNOHidCbBj044eKj3aTN8pidyS930AOMonY6DJ+8rAD2fMJP/cKxE7aVSwi9urn2SZIcoYXezydwYgmfv+FXPml0NNvDc1CW4U6/wB0AiY4Zjve8FcQDzivpgiTUt2xuNB98AtRVABF2/GmReVyxl9G+Yd6/n23v4ZGFvZs0qQkbd8b89R63O0eO/ynRePU1Gf8hbfgtTy8XnfqhP1+Ha8M2aF6spgxJiZgDAa9NB5/fe20DQRrGWui9zRtwC8pj1+QW56cWvmH5Mt6wChg65bukVHWbqAbHhgw73RF+HUEiZteTazJaSTCRAbmKZNv5XciN4Cp3fd0V2BLZJBNQk/66MHHYQg0VwyK8ao0qX+bAKzn4Jiv2IJbgvyRQJVYJOPJGA6yCFFPmn6XZVBWmTH6oOZZgzU7DaNQVT+2ADa3T5/Xr3RPl+ljPNKU+MPC/JFbxLG2tiylYmzZchjD8yujD3WbLU0CDplwnaSRZN9tg3LJtN+pcO+G8DXAeDJv7TSvi56fFV4LL0cC4FunyvG7F0y+siW+0t/6S8F9mcEceKy5izUfHVw0pkzft2s34C7HfyGnTOp9xqD6QxC2naMWDcGGOOKFHneTgI5ls3y2zqbtWHpgolIBrIShs2J+TJmEPuxEvaNgVK37r91lktAYogCqLWO5ToT2TPJyGCkh34bHY/7WDudN8ox0/NF18YmqkkUgC6SRq+CgSrhmQfs8s/Ysh3wUqexc3BGI+ZuORxki/xQLFenZrPSjlWRMyKxv1/8/Y1qzXgvyEJ/AzmnwYetmU4CxEBwinPNZsVYrCbbhReo+yLCexXq7aWIdWTBJd7t/liXfCOSe7yjHzp1j1WgLTyISvJ0P05SGdhePq4mt6s/tblHbiWf1bEp53p60Bcfe9lBz9iktYXpYg/DL3/8G1aiRq44OU94dKHg8C6OpTDfxDDYCX/IkMy2NSvK0RQBZQyfolzxjnh8gSfTLt/INh+be6Und0ZOBhhMl0+lhAmFZZl8kerKmE1Tu/zV6B/LcUl4rAck6hogDXIzQeJgEvnJmHWWOJnMcaRfDODvmvViENMPTFvT8ZkNQBATvYNpSJFAarLU9wuDkAC27HGAFsBaGwCQjDMTKWPBNAWZAlvb1GM5CXC9pUZOUWRZ5JEAC3/99NVDrVtXjzAYKu25t5MtZvb3O4BlzxhIsP01/VMA/EIAfwIAnvAl5Jrcs9pc7eEY34zfSxnfpX/N2c+YBtvJFTPwBAl9pmUyBi2wVyAL+1bHpAHVCqqYMXNtZ6+7YiDTAaKajBCoc5ZWMmPE39U/lhrS94pa5J/9YRppOGWY3epEhsOkA1OaGGSJuFvnB7fE4zgqgHIcB9p3bwTASqslA/ZmJrcGEG8EAFmyeDMzP+4rKmYzrKfWWs3sVlWd5augLrBm2ocjKaPVlU0bJoa+xnhd1ZllQO2xLrbUdxnVjLF8ycmvndEnW1U6yRxdA6Yx682GIyPXl2GVpA23u/ZYsLrR9LDZeRXeikOmOwirMqLY8vUCOEPwXIzWkuz/6ALAomgye2xo13bKpXWk8BHmUy3tayrMi9+38DgHWN4XhZfps+8Marrnsj4jgJ51iYWI0d03AdnmtoY4swPjZjTCE/lraKrhvIzRdSzD5dx6liqdYqnQtaABuG1brjmyVdITZIold1rUwqZFyggyhWCufv0tWgh4BnUtXUb/PQVptoCUnhgVu4sOjbRWM5BdC/i0WgBuJcE0vUbsRj1KZtU4tmFEgAnj5iUaDwbwxSptX0vDIMaZZitDlo+nyJ0mHJKzbnVCG7rs3GTMvg83E6lhpufM0KutTNmRsW4WWTNdxoRlM3F/fKge7bZ5b2lwdSnWas2upIxG2WWrlFEt8vuAAteWMQDbmeKfGXu4gMQ8Z+yaKXuA/UqNfK5kjwC+LwIzbJ7xV8Nwed3re2D2Lglq8jqtS8bsikFjsEOZXFvHRg131rbR91N5ogC4lKHCDIjmeSp9HEyaMl3cJrWQJ3ZsW2O2+yPTj0U2SXVeY19528R2jWw1Ng4hMMv75GStr+BQXRdTZsxpkIVBdH96HFj9AxiEjXl1pbqsin9GQokFu3w/D5l+xBBkd9tal9jU6HiyNaUIO5NWpZVexPSDdaAmQC3bCYsshIYuJyPdvsQiY2HLNHRac+Ky2r48tGC+t1QsGVkzTwSnw1J/J2V8u+q29//e/MnyGgf7gt77NP+V25QuFqy9f/OIEtzjMoM6ot+Tab0Zw7E1uwwpVIoGH2yhn5l/LJrAYJtfkunq0ohlmm/umKHeS7CKI063JB26EzqMSQoFTI+Sv0Zk3rCqTcepkVJA1TEGVrjIQIBhQ+1ZwpKJfNHZ3aSZYfQdwK27MhaY/cIlVJoZsqpsGCLo2tnrH4krY919LhJQrYyZyhJ3dWq3mXVQk+VqlFUWK1QRNiOiy5AymljL+yJltMAFT2mk1k9WAnusCGEjD/2cie7P7O/P/55viZ9Bf+Tvf2G7C9XImF0PSe4lGJ8S8HnXc8x+sgIzlSuqbDFhzjo7FrRIx3F4Y8ugDB2zUwR4ujmGib19Z8hcGDGVPLowZ31VHfCM9iizxu6ECTBzZQ2fCc4WqaXUoHXrewaByKz6Gbw2Ns8FULEb42ltW3KNBMmiMKxA5JKiqknzyqqQ6QmyMo+GH6AosJRkwmPSRlwwaNfSF0ijgZOwsTsYKxQ2DZI71ioIh3esCjizaJcf6s1onM+v9sFh2Fd7oQEzLFBqfR+P9xkcrgLGcr6uAOTiGLu1kTF7jZ67YD52T3fl1Nro9yP29HmgsmNraWxvHy1emCJu23rqgojompgfCT+R1ehWPAlYRqqpHOMZllv5D+73stQtrqTf00NbC1E0xYGb5SHSw4ExQQe8v6bBbr7tCtnCpEGCpT3IHKNIsQxL8YIV/dwlZLfgxKh2+bbJddK2+RJUn8sVLSGEINM9A2ukBBx535jZaGlOGaajvVlU+6Ws2tJPtc17Zr4Q2SqH1JvRDhQBa3dg9jNg9gtXluyB99ixbBuL/cz84xAR6LYujdwimQljxqwbhXDwdXdm5DBqYs7KrYSgaU7tO5cy6l+0tbFEyggBZP16vglTdqMndkmA2t7YAwMAZrVkFedOi2/494sd+GkA/j9P+CLWKHW7eOil5k29MPI9Y/Yu/eshxdLB9iYZYet0dNCDKVvLWKkzoOfKrrH8sG1vyFWo/oxdAzXYOTgvJoxY2sZs3gU7FmSOGfjS7zDYudomyzSP4yiIjodOWWO1g62eV9bnAbiR9PFGGWZDHtm22XPNBpqgurpKMtHKGWi11qPf0/i9u/f33amx1KtxnIx4qgnhVFdjEK/RF4MZM85W3skXe4f8Eoh58hBHpk5SazlxYuSA6cCUdTcTWxvddwoWHVTSFGTStvmBXBC4c9RjpmxlxTIRInsurnKOGCitxXIunpgsqOytO2S/2JlxArONjPA1gJrvcRsFFPsl0F2U/J6uMbnwXj9Nb4E/frGQ5bg9VPdtpY1nR0L3fu8X6bZpaLJhljznzfKRGHH+O/Ygp/Ylc4xiMFibVyD2f1SH5lU69ezUmP3u7HSwJxc5IrBqE25x7HMRxowN9UtYY2yZBV5uzXeyU2BuSjoJizYOS+LIESSMiT7TyiZE2yCm/htXRl/7rTuAH1GbDFmU5LwV5TTE898IBN0dGL+Kgi/cgQ9dT+zGuLxP5hWZt9SoXTBnow4Nm7q0Mpmwbrev+WbdjdHLNscsBk/f11XMyD6/14hBcs0wBuamlLFKqDSCzQeWgYMcmO1cF3PZor0WsFKWC5fL2kProfffbsBXAeAJX35bA3qfzxqzd8noI1vuijHLQIiAJWa71CJ/AKZHt7Vx+uvMWNm5P77Oe8kxg+5Px6cikSxkkMGZYMEU47mM2Q7kEcDr7eQ6O9MaNXZ87ICPpYts1d8ZMAbnnMPW89Tkt6HrXcQhY/zYVyfGVBVTAxJY4sFqXRk0LbnKHOW5U1cViPkkns46umEDtkGWFUmINDXe6upewlCyFkKX1nauzT7sRJNpYqHfd7ImWWYuu8PWG5PNAHFYEWL51omRpxcJkt47NHZ+LYI0bZUe79ocLF8n9/g5wcwPsU9qxIFn5kpfJV0/52uPsoV2tZ5rO41HLUEszWdbP+9tRp6zs8L47WLhdissPdU4kTPyZ74qQ/JxBsJd2DQ7qSXbmwnMm++ET/cMp5WzAVkmLNrBB6SMluabgZaJcktlwhicoawgLXhkqIV+icQTSxS13myx0NeOrNSYGXbWCJYwosJWecZobar9TCSjrxwAfiNuZKt/JLb7Z+zZcUFBak1a9j2uU7NyXZeGjXPjIl3UWrPOnFmw0++h01hqzaJ0sNLVWwnC9VS0mwxLxKw/E955X1PWt1voiXNmg39eR2bLtMelj4+ZhHRevwK/AcBfecKX7DF9xOMSkveM2Tv07wws9Y47AwECSmffUQDHGWBVQFzmnAhiXxiYbHPWLqR3zu+1rozAWWDyFLglgAgZW7dj7BKwtdSaXbB9pkCQGEyVPuo+L+8b02ZZrpvW3zFbSLJOPsfhaVcVkCXduBAiLQjLNz1/F1fGIwEJSr5VAmiesWeP/1jWjteQSpFjiXbS3MUuX3imkWNmQv9Rzz/VYrIZCTNrLo4Iq1jPJH/Kg7RRrSJAzozneWZ1GH/sks+iINJpTNMDJxMr4Poj96h1BDh7BoUaYptyRAuj5R5cBPt6WvfTIsqKYbTe1mHxcjD1u1j5BQZ5Cwzx+a05vcLdCFtz0LXPsQBTVBi3zV2VeZMlEOFYg7bjQiv6DGfNh4nMXVLoAYj5CNq+d7HupFLflxhy7eMjDxK08/cAuvVgaiODPHRu72MZdR6ZfhJHjZlJz97FYcNj7djiROGTdTNPTU2Y7QqywHQUfc1u4vk3+psisQnKPHVitAH0/NQghM+1Ul7RcGPMLSveYGXfkmVWckyzuDJ6lC8G4MWnDSe2+SmBqVpM+THYLlRavSELuZe0zz4yy75nrSWD1JjZxXSpO7usUSsP1Jxt6tYCu9YDr5/r2miRVStntWarXb6RhNHa3M791sCQ8WCQpQHQAEIt21UA9DpM8XqM2aOACxfT5f7wPXfG7Et0sz2TKmaDECoHqm8f+LzPMXuzf2rtzmBsx2zR62LEQbVm/bNTDZrvvkcGEkMuyQYUx3F097+HGDFm7s6yzRLL+y3jdcaEMeh6E9asn5Os1oscEnuTC7k3DgOQbuLR1YvN4KMQKC4zxsxT84/O8GugdCCm6Dsyb0oZ+WGYeGH4piSrZzCruSGDuZ3Rx6GrlNuXb/rz18SBRX//LCk7UH41qUNDLLID0X/BAETBoNjjc85ZKiXLKudU8xW9EFdzTBuclnJvGVs2GTPQmVgT5bLYX5dkmSiupFNSD/EpVNTvgTBk57+qBI5PEBKCiwObS51w57o7xjce5DPthtayO+/fr4E99tRy3ynmwC1K7+6OhpHz6ZnuXm0GudO2xz3I4pk3j9JE2wE32vYAsQNkirDRK6q1ei8Cv269y1UHCIZPWG4c9TDKKZ0h6n2UZ/m9MpSt8/xYFlM9DXHc56BEANNLYZKtEkYkskatkOlujkHj5xlEbnBrhztZcBjtwAs0dWwCvZJUqCHY59vCK8TWxZozI6bsrJu3SBgRa7syg0NjPWJC+ATsdvZ5h6uwloytC/m0KdUiuHSFyRa47ozZNCvA4U+A/cbo3ph02UMq96ZLf1a0d+h0rDVoyGrSsrwzqkszrmfbgDOVOwY2bZqEGIEzb0+KKW3kGjMngDY9HQGkBvkqX8wYsilZXGva/LVYstcz/HguEEuGDn6TA//8vcbsTBrtz5j+KQCz94zZpwLMUkbq0ddHgQwDPGbM+qwux2PGjCSEof6M2Z5HpJivM+/RfXuk7mxjtGEU/NzBZG1/RjVmHYjVzu61Y1U7C9YPGdWiuWSgjftPqx3sdWYL8NJ/BP7SeQOYcXg0EivyjeFHL93ojvLGbNlx//P27Ah1ZpZbb9yPEbnKI8lg9lOWPxlxNWLCVAMnjoyBGkxkjV3KeCAvlOOdWxouoK3faNlCP4AyG8ktToDAqfNVA/to23qy+eojPjqP/FbYHEOnp2GIyaOVub0+OOErmzLYrXkMrAZCJrA9fXR5b3rRoIEDFvLqIsit49ruQIhgAp8Ozhw3Hx1fC0jRA5/J7KwteXPjxjfO6x3X2+wj1vgsnkDIQrtgLcPHeynLZBEhYw+DZVM5ZNs5dwvsRAc8RnWRLh34CdRa2+vs57rL+7FtMr9pE00BvDnc70DLAuPXrp52cYzvMUUzcswQa8Yyp0Z9v9zpHFe1ZcAaKJ119m7gwOnpUFdI2liXxC+GcAWZyb4nXUQPXSEPzCqXbwXbe+xxRIYp1JERXKJUz3PLAijzfB7yjq3cOi3uUCZnHA0mwKXHcph+CEX4yl6hoOBVO0CvmNrrrorozNp8z8t0NqyKu0m1k5o0ZcEwmTFIjVrfvyp2/WMdZb4qIOOctFqilLFQTZrdpY1m1ozvC4VNrw6IhTLLejw6xLPU5d7odF8uyITzj8sNVyb79Rgxe0MglixbDHj1hC9aHJLQDsqVqN7pB1Dfm398loDZIwANFzVmmHb5Z8AsZcyIvWFzjFBvtpEaBsAmoE0t9VWSqCzbWwNmmUX+Zp6J46MRi2bEnjFDFqzvef18nplF7Hb8IpVkYJgyZAkQ07/iIAUUGRNmffVg7gEsFvkZGdXNDbW2rG6ggdac+YNYbF3AogYyuDNSL3wANrWTpGK5Pm9IGdvDsssZQ32Zb6SM1EkNAM3lvl2RO+V5AG0uTEMloeOZnPGA42lIGdcIaiS1ZFjqyaInXISLbV+Og0bwyRlvMFTtUeMiu6oeuCFrF14lnaM1dmkhGZ1laRbA3JCtVQ9zKpi1a+0bHYca2mhWB6ipZN/d2SRvmjHvAMQojc5rzCaroi/zicxGdl2SkT5JwfsyXQJaLWp9wxGUy6ntWQNF2SDtNNewcW9q763C6pTNziM9daC1rdRsgrI+iFMDa2KolbTSlD/YgelgIPsl1F0ZjXRzA6AlgVq2Ccg2YBfRHDltTTHjWg9LgRmCvNEobBeL+YeRGMzEpdFCDVmBujTO5Wb9jWVW+fzzIEJIy7IGAVXWsqhOqKgysJRo+n/W6S2Gy070jlELctNMIREarNOoqziSsrsMsLX88K/By08FGih7aq+BLSOGa1t/lnTZLalPw4O2mLVElo0/FwJkwaVRJZHq6lhCXdnMNZs1Z2ZlgDNcSBm1ljI6ifanmpHjIgL7luX9xey0PRv2Jq6KjwCtR7+XTPvpFfa1u5SxvA1L394ze+vA5/a2scrbXNm7ZPSRLfdn/syfeTYrlr3fySElMHpxRryax+CNHSEzKaSAqQDAtOaKlmOZY7C/17osRGMQexSg6TK70GoJeR7HUYHa7hgy4NsxdT1kWsCwfsfOWE49V9lQcM3GZs7AkOdALCvL6rinIjH8sBV0qRpwKbnakf3LsqtsLjgmqkX2oP6QaDgFeTI7lh2gRY9J4BCJdMpkx5ejYtDcslxeGIOlVx7MA7NWyCbElnDpullrFj6dXzte6wBg401nVmp2rc0qKEjZjw3AI9+xPLTazMjWX8PGQeGyxH21nmsEkj5+IE4j9BzAHDuHdQBxg6/HZOwXCRbDKZ8sKWR0WT+xiJBBBMxnXWiH1OKuaIGkzY5ha2g1OoYVCPVqvohubbGDIYDqlpvFGB+vyY4NIL6ctxvVk9n6Hpxa3Mbeg7yR6848iUpIe/4jKNfkjGhENHdHJ1gpkmMWHTQsMGURDsbAaE5SQ+ALLMjELIsIixnbCXtmEglmhHO8j/sT+uLg6UBKmsTKESNuJT507KQ00fxsKN42kkUBQ6rBHNkBhD69AIf9NLh9eXyvZLaUkknGktkOlJgvUcMQrZVbvncB2IoJKJNw68VGv7FlXRJZL2rParTVL2aDDzuTMpYG1250vdZl+M7eWhaZzsczgRgeAmX2LNYs2cZXDP7TZo7Zjhl7tHL+U6oxe59j9q1jzDYsmQKxh6SOyro1VqjuAABL78SdUGvIljaqzPGZro0aqgw1+biqN1OnSZ+uHZaRUH3fqKaM68A6Y8ZmKZ35Gp8flR92lo1kjGhsJPr5YPasyyo3TNmsb/MV/1QPvgOnqc9qlW9UjoV6d4WvRRgyj9lmQx2oKkCP9Wa+Y/yXz5YM4Yglvpp8GDFIgznjIrqa5JiRnLEHS3djkODI6JvjZxdjTbaMgLvIFTVEerXw4KZ6CJjuLJk3js3Sb63paUjirLn6bdRPeWOPrA7QY9RJHyYdbJoRTCcItBmbYHgCYgniGTM61JElzZ2ZT4MPvzNOs6arS+smsJx1VtbqwawxWS5AD7EcxiebdJf/eWTmBm6cAJGNT4JM1KY0cqybatzutWOT0xzL1egxM5tq7Zx34nhCp8GmWQSaDAqdj5EMJBgfM+s1Yyy4m4DR2v4PsGee5gp775B2dwmopZ/UnZUbGYEgYclsw57Z8hs06qrFKrBVzrgK6Ew8GA3suGhpwPSePVvjrnMwpv0+Y3MPUOxXSQgdUQOamgq2XOZghknv2S5/KU27rVln4FO3TQ2xDSjLXBdjnHewKBlU4Q3Aq8Y44cN5AHuuGdnmh/c8rU14MuAV7kybyftD5JBqBHIgAr+6Wf5Qxo5AKMske4aZMns1C6E+/zNjKaNJTZeHBL4qTqFrePS1sccjQGsVSz4uMTyTKb6mZHHPUAMfxhyzM8liNrypnZr7E+BtM1zvOgP3kwGYpQHQiCYej64jlTISI5ZJHEH1ZvagrX9m8JFJGU/ZLUQ7/T6/ZC6RO+MPBp30t6zjgm0bNWeUOcY1ZIWkiCMEO2HUTIBYkCRKrRnb4/cNl8DjJMAPQOmYgsmbkTfkOMsgDstwnRm/dtJpAQ6emLT7dvWr6MivtI2+T8zW+rIA1iotQ8HSEGDGNWbdejLbCT1uJj0OP8tP0pqx6KRXESVl2Wb3wd61cWezYM63qXIMhxzTWiODSG28sWfBDf1aTdga3ud6Xgv9XH2EKgW367GcKzZVUMnDsg/717lehS8PtxONRmTmK/hvrs01jc2LosLnHyRcN9uGZPax5c/bNGFgXbjTk9UGG0CpL7PS5I0CwhTIQTMWPFA0WsMSOStLZI55rdlaKcbMWRFwFp0Ye3fJN+wZs2OWsqs5ecSDAUtGM0TWmFnkW3Rl5JKpktWQEYE5MLLN02VZf5WWSUGZZfdSy9moIGWUWjNQPdor/2X3HuVVF3wz3/Rg29rmR0V0mWRSmbdjZ7kv0kcT8xCzjUHIjYKpp8yx3LqUsSxSxvslUClM2hYGF8iMPRYrHlrv49JECMC7YrOuWK7XPPPbaQ77ZU/4dtJe+7LE+tmwr/T/dKSM72vM3uDfVbZYAsRwxYypVX43rLiSMnY2am4y9LJ6Ntejzowm0zIr+ey7dgKQ/ATEXX0vMHhn39nlmLEdfgerBPy2ksakvmwBrXw+mqtmBpAtO/aJ1NGq4hYFOX4GflZJYzfQG68+GbIlj1nUf4ynsJO4qDPjjj0bujFLBqTYatJj/dmQPiZOjSnz5atGU/Od4g95vd8Oy26/7sMHO2/fOjHqaauLSLFS19+X+jLdUV8kjJ5W6Ixt1uMt3wBxotK/0rpeff98fWuC1wl0EDv55+3Tm5YiULuuVnVKr2y+6NJbPkNQnpu6ZBltEfBcNNwEmGmIFpt7FELXsChpJCA23SJd2mWLVT6ILZtLlcxVnt5bqMO5swtcM6aixzKkkwjWCmt3UtmyjEemdIbgwIhEtrg4LlJ5kpNJoFO/vlirM/MclI4sZzLVhNjoBwkkFR8FKxMT+g+ONBlbZYyab+Y2A5q7McaBXzBBD+YrT2NQlM1/5Du79wcxXv39gdws5CjRLITNQw6cW+7vzEG6CcihxiDTCESljBwmzRyW0/Wo5h6PAq7nmnm8DZYLb/87v2Da5ZdNh8AumDJ9ir8HZp8VxswShuxKomgJ47UDUpxXNqSMBLwUjHGNWZAobkCWJ/vzWk6Mj057pOaMWS0GmUkd2K7urJISMYDVLn1s2+CMM2W0WOoYctKwkTxq37wrIbGY4Ue7fFPckvX2gSDhG4o/UCnWQcNY3TMjIZWqusqTIYjWoWW46pQtCz2TukIXLWwzBWGZwfzRdiRFOlHCWMkJEhsLSsuO71lP1wQi7WMI9FR1GDaDqD0ETE/jj7rhK+ODYQfegvCy1jjmZ4/s457qMkSjiunxYWLqIh03V8fCx9qi9VCuRheJyQILh9XifnAsbLiByBxaUru3Vj/ZdIz0s2Wphq7LHU3jBjTDKybS+fbYIHrqYCnZCyfel9+csGgGWcb3XKbZ6u8+SBGiZjjLbAoKom4uiG98X6+EWMUVTfFXedW0w2eAZmLb3ZPPbosQUtkzE/85D/AwZkJlHUmz/FK3E0CWucRnGWedwGRgdUs6z2CGrL13IcOUI/BQa2w504wHEeaSmC3o87BPtl3tjGa0ZH6YlpiCpEHVu/lnTBuurTRPw6sTsMY1aCx5rLdmnx/ljP0ZchtXN3AM4BaZsszYIwI0e22zjh1QegS0PceA5jUB2ydRymgno8nZGvT++znMMXuXjD6y5S7s8k8Zsnteji0Oh2fr4mUJgC3AqwMN+i7XlCkIPK0j41cOsb6SQl5Y8LOD4RW442DoS9DW67ja9MrgqFnjd9BcEWvKjOWEoMgBAnvb+rOEzUsBGteipT1poFR9KCau8uk3mUiqcRlVASr4UqIJGQll67wHxvRXdFaxBq1lhXKe1JmZ1JstUkaiAZ0GxAKztrGXrNkTYZU4GGZdWdwzWzisXY3ZMbueA6CtcdOVxjQj3DMy5fcErWuemQHwo1IP3jbsjJ1McuFRyE49uwBCuPMDLBFjZo8D8HP+nuoJgwT2CAN2tb95Yzn0mvdxCQ9Y2qv7GaOxL1p2QYMJz+UXg726nd0l8chhHAHTIGdGkAGIUDBB6ijIMozy+MKV5WM/Je3cZeljha7gG5EqLGW0ZpvgYou/5pqVhSmb9X6G1Y9RWLKN/4TiGTvLaNYyriJ1ZRDZok5XXI3IjPFv0T2pNzOIvaQAFbc46GJlPUMcKs10INd5HVhrvyCDAWqbrwjzQHyfTTudn6zTLC6r01J7fkTDkiyo+igrINvUmkUpo4dBAn0yFBruex1G7BFQdAWUXld38FxwtvvOzDErF9Kjs1agdzbe2+V/hhgz9GDoDeO1Xa5L4UQqt8gHSW6XMWbAlOilwE1rwHbgiBFjUi+WAjIGflntGLOEG+nhmdNi6tBI+6WujMwMVgKNNwFU3RyEAZ66U2qbnJbN2MzMIr9uuBkKphYAhtVVPsMxo4Ml3hkaCxaYMKxW+YxvXAaHGNClHepdr9JF0uKeM2VKe41OQMWaBVBn/e0OdFUPtueB9qsXDN8yxthB16wyySJ5ccph3e3xbwmYq0PZ70lIdE24ol21X8xOsvbwnnJbMsdA7MVP0GEUzty6suaUkNZxx+yQcTj1vCgNLmBEXR8DgGbTP4sxBtNUYw/Mhvej0xlLEtBNKNLATNvaSY3o3ebvsUluncBNCG1Wpq9LKlsHbZwpDvLmLdExNAXDRllo1OBKz5FhcR9OC2fH9Sw2MnjpQIOla92MhSFoD5zudvlDyljoPaJqCFitAY16/wGg4YQ9XUf2CyACQ6P6Mdvmet3aXx1ruCVm+jGmN8s5y1g0NijJBFOaazwAlgA0N/HOKOvnUapFh/1ma10d9PAbkK1qwcuWgX1lk0q8txSLoC1FmQTKuFju2PW0LXm/6YbbSXdewV2KiIFtbdprf8cu0HdJwq2p7qzc7qHTdg+dLsKYYYlBf07g8zkoe4T5et3vvE1m7OzfE75drvJHAFlaHODA8b7G7F37d8EuXTFpkKyw1LJ9A+z6dd3dBLP6sykci66M2hZ/wG0xyy47zTjbZKPhxO3Rs9oxiIFIZoAix49rubiejNdvuh+ScdYfPbeMFdNrgNQA7NgItdSXZbd3gYoLwJDFaWldWSUHelHDeQuZDmHILnb5ntvpJ+qmGEd2KslWm21EOs89UleDHWN+SeSMPWA6IE2LRXRMCy4FcTsVwwq7LIjmqAObMGRbdSUQwFUdvosOwzH2ywJzdmA1MXacFxuuy7gfs8MNkNUnIftx2BhA1REaDTKHGK6PWeoBgQpt4gofqe11fsc9oA/6vgsrNwOzoxkL/98ChBtx4VpfFaO71prIcTz65WuBOYOvdYdsEtNDtTsKC6DJ18uz9qDuBJbDF0JzfXbI+eH9XJK23EOtSgDbPQg78KXtqDKDwLllejMo0st3TzrGO6t8D+YfDhYNMhyKMkNbrEEwQnePRbC4Jn8pzFsHAmyxH8mqGUMOM+82vy85YxbwDBLjQ3VrbAHTRoedr5FiUXF61tHtwE1Ur+eEgsmgXVE3RssRp4K2Q0DYo7SJMl04qT9bgB414SE27XVr4JLpWY1aQXtYSwZalzTeJjAr4Zn0Znlhb8t047mM2Nti287Wd2fMblitsrC99+zDp4/PBJD6XDNmD4ZKb+vSZD1+IWV0BWFk/gFQiPSJK+NDjBmBHtd1KMjKGC+dtvlcEklgB5b1GcHUwR5/V2PWjxeBNOs1Z2ZmHaAJixdcGTfsmW+ojMWJccuYYVNPVjcEygakmd9BGAphm27+Ucn4g3GMz7KtxcBQalgqVs06tHIukwTOar3InqmscQlhS3zxMyljbY3oOxkYNYjnv/6ZdB4hUMqDQ5+PGOlzs0y17agNht1GnZlWC9SEJTvbCoI9vpyVdr9iS30OKp77bWTIMG5LNlmzzuoPJsoioDHq4Pd8tLvSKZo2DHUAhT8zM6dHHdWX0OneNqsWrPXhtQVLj6Ub40YAg2zvwUxcywrrh8QcQUs83f09Joh5iw+Ao5LNPgNhM2bWfLCFTsyeCZfu8JAZ148ZdLuOEaaNMU3Zsgh0ozgXNN0Cl2jtd6FtGZEJXNTEjNgiXYSEa9G0YP8njhSLjca0APFNoHQma7y131yh41cGm3Y3/zCSLk4ObjWY9+B4N2HjWglYlqETzSLjCDfNItuRSyjRNt+lPKvYavyhsBPJaTDLsZX5CuZyDbMnTBFyVoiljZwb4CJlfFYvPHNmfHQdiTXmzunxoXU8WAN3JJrWs6Drgy6AWlBKGXb32l04D1t/ffD1XID0rVrfY4zZF5Nfgj/AkEk/5tMy//ja174W7O3fQo7ZWw2Y/qwAs2eAr9N5z8hCC1LGBi4qom0+A6ZQY0YL2Bm79Qj42r1/5PMzpi+gDZscsy5d3NWYSW6bE+OY5pjdywA9GHecASwFZwKkdZkUmB0X9/+AxaTXz47zXqV1DZzV2gbhPKr9nIwRucjbyZWRQeO2jamXPgMdJ5t0dWDcHZaaw5yqVvh1Ik2w4YeCQ1PcE5FlqA0ascAySu9b7ir3T4ywa743kkhmWWU1VK/ZBo1XYkAskU7VeoyTaFZJ8ucDhNTQCYksTwddtYOClu8zTmvPBGNHfl87Ll02hw4UW/7XOJ4W+3hD9t2vQaftOyb6Q1zP7AVPsOLB/vt+EfpQO09nVcDJLd9Cl3tmsqFlfvkarr2YelImWmt/HXlkiGCL2t6lpD1vrrYfppk1wrOOiKXpzFOpHrTnrfk49mjHHIj710Gek5ebixFKNTF9gQFfKEnPn0Kmi6+5ZsygBStAtYKNLFRCFKV5SkgBmonw0Al6+SJd5PwnpPJFSzm6aNS/OqaGfnlmnY+VWFpIprICtm7cFw499lluZyDWZLTdLpVeOxv6nRlIRvlZtJZ8daEtyVr1cC5F0q335/YAE5jgj7bFnjct1KUhuDkaboM1c+yzwb6VYOltsVxvckb2wOzpAG47Z6EH/gW7/Ap8znLM3iWjj2y5H/iBHwggR5gonLBUCxOG1fzDkhqvnZQxZcx2rowMuHR7CUhT+/ytY6POy763MRrZ2uCfzEuliBAESvNG9ADJFTsjNxhGZsloXgfhaVvIij/cH3o7xSnydB/uf9gWjSvo6R1icE5ZGrgciSc29AAI33iUq3giXfTsHnXpVqB2+ELtjY3tXBg3zoxjZxBRIyA2ky6Wkp7XwS3BtgqBfLEkYHnfmS9L5MEqRULbCAeNhh1OgA0EzHxDmRoJED0B8fP4encSdB9RCTbYnQY+mtQx4GcjoNIukl7qZ+4ExmY0wmBvWpe1Uui0O/F3rG6zSc9yIPQd7NQBWuaJmFI7dxdA1fbDZ8DzHaRUcimsA9x4uz47g+Vdc9jsTs1tyiw7ZBjHa7poODFitNcw83Zo2ScScKtUb2bwSoME41i0fWkOmx2cOrT+j8BkZwGtjlH0AXbd7tul/Q6/hVHTV8modI7aGIdfpUwZuYr0lGP1i1d3xkVCpFe5Xd5yitSXqa1+DJnujNkKTyzhmnzrXXdmrG1rx1N+ptpNVPxi5CrPiMlk8F+DpJc/mwYh9syOsC8NVJaJGyvLBIhXkJp/FAJqVUwx9LU8OK0mVvUlWf+j382Wf+76TtveKM9a5jS2469lCae2K5Olb/G/d6ktKzDDxzMsTy9o98fljHVQZu+ljO8YY/a6DNlzGbQE6FUCOW+VMVPr/rfFmL2u1FFcDhd7+o0rYmDMfPakuCaOAdww/8CUfw5ZY1+EpiOTLrKZCLaeiYsFP88r9UobtykzGiuX/lUmqmQpYwqFalKqdfX3nBFCBkhLw+saOK3h04oyMzf9ETbtpNlE7jrPnL+/zuhpjlX3F4ALJ+YoQ9RYG1SYtWZOO+UbCGhhHhuJeB/FGZ14mA13zPsFb2AHx9plgg64RwkZrI5SMC7DMk+UoJKzNUvaLMgqp/DGSV5oZPzSWThbahUj50QttXoHY8wQ0VcruHqJpYZsZ99pujo61zUEb3f5ZRX3VCNjkMmyuVcBjRHgj32xFCOhHX7K8u0mHLvEBxsWH1n3o9LR83VrIHzeQKCYtxjIldHuA9HdTWNgHEUBLh16zwvlUjgw9zSXZcXw6ZKwZyX9y+dEjjzCutV50Siuer8Xph8SBqz3pDIlW7eBG9llBVOmTqeiH/YbNiHTZ8yZXH/p2ViyKjVwWi0ksXJyHMAWjv3t3oUeF9PTOs1P5p1O4+/envnd567j0bbzX5HXGx2Xp/vx8tsAZqyzWB739rxnFt7s0Xeao/la4P9T+O4T8E0ZFcBa36B3y+zKNwfu4aDvgdlPXmD2UI0Z8lyyysxWa1uhZT1hchS8nbYzM/ggQJOxYM/NO7NdjVnCLKXrSOzs0xozki+qXf4Au2YWmDWdflFjtgVt2ptOJJG3LS646vGT0+BQeGUMGuEUd5DlxJzGLJrip37DdzEfSO3NkWlzMBsx5IMEzsJ7djAhm8luOclg64CALz93bOScM096ea7j9EvXnzq0NuDTVZ3ZQcG2UcpY298EWWXwa1XG5Xc1Z/HZ0f9fARzHsaFgz6YaVKE++lzqL7ouGqaRWLBDPwElCpZOVnayye3GPXnWhu15DAGD5ys3Eyo5C6SKDQtmpA+MNU+OKtnGgtIezKELL2temi7Hfe+6vQAAlKdWZyYJxMO3vYcIkx3+UmOGlXVLuluGGB6tnQ9NH0NgxnJp37Sl2C/lKQcFYdFc8ArLHj0cFheGzHz5ylbKyLimiLTRKcesM2e8WgZsC2BNiIKdo154EJkGRvPK2WAnEU0aBUzzNLfHQRb/+W7eBij5bQO0rrYl8z1Zh+/ax+9L/K6+X/6svZZhCjK8r3w+Ah8Zy72ykPIHQdtzgZQ/8P7TBIERmPkzWgtmysJd/nOVY/au/3uwpsxPgqT9ikGjzLNTV0YFigy62nXjJ1JDz4BTstxYsdS47bLLtvJFBnkM8M5cGYXF24Gz7C9zZcyy0UoHXaM/1RgzdWXUc0bdpaqgTXtdZlZ930OzajgvXJLPnqGASvOEJRou80mG2SCZeNO6PPegEc39FuafJ3Z6pVIHzT3Seur5zz0Z3kGnULZqubEHLNdiIkvetYs7/YRfDI0gDBiyUUt4kC0C0x6fa88OOnkdrh3oMjgnCAeCW7vHp0MtuqvXWc5HdXNZftaEnnVWPzUG7a6Ka3K9unbkfZEzJkCBpmu29H1b3FYsIG7IGk1KCLXGi5DFYPDOSqHp2h3yvgwexR3tN4twr14AK+GeylWAo5YMKRMIMTBUkGmUoN0BlwkIZJNEF1wFBctBPTmvVx6MiOeS/N0L6+Skk16yURxoxgJyKVG0/4hjKUa1lfsam5WQMqkY00o0rSGLIzd+UdXmoe0W8Mnirs6HMylr2xmBhLGurmyT2Ioi+Lf7AocMs36+ixCbWFMMPLvHa8yBWxLSfII6h2U+7cgO3FyyWwKCAhjKlsvWVyJ4WoBUoe8Kw8XT+rp5G/5E63qS1zIZMZfP9RazzFDg1e6zOzCj8un+rH5AbJOO+z4Cop4D5PyZIOtNQODZ+iYw0zj1vJcfh9VMh23fSxk/o4yZJRLCR15P67NwLmVk0PPGjBnnmEHs6xOglGZ/Jdu1Z7Bp24yzPu0kAy2TNt6ZqU2OWT9mHtH1wvAhCZcGuWGCDEME2JWT+2SpWS8ku/OoPX6l2wfHfmEFbAcxZSpHZJzTR+KqRX8Mp07momzZOjOyi4iLXb7WlxFwsx3SFMRYIZ8NadKz1wjaWIep4S5+etiXB5l+5hjoDrk8nBIfgkWVIk6rkOjneM2Y5ZRlPXK2ifvoe9him07za/7jOiUx588InGpn6GTP9XnK9JyzS0P66Ltag3PW8dEj5MrWJetwXJCGlkhJ6yMM4XVjc87Slry+SdF0lixLOSYmrPTEY09s4ujXYednKcKf6JK4ly7aECgW4cRAAdO9Y+20lplVpgYgOSgrgAx70HlnctKScq0da8Y5Zrj32Uv7zFFgRbPJfJYxFSIzx6ZKJC4DICPhVigDLDzgRqjSyaACyqYlyLI/EsvtbiNsmjCnQKqs76+YqkUmuJl2tb4F7JXzaR1sgQBWkGsSCKsto2yAsj69nVCnwOl2XLsJ8XhOs2LfEsssy59PV0DrTZm0T5Npe+767jVmg65FktshY5WOGMO+FD98voDZu2T0kS13BswYGO0YMZybf5wt5wzIBDjdO/ezcYZoBJKafQiYymzxGbzgBLCE5U6kjbsMNbXwf0jKSEDprM7MeHo/hhQD0MOiTYDXIlmkE5bWuGHjysjMInKZY6m4BmJBScK+GpUyzGoC0jqewVqOlbFnoNH1gGEs4q6lE7ncRWWCMS2n1vggkNasJK1GpuzOLbbCaCbTuDCuRvfFnfd/Nljvj4/G7SSL+XvH0WSMkR8DMNwXGa5VYGsAYids2fr4HIMXwRriEeiwQxQ9lFiX5jAwpOWFttvEdaPCPuRfnGyhPbrC013Pgqx1WaqJe/ZOncz32PfNWzKjC86tzHdHLgZH50vRT1VdyHswVqEgaROTj160ZALCxjLc+z+7kVjitGiBvyohdNqE+4qWHt2RsQxxsdaXZRLGErLNeAvREmZjU7IxLjQGWBlrJpEEdqM4FPLNYLv8UV9WWtlfx8aFmEMiOBkwKkBz5QzUDp9HUjSAzZFQf7QjOKYrIzNmqUzwKX9/BqBOl8/Wl0zzZP52WiJNVIlivc3A6CFN7NNKBGLd8MNnpEB/zA0A1gQkXc54mJQo5KKafayL5V2QM3btkUHL1wF1b5O5e4In5h/hwb/S9fvR8feM2WeIMTOsEsZlejIvrd1KwF0PQ+bx/SrgqwhbxnVVg7ViQIR9+HXatjPwlQCnR80+svDnnUX+rg4tgC/k9vmFTUEIuN0EyCndta2Fw2omwqYjWb1ZpswpwQsjI9Y9lmtUDXrm20tdLfUH40UdLbbGD6o+ka84kVwcSGx531hG7akTVs/G6WQnOyoMO3G0B5wmYZvUk3mshOblYRFpPkr2PPBQyaHSZIZibZk18w9v5ueryb4TWzbT0yqZJGtgs6f3q3la6tr1ZkdEKxRhEM+rdcdC3M0snC4YL3RBke285geHJx8rVQVrOuF4bWhleEm5eMMe3tkvsz2e3BfAFe3qEQ1AGHhRe+uaOS2yTRfS2AVe+OmVFL7rM5OMSd1wzpvbpJ11cch1NPHsHM6gMxGvSqd6SiQDE2StvqyUyIQZ1ZwZRL4ICaHuv8OCswwhl2OmXodRXOgBuu2s4csiRSxQx0UP/BKIb+PYa8t6dMiOuF7ORvf2XYTVwDFlxT2MH0s7hKVIx0wMNCGnhTkBnsaXkZVn3CQX7aayamU+iCxxO/HbU5QRirTw1CgjYcWYrfKTaYHlus33gVHTaSQ7RCZFLOtyfpPP7Xh4dFxM/9xSdcsAZ0ZlCSYDsfZ43dlVjdrrgKs3rWl7nTE2ev80GTPGK1ltwzLClRacvXXg8z7H7A1P+Ik8UYFI79DLdD/5jglA20kZFbAZuwf26WwGssles41kUuvHmF1bbPwz1m1Tb5bWnyUsnOux2NjjW1b3JTgp2Oar+QfLIbskVAO4M1ko78+oL4kd4jj+vrYztLnubkzaqZXSq1oF0/BnzWXm0bTOkJETI05IJqdts3TKru66mjoMUAKxhrGRM+PQatJrX/aoot/wqNkYO2eJ+YcnCFQMDB686e8KqVdMrMJEzjSrix0+uzFa8i3toHsQJcYu4D22gevx/aSc7lgIoYDkuTPNo+bHPCo8y/MSuJycUmTfQEk0l+e8sgZv3S4IqSOKU5YzaK9FgIVtW6LeNeHveo5byL2wTW0myTx9bTXD8bufznSA3Dy0Fr408ou6c74nZgcbRuFZIXDao45uMfbwyKSVx0RL0XlxH5hcEvhURMLYuJoGB22wZGqJ74OLK0G+6GRHEvk8LL/DhcOU813UO2NTa+bsm8E70P4GU+YiXRSMXOh0dCmjWcTTer1b1l1dRuOMKDzeiRJ3pAMyIx2mU3I2bj96WhPmSQ2Xy/ts2tV3eL7f1vfIDDqeTgw7brFGrIhM0QqxZm25UiI4A6eJF9SWQxokiz4dlavfwZk35uwQUJaxZcu0ndgEjxmL4IQ9O3uP11jX2TS5k/zoE/DJHAG6rDPjB1G23HvG7DPEmJ0yZQJ82F59t47MMKRg1pWFmrIEDNQMAAkIYgC0s8j3MyC1W2fGLGk4dwLIkLFTF9O0Jq8Qa9YZM7j7DdP+vksab2zJ39nFzJWR2r/cK8goxCRoemHIkmlAlzLuevxs4kG2+Py59nqzW2L+USmDmUfZ6Ob+SLHwkm32cFWuShWxhkpz2LSxdT5rMv2u4xlPEU+eNJYwaSd9Pn/eON3OK4SFiNmDr/ejqkRKTwDGzowI4dK65bXmDNsdvNeY9dwyCnpuFujsbOEz3XmaEBoiM+Ctiz/IpRrqmZzlaRJifG+Q0UBDAzeDbBO7ierkEGgRQthk0NAZprEPbR39klqMMYxyz+uwx69wCtzmzLT7znqV0OnO3zQkN+6+Pq34OV5vGovM4zUrHiY1zQM91qIDVu+/+3HvYeEVXdboZPTCfeh7jMA4ku2AWMuBm+2Z7evxBuA2NjOYkGRcqFCKM8sUCTB9AwmgXgZGPOyDC0RPVIEJiHOROEZ+7O6Q2t/N6OkM4mWWIdHAH1BZYzbIZr7ilADCgDT52QiUeRWr/QbMOundwRlj3/FZsbIlgFBxegrMPLJheiYc5wYgISGbpz39IaD8tusarl1dF9ejleR9Mi1l0kpk1XYsGMrKgJ2xZ/xX6cT2jDLWtw6wW2YteI1GH+P57Sto29WdnTFoV4zaMs8e6C/g9WSOb0vKaMAfeoJ/NAXDpnoki3JGKoZORPtdyvi5Cpj+yQDMlClLmDCVEwagsWPSMJSMCCxQBxQMqJQtU8YLibOitMkUBOk+Pypf3ACwHZhLt02MluabLbb1ZnarEy1ZYlRStOZMLfexkSjKspkpSFAlEVh2YS+jlDHJJjMdiSejDy67YkyzG+7y2p4FvnGSt7WeDB5vvjqOlKqyDHmgsz7UnWRgph79hDZ3tpO7sDUkFB94J30jpvfUeix30s8ioaNtpbozYhEpogkLuZ5shksjZEzV7WPNwEzY3FJv81Hr6FwPrNs78S7MycgwQwxejnijMUU+8rDuGVytwz6Ckzlo+p6H5T6dFYcMzynAuoMr/mlY314dIGyELvMR6I6G5s3nRVwPQ24Z1Tr2fQ7mNA1y+WSnBqQyznibpiEDSCFguQgG23Fi98U6os8IhLR8tOX3FE4C9cioHXOfbSE37uy+U86cofoKFJ0BNYvy+Jj2zuTwaPdofV9KrDWDogGh3G29ibBrIgsp2TMxZ84sVHspKDO6brnGzII+MEdIemcwAWSr7FLUfYjqbliuAFTvjCUirL8n74wBvoq4L4pUkbPRrKUvQCWNZ3JFCKKjsPexE24rcPPN+5BndrvlUsYLO/qrWrAzS3pcWdaX/fTMvKNSvZgyZ4EpK3E6a1M7RdrWO8y4bGPUxbVmkHozYc/UHKSeMGX1GUDtTYDe6zJmV5LK9np7gn1M3LPcNVQ8fz7Y+blkzN4lo49suT/4B//gFphlQE0B1xW7dlJjdrktWTbknu0AGtvnZ6zeRoLoJ+DMNtt6OPNMgdoO3CbzrQMyBq+y3kLHw5LjG6FFziraDoDuZIzyaNNul9XkjlKrsGa3eHcyNf5QcFaJqrnNgOmEUJuSCJe4L4vW+QPT8DjT9h5G7FVvYBVnRudcMwma5h1ibSZLFrch05DaM1uL8dIYsPgYcOKuGHTNB1YNDntOqWSZfLHCSEaFAdEgfJuCNkg0tdH2YmtBfBvgfrRg6PuxqASMjRR1jg7KJuDxlpdlbX4vsvKedtzA3B1MjZvdvc/VtLEuAWjMAM4wagyYClQ4DdF3oDDqrroBiRNkGOyPNZVsBylGdWTeM6MHYHCqnXMjkGOzSs1aL7qOR/ccrehMHPpxG3jnfq3VBmI7YKrB7N0HCzeZLg+q32lvbwTEJkAbLOCIGbAgP2UCj8/1PMb9eiFGboQhWmPi+JzarEkbAdOqk8OsmDWLWjlOOO634dMRHgQIZHLrtAB8bAmdLiJEvMFGnmD3W/TUy1HfszQxzzXjyjfPtK+ZVBEiaUQEYraJ/wIZfnT2rCSGmJrZNvCygtlbJoLeM5Kpf4LJsRpg64g2lCxhtKSVfnsBLzXafiZ1Yb6rBdswWYvl/YbtSr97O6kZ29SLBWdF2zBlJTKHpsYfZdxbh3Jf2TAuqyZwFurMbAVgV8xZAGT2GFDDA6zY1fTn1qVdsWa4m1G/aOYfRr80SKG5R27YLFrf8Mitvc8x+ywxZlmOWQsn3tWdaabY+NyytOLK7kxPzaSN3ZKdnBk1x8w2dvmPADQ7scbPAqi3rNoGkCl4DcdICbGTz96kjKDjVLqksTNlZItfOpCSPLgswDowYeLCGD7TOfcmS7oaHCrVHpDbybdc5I2uaEveqw3+aWa1C5GkZrG2kTKm9nWIK3EJZLPMqURsJTk12y0HZGr0EaSMnt/1DQ9lmWEjHARyE/tYRwaJkEaQMnZhYw2yxhqg3aw/4273KiBx6ZQfR407qnljsDuIMjSpG3IreyI9Zoe/nYcB1KKczMMXJmWnMWerQT1JEuucVofO0GCdVeogxe/sUwxHs6E8Ccb/SZhy1CVgOWbmMgvrWIt1yWIlvsQcVj1Ea6/fIiap+owKqJPR6+ubjFxdc+OyLLkBqAgIuy+7uh4XTrNjANzObA+X1oBopmrCdEtKjzwJ0NobgTDbVahmrhA0KicM2XRjBAoKyrjOs4DpmGtmxJhl6WhsUmK73A07AWe2yhNDfZmtpAqIaLFKYdK7vfGIn/nUZEDMtSY0y6lk+s03DoyKKoeEkYDJKKK7/Wmg/A347WfMGq4nLI6HanPvJzVguF3Xgp3WiRVixfRzWef3ZYxcGHeGHnwSwQ6V7fqrhlqo9MDW8UdmzbzO8UquN+ufFZApSFsGbK/6CXbh8vhMFu057/EY0/bXDfjTzfzDNmEkYjXlnhTXUoKrv/sMFz6/NWapvE/nKSiRz2dh075xZFzaQiCuCrhzlv8p4CLgk9rln0gbnw3CHpE8Xljqb9m7xNbezYwBGqierNq9Uv7W57VDeCZXdJJPmk7vAExy0JaaspN5peoAJN0i1JExgLFBj57f/fyIBFIaRJkkeSjxNQAZd2w17oq/aOL2sCTg9s62ujLqDgiVOCg9rK6MQ38pVN9yFydnPx7VV91mkkmUw7YVaqynZQoPK0kQ1ccxCiFdxJNI88wsEVzGBI2kw2u2LRbMM8F2pO/Ft3dg6JHt4g2S1N5SBNu35B9fbjWHrGc7swRyP3f/r+PeJnorlqAAF7qGHBdVNweVMJL0MWOaUkanJJxWr+XEprbMQr5ZpSmG0uS5bAgS3Ro91JnFoIKySBlz09pUFUg5y7voL8vtJUccWOGMb58qU0i5Hyw6QUIAWpCICo+wWuUj+n8AYhuZ7Mxio992ABXA00s4bov74sJeab7ZA/VfZ+/PWDCUa8ZsGHp0oNaYsVLOHRehr72u7L5Pvfwg+Fkp60XzOzA7NNvsqu5sA8oUwL2pqyOwr0v7lJi2GxwvJzDb/fPMXNVjq8G9rffA7F1nzHASKK2gSBkrxDyxpf6rgQZw1pYANDuOIzBqND2V010ALBf2jOvZHpL07UKoeXlpixP4TEGgBktvDESM6sY6kGXGzDqjpvPErTFY5GMNoF7OKdeS8Xs6bk6MWgfudYh/HEt5lPnGjV7c5dn0wyh4ehiCeMxjXsw/kGAc5ERXas+9Y5zUppxkZOtOkB4DYvxhhC5xm4L6xSYfAtjoPlulMI6LeNRqf7tjsX6nLvCJfRXvwKsAwyK/eypWmm8y/skVaGwKEiSAEvfbAVlNnjw9XcNQowmgR1EYzINoYzImhFUDWOgmFTVHXr5jvsTIY8GFK0vlCyicvwbr7SZQYqEuTOAKM3/Gx4EYRF+NzqPdxwOZ1YlxRdzZWJHkpJbh0vM4yFEXZiy4bO6wcHLsbJhfTgaNTS1ANYOehYwrs1WUeiGwVdjq8iZUDYOyVTagNYJZ1hqnioE4vg7Epnwxqxq7BcB1w42WBpBEWMekshiCkEHpFIRJzFfq/bbJaB6A7JhqQKuRqCx0ny625pOZrQTn9kqW0OllRwvowZAxZoI+xw53kHNQbdqtwvB/ht9+61oL9ki92NNrMGK36JAYasvKWjO21IvdVoAWXm+TIawJMAMxhiSJdLdZG14jKFMD4iF3bI/NwwWU2cw6W+rONgAsc3Pc1qX5SXzoW2TUHmHawjKGP+VAfQI+XB/+dmXpm8hr5oT3wOwd+rer6dq4MS61Ytl3ugvXBry5hDwHx0FWHlDGmS73qF3+IrXU942dW/LPkNeTndWaXQKwMzOR5P0i5zSz0mrOhuyz1rtokCiyhTXkfVJQ+YzrhOvcAMmFk2FH633examasEpQ+HX8Utu9vk2viekHDgmlRDQtrCJh3GUzG3Kjw/MDIR9G4Yy4MdYuWeRatNa62ovl7P4ahgoxw6b5qQKuQ0tusq5OJmfjaTGFyoNlu0kCGQYg0xozD8JFBGBmwzxfQRqgxvu2JKR5CiVNBpKeTSB9mmzTybr1BuaB3avp8vV1N5mAmfr2duXND/jFJFvAi7/eyVPW+/KpnxU2EWMG28sag+mHgjJfuL8IZAuQcFbW7OttALIyXBknqeeLxUclqaKNgOmV7fHAmsX8Mkt5O1vYMzXiCKHSHH1LLGTwyihCPBE1ONIKiKxk48wTqLQ+jORzOiCn2uCClUHLrCXv4KtpRBrqKLzDN4fjr186H57VkZ2xXHiQATutIdN6MVut7sefUYq3WGwyFVpLZBC93MFWwRIqvbBbvrozutjnZ8xZypbZWq4dKgVeE1xlQhU8CK4eBmFI1/uf2l3U+tG8QJ/TlcukQPb2gZnWhL2FHLO32r53yegjW+4MmNVaR55Mf891U6CAZ1DtltR5Oa+H16tGFcdx0I3emJEKepHEmTAFhDsAxyBKGC3fMX/UlgxoPvoezd4+AKRNGzlgujBQ4xq9TlY1aePROq5l3OOIedP3zEIog0dt4b6d9jaqLDOGZae5gCicsxFwj14AgYyvEZRxJNgyKubpCFPKoEHaZNktzh/p6HnSU9FsMQFtqcWkMF2L2N3XfCwn1MkUoEabuCeaBo4M9sBT5ZINNby3YetRw7JOfFe0ZvETiWLPLtsd8j5PgdnzH0jZCCKaq6KdLXE+CPnM9eQJXA+Pktyt5S+/mfExeAvH7y0smy6yhKu93mr0CEgvPB0/VmDWTT8GXeNagoXo3Ifo0LoJjbPAi50BDBP4dIdZR5juZAqCZghy/+TBmXFFSNF4XyvakEIdHYJbCCffMFGSX2aszyzSv2/4IDP/sJQh3GfApQyfYMbQt9Vcs97gYidbKkA5JGy6s0ed9cL/Fbj9bvjNFhYLVzVj5QF2rCQ1ZJozJm6Lo1aMc8mK1JQRK7YDanVXU8YA0YbwozNltQiLZXFskvPMOkA7xAjkEGB3JEAvlTRe5KDpd05z0t4A1F1Z8yfzDgD/NwdwN//IHgzMnGUjtJZ05fw9Y/au/WMwxPVJnaThMOJpEBhYMFeTEDIKAa0HBOSGfLEzPw1U9dt1t8cfy7R2VGXIQG6N3L62DyZgBxuwhM1yp1b5ff/O3iMJeE4cIblmi8O1O2PGbFeXKXYjFg7pvrFMtNehtX83Cuy+IRqpBNt7NvtoC9x276ndN7oT3NLMYye1DyvtetTXrSG6Shb6ZQVnfWBSMcsYOZM8ZsYxbpG9A8msXKaHf+omx7dMQ3RbREINQnSYnKCd2lLZJmCFCuo0rZtZM5WNpTIGrgpjg3qE92zdwW6MHW7dEsZs9+iyBuW4Fm2KDJ2Yhe7kGGV4CzDbkirZcfBzHomt2bst/hlT5Jvtu4uzJUJJdjDTTGRuWzlk8gz2tcucgrO8Hm/tbVsIJ7i0WT5hqzY1YRtzmnC0wkG6qvlTjnVdxOHpKkL9WtDEqcGHr2YfQTnkkTqyZNoWoGWX8ZREruAsGoaoa6GTlUif6onZhwnMscSz0E/YXwh26QHP4WdlAuDUM0Nt9Mknoh/GYH4i+HgHzrABZ1uDJ1i0xl8SsjdrH/RfZ8mOdXn7AgD8p/dbWcFdmvhA3VdgtG4ny902nxXcGQG2jCm7MPWoBLisrGdAWbx+HNo2/UauyEYDq7aRFvr6p6zZIazZAtQgBiEZg2bnBmKpcYjta9Sem532yHfp+zcD/jruV9GH+8FGLZLcSQfsMwWkPvdSxgup4iQ6TqSEAuoCEDGzADSImarKrHWA189NUie1DK5LOPJDzBpy18blPda8sQUUCpBaHBvp+HnmkijultaNOFrH1Aj0cs0epG1BvohZC3ZqWrK5Rp41oA/yJbTNmM4AO4XIHtLMWQNfA7+wJ3t3ZaSbapA0IrJiISLME8d5T/p/dsJWcNioC0CrPtGlmn2Egrlj+kOPHcG6I6q7GHEDZDLCyJJdI5mS3HRLI8OlNhy9rowzy6Klx6wts2GJH70aszqzGCod44adWuML8Hh9xuzz8e/d8gb5VrfmDbbHjJmRCUihmrL0T2zzh/lO7sYYmep4q5kGHi5SRlvASFZfdt9iWXg0DwBsl2u23h1KAtBODT8ylgzkwggsqMrYEKTSdN9Y5ZN5JjZMmZ3cxotlfj+cPG+b4E1xLuEQ6ZK4lwRJIn4UsP8Yfvv7Amg6Y8qCO2NZma4AuLhmbAfWblITdovGHp2GKicMGeSzE2BbzD66i4vN8cYSa8QelTKydX5Vq/0zI5AHbPVT02c7AWVYUzjPXB35+8DjcsbN+n/Ygf9fA2YfrCDMN1qTXecmMmrvgdlnAJgpoEIMEl7AFlbb/EXm2NdBnauxTK21sqU+AT0GDlXXL7JD38xXqd4AYgJq7Io9e2QaSzUT6/zQwTwzMUmYQVeQRHb6zuyabpP/1PBFgGrW+V3A+CUw82SMnTFMJm/k2rNMASj1aJVKvBbgpTlllVzO9Y448qBwYTUvrJn7BnUmNvpwKaij+V3KCKxIEgniVHvJ4PIoidkWg6Z3DwEAi1SRGZdeMVYW/ovBmwXIBqlWm3Ozre8/BZ6r1nP52mtpEHOnytnP9qSueuccc7ZNFTA+50aN11QSJvs28svszbbzVhq7/9ZiaS4T4vI72aZOd6S65JLQNAv4ctHRcfqxJwDFl/NgGxCx2n9MBrPIfm1gAAGzWXl23/cbog4TG3A2a84KCg3a5G6ufDOxbCCeQNZCPJU5+BZAWonAzCjrmyPmtjiZmDXttqaurByiOZyCWNfOlKCtDoxDvpg4mwyHRXwEt798B2aPGHiUE3v7kgdBd8BWNq6K3dijUiB0ZuhRNwyZZpQtJh+0z8LIDWOuVj+eZpLtpIwUNj1yzTwHZUdb10Fs2nECzLKY0AyMqUEIcC1zvJQ92mvJIP8S7m6MeIJ9OG+GS6C0Cz/MTla0jIEDUd/nmL1D/5hxEvCQTVtqrBh0NUCSfo8ZN3YbtJFwisKyPAZmmM76Z2CKQZ5TO+wMUHUgk9TQvY6JxwCHmZRxU0cWHBOVQfMVCd3a/oHkiRnoC2CamUaqSwtSSgXQSOSO3KOR6USu3Y2lw4CkxzoEF9yyRBdpKEnvJzTmrGOZKkpAfgio+g88CmfxlfGLuuDHQSiPyG50Fjk8usyCOHZiHGMLWcC0R0CmriUVD1YU26bYI0OcLFuM9+/VBMQCeOvcVwk5ZiZSxvXRw/HWGPYhbAYSu4LTjzCaf5zaz7tkai3LZdKOdVqwInEXoEuU7BmDQ9dLZmzymDn/DmzveSILtuDJ89m3AsCH0wL65bYoRmkl5x4ctkhVU/Ekn0/3FLQzH4UNT7UeIJb+ao4ZorxNZY6e0ESho68j05aMZkdpownktADRMut8Bm6cOja5pm4uEpeyAM5sYfAyO43V+CM1LlTHQzUD4ZzmrO7MJ8YpctghKtNCtvkaXQHBy0ooOMvqR7gaJBkbskPCjjFgG5/J2cSadPH+7weA8t8bQOZZdva3Z0gfhTULtWLW2LasXszW9535qpZb4BshagZvdP1VFwmj56AsPOZcasb72KXP9x2cuQC0nalIahKCE3OQkwy05amWDArjARYMz2DN5jV0//cE/4A6H9mz3TbF8Nq6cRP6XDFm75LRR7bcWcD0FYsm9VEAyRczkwwCBZml/qgJI9DDdvvBgl6B4Q5wSRsVCJmaYBAasWz/MxmgsmRyHHYMmSWSy7T/wkCu57tNo0Ybph7dxbKHQG9kkgvg4kBpPV4KxpJ7hiXTymGEVyDujHK34UxmrivzWzIExQyZrcYf4b1v8Ixm2fDIao031qVfpX77WVaZyzyTojnzu5RxdLgrPRFq8qRi0JXdvZMdujCFmNHLs+PKFvl1CBMnG5a7M7LCtJKUMSJrtQrRyjYFjnW00+L5q/UzE+P1xv8esrD353zhU2vPZyleLX/ql2j9V1xMQGwTPu0rEOc0Y0d6jkygF4sGS+OrDqhc0ci6A8N3sVJCmadxzOtnF+dF23obYgA7PcNFUPoCyLJCur5smSoFa0WqoWSLcsuMTkcp8ZQAed63ZSSflpJBqLTUuSRZeJAOzJrVKREcN+3BmAHA/wNePoLfvpzb2Yt9fbCzL7nBhxp6uLBfQarYv28RrGXZZcyKHe2EWEJrMjgsbI9/34aX5nXCDBfZ3vuFlHGwZZgyxiFprK1+jNi3Y2elj6QO7YQ5qxdujVvGLRlPZuBWpQ9S7QLwxb8PAPw/JzDDB1grOi/ECNnw5fxJvJcyvkP/BHAFtktZIVBdl7oq7uqVlJURIMid/6W+igOnxWBEa6g8Ya4gEktj8Kd1Y5Bas0R+aFlotW5HwN8pyGXHx4St6yD0ANWrsalJaz/nmJkwk2koOAO11s560s7hvqg1hrvrCNECQwhznFbIcm2YiV97IKdqtN5lpV/l0fwq5Vk2F/ISsYzZqkZcB6MSOY+RvpIHsWpt8hEQk6bujFW0l62B6R3bozlIAIojyEkQMBKRlG/5hhV5O71OgFZHLcy07yhhLbtUNCxrzQMLXMRo93/Ha9SYbSHqG+sJ6fPWZRDYBXu/7k64KrHs9XfMRdHllkRwPbC/ezHo83dypxydh/KMEbbXO81m0Y990DWdTcNqCrLYA9KWWP64ESqCasgcuetgjSTTAGgVGjBtAszWCi0Xsw+T+rMMlDi1d7HL3xR0LaYemsdcCIj1aJSOYXwuB5psFvcGto18XjPOLkcbQBbwPtmvsJPMoLHfP+2MtQyzkGM3gNl/Arf/CH77pXu26/Y8a/v+OYCvQqOW4pxotjf4wKwJm1b3G/OPpaZMXBkbUBsgq07CznVQ1VYwk0kZncw/+P221uwsgNrOa81U0qgg7jLXzF7PFORMDOOG/wDAX53AzH68m18/LntwofbHlst7YPaO/dN6oiswwWDrBJgp2FoARwKOkMj2ilje1xPWKV0nojzPHjQ42QKpDXumeWhbYJbJJXeGHA2U3ogh7L+uQnLGvl4+Vp44UPpu3/t3Ie6QYGliwjyqEQu9lnDDEbYsSAVdlEXMiglF4930qsrNkPwz+q0nlGn5avZxp2hjz825LbsOIXfzTKjAwV6RdPFQLabspPnUY/IwH7CpIDbaIbnpcmK3m+h4xi+edsuIL1tv4dMf0YPYsCxNm5JGyxNjgtnHypIxk1epKsiCM+Mdm1ZsxgZOU68864i7qypwXduSM33iVLhtly8Szdehp8LvhgfG4u02aee5K6PLiEpdBiJm/Y219+7rgfPlsPlDx3VCFAld8JPGuh5b5Bpko306vWCK9Ow9FjhxPRk0UDphXewsTNCFoTojmBgWMZSyBRdyjllWxWbbaZOry2WN999reeCKZWYq7JjIHE3RpiDSKzt8xsKKkyGnMeuOLvfvfs9O6T+s6DKkaEsdWmjNE5/2PwIvv3SpD9uxZkZW+OqaWMTWnk09TOvNEgZtZ32vACyrJ0tryuKfu42asmDSlWWPJbE3y6tH6/zOoAVnRg2bThwbj4xFSxiwnZzxSgKZ1qUlgO3Z1vuGP8y/tSf41+89mCLWzNtRKk/u1AHzfK5yzH4SADOVtZ0yMBvW7XJea4uCtirtVHmhJ9u1HZDi74h8L3t9jn1+odBn/qzHNZUvJu6RYRoDWgJsAXC1+TVzzsykjBBpJzY1YwnAXpbziNLvUka5M1RP+mPdebHdwEMSGiJb1rEMl2UddQ2SXgAZonwxzGc2rW6ex9zpdtJnjtBoSM1Zdpslu3yvVNNA1F3lRoKqlumAVaz1ZEoZ9qec5bAk2ib4ZrTOEwjlweyj0qh9N8C3wac5OTM6SRvncVnBSrfSBwG4CNIcwHHUpdN9CXTO0NDACbavudoVSj2AslJj/gfR2c7g2C+adbWSLFUgg0ixY65GMsBZ+HNmuL8cPrEvt5Ox3pX39ctw7ecNxxZx1PATpwlPLPNB+rrEvCfpK2Xwaa0h676Kpc1zYsqixPgeXcFixwhjPFStlQTu9XatAdPqJem4Bl+yM0EFGJrm8trNP2xzSpAnGZi875dssQ27zIVyrhTgzu9RmLNQe1YQrYNLBGbAD8DtXwbK00NM2PYz1X2VE1aNmTJ2UMyMPVJmzFaApvVomVeot9qysj53U1Zr9+eROfMaGTSWNPozmbOFAbsAZqeyROSujM8299gzbS8B/FAEZvjb13fLx++o7xmzzxgwOwE4wOrImNWV4UQaGTLPpN4rVPYI0+YPbD9towRFY8O0DUMQnoc8/0xZOB/uGsm8pB2nDo8JEC2ItvhV5kFYLCQsmDHbJSAVm+OpNWVZbdl0hzzpJzGpFD7T/AWUFWHXapQcKJbjuC+XzDTuMyExU9vmVcHWyl4Tu0gTgGaSW9ZrEQbLVQV0bbSZTAUuO8Y5A74Rb1ngyUwMP9jGe9pzWBAiqgNjxMyV4NMK9Rio7WrMMiOH2CpLHEMTNz5xJRzzHXC7ilxe17daNazbSeV3J06BW0mkrEydBx+SB75JMPN5aWJUyuJaTBiMFB07p+YYzL0xADTsDCf3UdsexHjANvunlAi62Je9YJ1nnigAOUoDa/B0GAwxMqHZQwCWK/ow++gsdQbUOFg6lzPaeOVw6VXOaCGA/uK3kPQJLcM2RW5Vm+Roy5wYXZSmTmaaiZkin4PtgBsDwrRje8KajTyXDlpkFDHWmAHAX4Pbv49afmlgvZj5Mq4/S9wW1b0xY8p2WWTW3DkXYGbCjBVqu7BjMKwB0iSf9DKzRJkxq6vs0M9YqUTKWMU6P4ROo20LFD59xpg1Vu1I3mc1Z1cGIaeWV7apPTthzzyCwT8L4D8XYIZzm3x/9ijV5wqYvUtGH9lyGQg7A2bPAG2prBHR6n2ACAJiaviBrA5M2a8M8GxYtS17psxaYvt/KXU8ywg7CZxeJJAZKJPj0MFraTlvdRMdoJJG2+WSnZ3fZ/6zrYzM423DqKzKE4ZM71Z+zIFOLiQOeKWu2IY70FArf6nRt0yVloUJZ3DVtWhOXE7GK0kcvYqHbo20HxiBeo4o/YiyNt+HSnoidXMCZx0SxLqxtfYMyHTz2WOqLkb9vqwFoRtoFIbrVBlXa012y9ewZm/7YZOz6sQxk7ujH+0W2lGD4q51osnNzTtItsiqenD7a9ugdXUZYGSlGBp3JsnHYEWF3e3tfUKQMdjvK86psLvF/wlDZq35DGtGxVNtbYbJiMl9g7HdJufWFsFMkAjzcSagF3LrPLrmWTuuw5kz1FQWAvdxDIc9Rp1sKvvxBW9zFDEJvWJC8aXaPYh7owKyiBQ01nlHxUZI6Zi1YXFt83Y5HRmdQqY9kTMya7YbOpitjm3HZtgnHagvsxIm2L8dCXNG9/6RXMBOjDeqqjEx/LB4yJd5vrmP4wyUCSCzrKAOs+jNLaECAzCrcPvD8PJLn11jFurEkryxQjlkrvPKrBsbrJg4LgY7fCNWTti2DshKmcoPjzb5ztJFck/Uv0wWONJiELPMsrDpUGuGx+rNwmN2l3N24tyY1aE9WqP2GkxZ//tDbRxUgNlOVu8PSgneB0x/1hmzEKyM1azjSrqowGoBbrJeILo07taVsl1qwKHLZ4CJQqzZ6n73qmDw4XnCLPVlOYsMyfdNXBQ7y+jdJKXLKMk+P8gLxdBk+/rovOROEKSM/WbKd66eueqJ6i/MOxIpDNUi9OJxdZZncMaOTmw8smSdQSLCPFFgsxyJGTEGYZYxRQS8RrV7pQd412UWeoKxjkPe645ADENgkolWF3bAAxiKNWa5hHE6M7LhQKXPs1PoiV1+DQLItcYsL6Feubr7fykwU00c79VZjdFYMgoOd/g7fb5t1Xyrn/0jSkitFAs/rqQmTAV+deE4NtuSCU4gZSnV8tPdkrFaj8d6x5Ql6zs7tOt+T31vlDXOY1CXS4QjD2RrQcroK2OmrJmVxKFRkIEMUaU1UAtIw+C0mBlTxd9NOntlTCvj2xYcGJk521dtrdLGlfZyYcMWy/suC+9mhSAipt9CdYdkmk2+ZjBjhXxY2KfFFIiR7wq735sTMQoebMh0l8m+G4Ovfg34vMdbR6E3uv896c/0B+Hlfwq/fTFmjWkG2S0JgS4rwzZeJYfsNJOs7e8hBh8QeaInrBgiOzbb1dgyzSyrJDMsK2DahjyDABmiVb4LQKt1X2uWujRe5ZxZrCTYZaClbX4gC83tsbq0Nv1DGP6YXkRPZ1R1/vTayCP80wE+73PM3j4wUykbAxmzKCeiz4v8rc/j72zMMExABZg1m94aww0yMx+x7lhoZpIP6yqBPAVRmHlprEzcvQLimsjLKHjsJiG7OrYzR8y2f8r2GYMxAczsMKnCwNpq4ap+py/D32nLjvVkElIGZovgzESChKj2q6z+APaWRzb3oHpuXOhSCsvZZUxccclspkpa72M6aiq2+YvuK9FjWo0jquNJwxTgRhPBQGwMLZIBRG/H0kYXCCXsUoBJFhwY47xZCTZrzFzKSHbl0CCA5inwsmD+4EKz22TMviX/NCkie/ZtBF3PqXW6WPYzZUNPFN6zyvEerRX81NrdgNkAZWTkoA4URXLKdpLGE8FfFBUj8Fpq9sHsH8Mm0DwPdxjOMbuNtdim7owloJqelmfTqUHGRtIoVvYQTAPFQ1Rb5lRjVgDcOGwaa6Rcodo2ttEfA3nyhDJkrp+alr2pLRuUnxbPlTjCmEsZAeD/Dbf/EF5+SWDDygVT5hvjDmXDQh6ZgC79rjJxEDdGzS3L7PIxbfIHYOoEGht+lFXO6Dug40mdmTJmkm3Wwdlprdmu3mxTd7bILDMm7KxO7oxV2zBnybz/AMB/tgCz78G98ixT9QAXgIzUOAXAFwD8F+8Zs3frWXohTdwAhUwqtwAJlSkmboVaI8XrLQlT1jtmTuBpTEvMNXZsHDKwubHkv/yT9Wk79Hg+ZFByEhHA7CAvG0Ki2/6zO2Mhdq7b7DtWx8XBvvF3nvn7WH1cPRmF7zImzzk45+ccEVVG0V8HchPDtFxLwJmST7uR/EW2OFKxxb882EoywiSBFadn99A0L2IbaclOMHOW0TRC+23FSZnxR9zBeDoUtNXBoGXH/Kz0OZMzulS1YQGNcUoYFAKCRG2AP6rzmRiqyQHRZY4+v0bAwIkvWGKMlzQYLpIha087cYhMQIiRVBK9bb5RVFFtjg9qq4iFvC+RxkjtMiJE8M28rb9g8JmZ+7/W6DVFgk/wFocJ+MA6qeBODFnGgMg8zxVZCZvTbesk4lqljIs9vs9O+QLObMqRO5OS1LJFAW1kyWKemJPIsV+P3gAWyxcj3JrTMufFLGA6WoxYwhLxNBdhZdHr2sh8u65ElOUp2fN7hC3KbZNQILh54fOKADACbvAkNiWAMUfqj8lATW30mUXzLiVkqPyEhMr/vfDyx1MGbNSZCWDrtWaaQbZ8vuWui9hY3iNzXzxxXsRaU9YllJUGQIMjo9jku+1rtwKA4TxSrTEjZ8YuZzw6u1YSxsySPLOEMTt2LNoDn3d2+XUDwHZDmGK9/3uzW9/TT8NGBvLI8JbIHsp7YPZZYcy2NvnMoCUs2ZV0Uc05dt/FZpoaWwzQR+BPl9P3gcFCrG/rx6QzWwvrl7CAanJS+PVMytgNT9gsBDObjBksZsoCIwmRRkJCpJNeeSppjIc3dV5U7vvstfhO2aV3npLMp/qyBet4lEewkaG6MgbDQnFqXPwWalJXFnrXicsDm3lUX+WMI0EVUlfW9XWUYxbE7XV1XGRWrAoarYnEEZ6ye9xJj6DHZFw8ExtaSCljAhPEmDkOYr/WkGlvRiEubBoCo5Zb+dc67a25Gi6CNYwCqmm4ZvDa68RmL41rtbrz4P0U+wB0DBhGGgGy7HWm+ud267hupM5q4Dhr4KXtucc957xi8wYkWt3Vfd4RqYFRjza3M77XrwCbmWFJQhWdoxWGjm+QxlDhPvH8ML/XePV9xZ2CH9JLo6Q6I1ElXyUsV2Xo4u33Y5h1aP2HHAWqFZrKhV4r6KJxy4Kki2aXqVtjod+bE9rg397cR4WuMerZBL/YNtus0rL3rdxIwti9HE2gYAmQL88xW45WaLeTZJC/ZiY4BohOjZtsszEQR9lmWmNWIIkFJqfJpA0yqGBZ7l5wBSlINRThi2UaPnUFhUldGbNKlorO/gQq/hJK+a+mjovbDDI7MfYok9EKNWTquChOi9k8tyhz5HaZrc6PpUQb+yKPr5O6r8xCviagjGM8lTGrNbJmAwzSKwMz39SchbozO5EuZs6M7Dz5AKN2lX3WlvmPDfhTKTD7bqwOuSzpt8zhzPJBW/tsAKm3ur53yegjW+45wOwN5qskUuvSMunkmZV95sRYBESUDmguQrSXejS2u7/6I3C1gKxEOsnyzLMMs0CFtFq7Zd/V1GNzvIaU0cwKMY5BY0fTPQoGA0izM0BGy5WqKj/yEXABaMa5YsQKuIK0GmUxXCMW3ObpZs7gDcjt9JXVy80/6NCo9786MQZ6j3bMTSQwZNihGo5+vbBeU9MoKzbFT5IBkI6XWTCd4M6whVqzCaUKuTJiFfNQjllf65HWk92XrdTFm915E34hdvj7/Uo63QysVEbG9BRhqXGO+47wGs1GmNd9uQl6OksXgU6NDnY7P3rj6KRWq+ORoeQ6sWiuJQI4A7zOOqa+/2Y1P+3GBWphxyOiHWCPxx8iRPNw9UzeqbbjfScxKZNCTcKs7SdnVCx9h3ZcrTOcNVj2W7iauktKN3yp6r9C4LTm/ZIgZSTw1YubFFhwg5HlX/k6T+SNfOxWWWMEXJmtRCzL6tdjGXb33qq0LAmYZnAGCZCewNekxbbEtQUm1SKjbHzpauB0WcUEpUzGjRMJuNxvQJ6SYGghX1m3EKYr9gqWqgmrHCi9voMkSzdxLuGte9ndgv9t1NvviS6Kt9WVcYAfcWLcZZJVZchsY32fJIA71ZbdCnBQ6HTfn1dSV1ZaZbETMPH53K0goEZg7EzK6H5imU9qGWXMHgqdTtwZA1NmiTujJtg8Ar4sly/WjWwxBW6G//0OVzx9Z6Jh4A5WpgCynQzoUwA+73PMPh3GDGvd1Q6QmSyU1WsttWedDarUAK7Xiiq9FYxdbGMJPL4P0nrGbgU53+u8qoQyMR/Bc9dLDN/RjwOzfnJerAEv7gFU6QkUknwCs/sBVaeQfNF2rBvWAhx+zAYpI3Ny7qs+zRPgwcYgXvL5FWuMV3Bi7Ou3eTNXiaPSgJA++tqLc5EueuKWKGNf2Q6EnSHDjiqgawfKFtCYSXOwo//Qve2iZDHueOQ+fHmIWNq8mV0WvzUfSx7YMSxCSBUy8mh/rccCyuIJTKyCE6AUgJln6ABIA6HZzjA9rll4smwiV+/tV7lRqFjoTO9zvSzdkyQcmdG254VfIfLJz5LMdu3YDN72Tn6V3e0yweTUhnXYxfTdsR7AzEjO6PHuGOSN3Kn3FfgiYawNNOxQhRuLlV2bxKxQg1ZWEUH7xdUmWMzNPMoCznZbK4Exc5LrMrsZTm+JjokggkdliwtjZtNXYtSY1Xv//4ZZN1YA3GzNK+tKUy75W0SZnFASrgsnosyTLLNNw0121IUtGw+wrU3DvwYv/zhq+btHiPTiwEiArW7yxtJMMsuli4eAr2CNX9ZpplJGW2WMXu6PryKAzEj4UaMzY30NKaO6M3pinR8kjXYO0C6BGTah1Lg2B8nq0TLjj9QgZM7/mwD+wBaYfcfKbUdg5uvNlkdTmFkLHq3vpYzvxL8ze3StGcvA0Y4VS+Yv03U4sdebKWOm8kXefsJQFWHEuE4qKzjQdZUGHJd1v8krSRwDo8fSRwFHxrVgxAgG6WWXRDY2rJK7ZOmSzCyHLLBbUgPYz0dSG3gGDvm3c6uWdNiUZNoRTjU5Q4RxhjN8kRu3RVdFflCk0kpPamctkmOLFNM2VNvo1ZY9gzbowRqtldn7fzzVkFcOnwG17H2iWTDElDnOVFJ+K2PG+BQdYZ4T73Yl3lgbahsTELbvd2+VabGkimpIiMux1vGt1HPrliXtUp74o8blmb8z44wPyeYiy/1+9NxEjhkvE68+mKAh3wsBYSQzDJPFPdZJ/thb7LSvztNqIwbmdIzaL88f2HUSuvOI2CByJ+BpZ01UvkYSGz5mjlleaTJ64yEDoDFcY5e6KqGxaOZD+ukkz6yVCJBKV5H1Y93ZRXrmWTmRKSJxZQTVnpXoPKGgjdhQNoOw5J1+mg+FQr8eH86oUeZ4CwYfsyqtkEQyC47WWlMsDF4EKvFS7bseDAv5NaP9NLOMnR2tEUdYM75dPputr+DfZ3ILXI+2rRSg28o4jwt2k5wddqDPu+26Xn8b1X4/rPy+Yd7B7FdgxBJrewVoWV1ZTQw9bGcwYsKuiY1+kok37PELMVuJhHFryPGolBGr+cfOOj8YgZQLA5ALS/2lJszWsOnwhMsy2R4wB9kAtf8lDN84B2ZZTWSWMplE9vAN8vMoZfwMMmap7PBBOeNpzdmu9ozaYnEz5/LFDiq0Fk2MRYKJRsKOFQYymMHSpdvQN6B2+opZU8bGGeO1sVnKpmXW+eoeqXVjC19CMsSiodhsjILXqDXL2DKRPWb1Z8GVkUuvqkeVzxaM1fz5B3IjrlUCKW19n4Gv4JFh0k4TuWW48OUB7tJDGR1RlTNyAVslFoCL5uSphAdAmVqOBWomuznbUi1kgZlabfMrYs5WrDMz3IRJM2HFdp5Ulvo+zrPEN4JKnFmXJt9/e3TS6tTY18GOTFDX57sT0PLaTulEE+NSNgKFtd6leQROfHRKPQISGKxpbiuZhrA8dpiWMNfV5X9h36eZRgBjzFrUKWUE5XN5oy+GNHKU5lUCJj7kkG6V+Jv7D4iZsXF4mcV0xm9TAgkqiQSdhwoPNKW5ickJf7GDtA6cO8Du95Aajnm/Fnrm2QBrI1vOWlt9SvWcZGxdysh0TOEwtX5ns03usO9zrpJuU5a9zKuNt74IkgoKgbMobXQkxg6LONKIac24ury1c9DExmkqBasPkhoZkj+G7QwNZSyrK0q7H8tNiMyAi22VNUJq0YKydFFAJGnYZvmOsJ1kv7d3Vqm0IAMn5syezrpffwBe/kfw8lODAYiXxA7/BIBlzBlOXsHW90VklyaMmbJlZTH8GEYfNDi6hEknwdKeSf98fRSGWrPsr04zEGXNfMOcHQLGjhMr/WMjazxeQ9KYZZclj/e/aYZ//ezCefqKbeQUj2gYpAiz3YTfNvCx98Ds7QEztbZXe/wELKTsGK+LpItO61LAtLRLtp0xN57Y5C+sVMKenQVjP0uuqLLFk6DtABxPDEkeCXkeElAzKxLEDdlHtoiyxqKVxD4/83h2YdEUNu0+F9+wUqMcxDfSIj9RBXqM5hryCJEx8khuTciltFLuSsIYQqRYAuZCifhaROcnOk1YzChjg4/OpLFLIzIJo0gZHwih8k3eVTwVmfOiy8g997Pi2KeT4YfugAcwuJvvQfAFOI5aW1/KxRGQk8rvjAozWeOCaZ2xyn2y4OeHCYaMuqSd3XIfIC1sko0wKEQ6cIGV1skOn2Pw0olFooBhLtQcAwrOaddJTRWnihn9Dqfm647R6jToIF7Mvd236RI1j9eGwYYK1/gYwBZWfJJnnJV2B7y20Iq0IxWo3YLfjWSBgNVugGJ0KL0B7MaGNlTpYx+xckTOAVmYtWZdP1fIvx2eFDbxSPTmfmYeGKps0TORYcF0DC2NQcMIgLfxW2RgxuJHDpzua/RLSePazfKkvaG/p5b4LcuqZGpJ/tmz23wlv4uVpwnOjIql///tfVvILVt61fjmv4PdURpiDFHwQfFBEPGSFx+8gdgm4kMSFTUqiCI+eCGtpsVoI4jp0w+dGIwk5KEDQZvGoN3BFyEXY3xQsQ9oR4OJIPGWRKOJ3VHsPjG95ufDqjnn+Mb8ZlWt/3LOf87eC/b+16VWrapZVbPmmGN8Y0QxppSQWTJY7FZVWFNsKVgDWVBuAK2zZoVWtQvMPg3Ht6CWDx4ae/Rw6O33W6C0ieFHxqbZqtbM4msIQ1YobDrJL+vSwkKyQpYwboqWhuM03HmXNfL5by9fkBqzysYjlG02gcMNTPkec4bzdvqZ0cdRMPXePhOL+DcB/Ow+MFswZpM8H6uh3TQseO45Zo8ap/KcjD6y5TIQkNjfp/VmC0A2SRxbzlYiZbSdPKxJspeBJZAlfLL+FCgxICG7/n5ururXdiR9rmBztWwzCQGkiI40Si0PjTPZeH95AoHkhiZAql+1jRkUB0u1xDcGxALIAo2ZXMNlAo4KaWjcUl1mTbOcMlKGuNot19w5yV202gzU1ChEiCclvVJbrz5CJRamL1RHIcPkYlLjDdxt3tGgx4wzWcPbn/SZWKgDg0zBBY1KiDCQmnwEsw2sasniz8YcswzGMYaP8kYTuLeIV270cKxZhOpP4wC/sTVuM4D1LpdjFoqsUDxCxWbzEdw1sgkG9wkG899JhKA1l0HcWYPUb0gHGtPmOxi8OTLGAOaG5EgaIdtKE0Q0WaGgxqkhPdNs7s0lYISgJ3eVdD7hKstE5Hg9OneGZ06VdxMoc4QWNWXCbGFWmOnoIM4T2ay1HQz9s3QzF97KxNmxiPlHvBJHnhm6IUj8fAZlHiZC1LSkTAb/nvHzC6IpU/wxWeUlsl0ahx2aGnMJYAoWkWSWLaf1/XjBoKdMkKYiU39xNET8dtTytbCt1ixY5N+DIasWwZVnbFhSY+ayLDNkhaMAxj++bXVARhb5HRzVHSkj5F6uUZ4iZXSpN2Pr/FBzVndqzWyYklTMDNrl6C8WVvtIjENwm0FIBX7SDR85OmlevJvdcqS4lv/qdexyjrrv9k3PieF6sxJMnyVjtscmJcBsj3nCChytWKVbQSMDKgpKBgclU22Wi9wx1HQpawakk5v6tyRsEZ+XLn+rgEPXbDHeZpYZ+kCLtsMxgZg73xjHrH7Mk6mULlEkqeJy2XTEyVLGSATMS7m4yNsOQyY2+QYpy7K1GUjlmwZi6UD/mboYZaQTTJwl5vPONOtITywnbev9QzV8pslEbtXEDVkTSWN4rrrMKuBsNitQsrLScNGnIOnZYWZIGS/IVfUXrIvksqnseXhbaw3Szc7UuEUDDPausA0Pi+RzkhfuMKW9HdT1gvm8yWhCXUBsk/RXcv1cmHfYJkL0eXDYebDE/XhTTC9NLnx34FnjknZlpUD7Zwx2onn+nIPGdqxy7o02IGDk6heKybjF0vcFxpBLJbYYgolI7ru4rbHcRf1coYRj09e+r0MUZhI2d9S5lNEmWNXaupDMtNBEygAwJlLGwZQNM4/xC2w54lI7ZiR1zJ1oMJtQsmEhBKMog0Z9aymxq2yyxsCUyaG4SwAbWMZoc9tmQq9BqcttndFjsJXcNrawy65a5OvN7u5oCPa/rqzZ3TcEQ4/MwCMFZsSSXUSyuAqtdgZwEhptGh6d1JdtEuRLIYBkUc64JyOsdqL+ClJ2jTlo2hWs1SR0mreNwdhRzRmSejObgeRlD2RiYbefSTlxni0DgBe/CBpoKfbXNs+GmeUzzk8kZXxVY/ZAYNbImgbS+HV7nrFRzGxtuV9O8sXGwDjXVyEaWHSA1b6vDNnw35jNP5osj4APNgOMzg6RHJLBTpXdYNfGSlK/ti2tVo3/gpiq1WfhPamBw2bs0ZehWjTUWsu2Oyn4o98pWpum9WVhDn2TMJKUMZMoTp8l7oy7wMwtGQR62h9E9dWKlrFYrtUDK0GO8oRJXNRi4fd8dmH0mty51d5xspbD7NAobAUqI8sF8tRe24UChOXSTh0EMoNi+1JGlQ3mdXieIv94WAbLZhn6hh/MIxxtY9y6BswOoocX40mSs6WZCCv4wr+XuRsOlqcDl2Q1RrDEJ89+T08tP7Ffg7EbZvuryJq0qWzHGXLSMVhk2xLFjPl+oLYkeh9KiM08nNa9Pi6ZLjJSfnq38cfSabJPPTRrfKVptDjJhDWDjPS5+EnATMrm5KI5GhKXXhdXSBhcpuvUkhozriuLg22WMWZujZbOQ+4QSU1MwPnKl/1SreDC6FKmiyhdZFkjFmxaQW6eGc5NqLzRF9ezFsAJtQeXz2jHzQmQ3Z25BL8Nbn8ItfzaUVd2N8sRU2B2F/ecXRn3XBiL1prJsktAd2XQumSwxMnPajFYOtSYIakxs9zjSkFZB2RIDEBq8nwDaBePFv1nXBrTMOqEMasJSMvq0XhashK4uyBKHh34IRzUlg3GLGH4cxp4h6dHKMV4BcyeJ2uWyhIVQCUujUFGKHK5bP2JafSQ5OnYpNZqmqMlZiCZdXzKumm9G29nA3MtWFrWYwRMgVgbduoz3hbaDgZrpmB4xdDpOhvAI0A5gc6E3SsYtWpFjquO+JkcqapcSc8pgWomeMU5q4yNCpEDsz6BKe9puCPLFftOaB2aWCaz9bova2enUbDsgMfioU4F3lGTFUx6zYYKJw2mzYnZweffDiz0VzxUZDx8Ibhb5YEbslBplzqzmSnL680yP6rsJDS5ng9A2bItXNR2fvBFha62BpUuv+CZsWeThzrVVfkhPF2VBsCV3PW8zPCoqRwz2st+R1wg8w0XO3W6rkOC14lztbfapNb0oEo1umi9h3NHFtjS4EI6Xlaiu4RaAhZymiiAFMbtDI7ybtJOSIeUDQPWtWcxa8yCO2P2zwJQ8+W2eDqpYnmA8zwPElGUL+zygamEi5uZ2bI8SiAvGzaZfLD0UNn6EHp2A7NRMBcYN8spQrw4cwl+Gm5/EbV8T1prhkVeGTNmarO/NP/gmjKbWbIWMA2tLRuyxg6ciDELDBm5MrrFurKpxgw7dvmYw6XDPVyCpqfXZAaSMWYteNpxgtU7WXc2lVcgrznLlnfD+wD871PA7Au3C2PVoXPAdJqU4pNQ4rFzzMLWvcoxux2UnZUTnjWn2LHHn0AUkzFZjhlIZsegStwj1ap/AkPy+4W2qTJb6O6BAWQ2j/8yGyi29GCgyfVjBLpSV0oCgauQ7Qzs9Vwyqh3T9mnvFdpu8PJ07nf2sdOL23JcXybbH60d3ctkly9lRj0OSrk5ho6ik3PCMSB5QgNaF09CKpVF4/wyZfs56ygNaLTcYKPNjtdExuhaX4UZ63qJVvls/gFIyHTmdJKOnVIRD9evMEhTa/yxKgsyxirDjoosYLqm6NrTz5QtWiFNmuRJClviYCwewOUMgnzgh4Nlz0d92Ls/6gY62dvLVrrl5x2fYzs/7Mo+2z5utRND8QnGbBpKX64h2Y8AjA1Hu5x+7tIG7PCvOT6KWm3WY0+bz4wZm3vcmdA2JE8MIE3Bs0tdKsc2N6fR+N4KcGj1VwNqTepYwpRHAXqaGZuAFFkbM4ZR2jgmbbDZ7c98eOYxMIVPcy0ZFgHT9NxLJB4zUV3GjGVgtZzj+zBVLFhm7lEjzdfMYno/r1ULvIMvzg7Fvh9u341avjoFZivmzJIcsiyTzJMQaS+JsQfVkpVh9NHAmbvh0mJr2u2qDpbMJVi6HoCeVcDyxJYpU4bcBGRVa3a5LFizxE7/Itt42fsLykBbALajOrPtVv9dMPzTsyfLi3fzyM1kosjWMxRvY8bsUc0/npPRR7bcDcBslV82CWz2lktqnTLjD0h+WWfjEqt7F4MNFuGwZI8Dn0PI9NYOdZNFYmOl+lxCey5/Ie+1/ZNCjS651LapCfgK1vNqlS9Sz+VEu3rgCxhr65qWXwGuE5zMLGU8ICZcWCoTiqYbfjh9ziVcFBp9IRduT2RZzII5GRkocwauYTtiX2zu2MaPaZp2Rm0R6mTLKbYU73pNp7uYz8Vyimd2Gl6N8Q3r5HDmirKfYtv8UQ9Tt+F3DWtQnk5/zXfrzSZ2f3kmukc2Y8VzrXp7v9ddYo3wprJQj8ydr4Df8vf81MY57HBRvwmwZReUr2m9sw1e51N52SSes5Tr97LvWd6UpcxooBAobsANSRFTYIecsq4gNWYm8MXo3fF8ODCODW05Zu3YajRYwcouH5MbY5QzjnjZaKGP8HlWGyeXWipbDPVnFuMbO7aB9P9lBqcrkJbt2S2s5C5faS2psQhzRnJH0yOg5eangVmF48+hlt+NYu+61oCp66ICM3FaNJMQ6DLQSMacgTLLphbWurJRW9bruxmQsfFHFXdGo7KDhV1+FqqydGVcWefX2Qyk8nsYc6CHtWY7TFmWc+YnQZnnrz+7sWWnbz8dmC07Pdt5X2+ap+ca31Jg9lKZf2SGGjoQkjqzFHytwNyKYeJlpQYNCWjjbbHEan5i5Whd5YRLIzNRKi9U4MTuicv3st/KmMHEAbOTbJIjVzDbZEDBqYRpt3avG6OWaepWA2DXuj+5uveuE6t70/kMwHxWBE5qwHbTr7GrSd2bLLJl3fQDwU19lr1oTU1d7HHXYeoA1YUe1EPVXl/mFTLdF6brmDnzOYRNQ1BuQBaG/UxqNc3MTTQH91MD6KobI3CRXLPagdsasHL7zVsWr6l23IZ5xNUWPQIUNirv2WMmth5uZOVukXDhUHHLRFyzHUY/t7txhkf7i81Wv9nvz5JHi+vibDbJY+vu+RZZw74sohFKhwlbpEBzbhzS3hjeDH4eYqaJbW2MkEdWMEQNGDBDZsAog24rDJ4t5n1Y3vPKBGpdB48SXN3BuXlvQzCz0yzOC9E1AXDRMTdyueCp5sypsdFAlMMXmar5vcxlqsCo1zCsiCejjbFu+BHrzdi5UXk6ZcxsMcxjN0TPFHyCjDpxaIJlkEsb2UhEwRiEsGSGrWOlZDZmKv3bG8emmsfFDix5zvb67pbh2E/A7UOo5a+HDDPbs7xPDDwy98Usv8xtdmX0xXMzuNtQ2ZO4QyWM1SRgGosMMzuQMiZ1Zqx+WdWaTdb5HDp9gjVLa8yUQUOsPbssgNnlBHvmhr8Bw3+/5UTpwMwyjbvtvPYl4nlVY/aMHgvGLBxZCS3GDgumrFmc5Zbnkm1mM2GDPdCVyf2AWcbXj+vGioXnLFek3ylJOLUCQl+9155zLRuDnQbCxDp/CYjl3FQAiyRYmy32IdN5YV4y236SYe4xY9P3lTHzPe8HlxlzNfnAYMcUpIHYMi7Lqha9NLLSLM/MR+gzU8SiU8NtEBlki613a4UUTqNlWs4qDdTqGBQ6cotJpfYc56xXDgFZiCheKyGx9GEJ4Cyu/xJusx6sySnwOQVlvqTC+inCLrKUNzaYS4+1io2RowF2HYZD/WRz5/qZcWx4UN/AW4dOfrV7dAJsxpCwZZr1aIXNMbC1ilPQdXttc71YMK8xDxmAbfhcIblhHUey9b0F9qi232/By5WcF1te2GZH32rL2saM32vAczDIFrLdKFvOWhi3hYvf6fj1bQ6yxC1QwY0MRjyAVtCWebUpMaJN7NRt3ddDb1u7Vsoq24KCVTMXmDPkodLm+RgJLlAnWlTbgunh2bPWa1wWnfmYjYumHy5m+3l+WdnhmUyuRpsM32wFyDhYmiK+OH85JVItd1/kwOkAhQqBNf7cJMkgERpMqHGCxUAaMN12Rmm+8Lzewpi1x4dQy1fCypdF10VDeF13jD1WtWWwBMQlDFkAZxtbd1cG4LlDZM4seX7G9ZBvf5gdGbnOLJMyLoOmte7sMoxAel1ZEnj9+fa8JGzZDoPGph8sc1xlncnrfwnDh289SV58ITP4R7MLYungYmRU7fGBz+uvvx4utUfIMXsFzBbAaMU2rQxBEmC1B26mZWXgH8yoxAa/cOBykyU2i3kKYS6UO9YMLzoAq+TFvbFWzRyjP2+SxPY8q4Pj502SqVJGYbkmB8iEBVN5qLKALhlqS4nioj5sNcRfSiV3vl8umB3oVVfGkRtakuV1hJO6RUxjnpddqYt8dcE2bJtNBJerFC4rmq18E9fiGEkGqx5txrxisoWE7GzAKK1mzeOdK+AZdVRIiM0EGNOwelUhJEutwqWZbxrMVHxVA1M2wBoA+YYduEH0w3CpUUK/DeBnM4qgJ5TR2cbqUBuyMcUANrR/tbkDjqIlNwIT7rNLMZ1QPQbZI4sXgbCPUyetNWu/x5HbYoxiNoM5/n64X3sHnPEnagB96OHYurW8nsFU9qDpahGsWKZU8KkAzJ1NPWyeLvC11LhuTGC1eFnwcRuXGHUcTapYhPWaPNrZBl8ljRYZtOSqui5V+mKXqdaMk8RMAtzVwWkY29+FSZdC9WVlGoTbbD05gTEP/B02+aTNNWbKQi2MPbh8qxAoc/JeAbl/lzsBW1jLGiewJqxaGzm4R1fHcHw0v86zilr6Vxh1Jmizv767dUj283D7clzKjwLli3drygp9xq6JF3Fb3KspY3ZtA2BRErm5MGJgwW6mofVlVVwYhTWbGDTcT8rIOWY1sdDfkzRm2WauLJmAyiOXRpU3ZsumwMzwP9zwFUSInwdm72qnmsXzV+tb59nlePY3NIuXrMbs7SRlTIDRLsji2qnk+YpBS001mFFqz3mZ7am6HU7TWvx58jwDlbPp8bHLokofjwBrykqqdFKeF7HEbzVpwc5+27e6WL4Q2Au5aYgZavo9SwDjNPInVlA/D873tmNSMTmu+cKxEUGtNHXimfhNjQ4BcWhUwGI7kHSSN3ocWUDQJW/85MYoU7Zhh0ymDD32+iCUOan9/LAX0zJ+XzBjnHSWsWaFIBeICbNg9OHwPndYCcTVzcmRwVmGJC3pnGsf8MfQcpLLdbZSHNVaGPGWz+WImWjOtvgeyB4CbKPw8frH2tVElXQkpyTwtlWjwopLfeMwY2kywKvfgJPpjZhbOBDcItl+HoMRGtJCxlUtnDq2bLeYt+EeCZZBbmYmYTOsLePdLMb6xIWPNg/W+0YsJIJ0jgFZNRC7hTAd0Fu657axhb6cTXUDOhtAc2tFsJvssZk5dBYs09DJwD01F/aFPC5nyqIdz/zXgrzRl5lnBSNzcIRAm7Bkca2OLK8s5pnxjmjkNAgEBS2lmhwqspQJr6AKJBf6Ujec7JEpU7WpphekgLHIphWsIxQLTXpZAexCAAYzq9ZY6CLC0o40v+A+w7KfhtvXopaP7jos2oaULiRPNKopUzbNE6AW3BrZ7EPCpMUaPwAynwHZBM4wSxn9pJSR/6YSRg2crpE165LGOuzzd3PNzkgbEYw79pkysdOnW/2fheEz9zlBrgHTMiGkEbzGE72JG5NZGEe8VDVmz8noI1uOGbNbWbM9mSLLEzNJokokV3JKXs+2rdd7+jCyCJLAPSBJZM/K0THY8N/jeQbIMoYw/V4C4oJvWCJNRCJVVIdFlUCy9NMo2BrERKomQ9kyO2DWSt0hMPayyjrpROYfXeLYVIF1QBzGMWE2yvOfUbIptHsVcJbtZQdfGiZqg8pjgDb0YVdNRQaVnO4GjSLkpOzg0IgYcM1VyJjGf9N40U9IFld53zUZc8baMlBNWW0CtG4E4onE0ae50qxwbmz5pW5gjo1ayFDDKknruqyO09auX6hU8cW0ameQGqhwG/VhPgBNq3na9HFdZthugi5uis5By5VEgQ2UkdTwKoMUmWY1il2rPS/NTPLrujxv20/basm27WvySppxilxhlzGGfJJR0+UkcZR4r96t2QCnnU3EAEedK5SS4khEt2PsG4jm884FmLVjNySavFGtzo499i9OVXCGIWFcebOr6o9DqEFBW+bRgcjyaQZbvKdQb5jb+3R5l0l62M7rEvLLBvdmwqSpMYjtToqsHjpnIEaUcDY21DsKq/7oDtZUox0nGylMLWfF9DlKJBOsiLjAdmauuAqhEJixy4K/BKKlcGPLXtx36Pgx1PJ7YOVrJvMPtbwvZSDcizKkmZRROMcGKovIGjdWja3xnQKbOyBzqSk7a6ixkvu5gLQTUsYAztSZkUFaHazZUbbZmQDqDKjVhUtju1VvIO7vwPD373tyvHiXbTS5R2fGlbY4vE8ypYaUnwBIPXeg97aRMu4As13pIoOdxIwjY+G0Hkyf99dNBqiSwJ26tWlbd4DbY4GvvedTG2UB3BmjiGG3j5WkEce1dsvnJOtUiWNqxHJG5sjAzEQmyGhg8slQi/xm9mGRra8b1rkQE6ZxX1XwijPTRla/nbWgWV1f7p2GBrtwg3SnCACNaECf4QyMpiKz8JZJr6lIytcBZFhP4qstyR3NjZtAJu8Qa7BptYfTDnbiWv8S5z29f/OyXFueB1XTnfB6GbP8Pk8G1gA4oiuiJ6er2qhfwbmE6jV1KnyWUbIfu0WKOJhukDFG/F1eNhqbxDDkeJyda8dULzwpBQeIV0YpUtrx+3G1vqst0SD3TKbpgeljsWyubOz9N8Ex7YR8DjkbtYwEIueZFqricw2Ytlhn1kAYO1IEKaPNjJrliGzlcLj/zyQSemSbtcSyBnzvSNg4YqkLMWVc28ZW+jOnvpY6zhjOEvOOsCi/XxCjEBT0XoYXi+aZWSJf5OYO/isJmdnJrXR/k51x3ZEy5KxuswYTWnt27+GpA/ZHUO2XAOW9S8v7zBof4sq4a4+fhUg3We/VHt/ZgZHDpAu5I0uwtMoW/cD445SUESRXxMyWBdt8dWSsMdfskjB7u1LGgwDqzEI/C6Xe/v4j3OGPPWTcfjX/cDrX8j5uDZNI5n95Aimj1oQ9Qo7ZSyVlPAvMFkBjj5XaBSc7oE3Xa2TtzoBsCTzacraFCG37yMYbXTJ5K9hi8JcBPn6fHCcrgbEq7VKTkGxlKxkcRjuKtelJBsQyUw89NlMNmbZtAuQmYOZhkDxP1NDEelADGqv97obph2G7b5Ay0EtkxkAkRc2wTPuti+Cby5kr33asuOcaGNBgOM8042VqDFnj9ElFD3WXUMqnrcSlMBtqjRtjJbrVEoDG9WYe3BmvvFTtsqtKa2DTj/j+nunHLP306sOMgnO+QxLaQPLmmEK0bVEz3SvKCBRNflaeidckLKsNk92DfUkzBMFC/OYybDf+vs05ELaotTIBSrFliK1ih9Hplj2OfZTk7bl/jQvNE/Cr++CWAz7NyHKuBVu0Xc5uy7LUYBZes5SR1jfZAUpn0idmpN7UbEaagYU0qrYcrW1BXGghUcwoUWzmaYzkEXcb4Cq0uQzxEDg4C+dedGqcY+hj/h6pemdBAbsjtv4a1L+3uCzPtRm2MWzFSH5RtvcVgPliCKqu9pmiK1xyJAmeQtnKmAnqRhzbTE7J7CnbEfkFDxmeORzvQy0/ALMvDbVkCqTYndHEuSazx1+Cue3AbMt2FqoQwCkxxaX/qzlztnJldOQMWpijRGL+gejQmFrnkxlIMAKpBOBsXW/mEJMQnA+gDsZjs2zzJ73gL9xeVaaMGQa7n9022czGfX9scLEnYbie+/qe9WOv/ipjxxJAldnOezLI35MV7rI0Z9anpiELQOKJc+G9gNle2x1Y49tOjdu9gKL+9i3behKM3/QdkF1+IJiImuFsslADxKxAHRKUFkbdpIwoQL3EeK82Q+WIfhpBJYiIgcwiNzMN7kJILKR+SQNtXZxMVnVlBaFArAfAUAMEr3/DkmBaGRv6SqUzS6JWJiAzr+Wp3LH2waOafjSgVvtQVNe0ts5HuiO1n88r7itQJ7G0qQOmBReMjH1ZE0W+Qx+t0t/Y2dA9GcSHMZkwtuEHbHnO+h4DxYYrjjh5MFUfzoBzbw5zkG+eT9oqu8fmi7befuSk++50asqNusV2CNe5zW4S2KG0ipp/kMGMI/FyZ4YrXoVRSDSqv5xMQIyyAoe8MU64FOHhTKwlR/h0HKhbiLCGwMXIi48tIp084+0ijroWsayJQsF8QR0WAl8be1bYFEQPl0dLfDYCCSDNF9SlJf10f99kh5LCOlPaT2YA7//4d4C9F7V8L1B+6RwaXYaU0VmGyDVliQV+IYfGBsZKXM43Ex0FZNVne/ylNPAAyOwGTCMptfb9WrOUMasSPl2BS92vNeuGIAkouyQ1aJcIvmbG7Pr3J3CH9wL49w89KV68G8CdpRN248Rf1Gv7nCX56IwZXpl/PCVjluaU6bKaTbYaxDfJ3oJ5WwJBlfpRvduKMcOCPcq2TQEns1OZQ6S+Dt85AWYyU5WjfTlch5qhNNljc68k0w8dMikLVhfLRZwVl5sYs7qa6tDxHvXM3Md04FaJeSsbu3WHLnPsUgWLNuFsrtAs9HnW2qlurU/m66yTjsK5snwU4BBwc1kh2UlaEs7Wuq+mBel3Gw6eFhYNa+C1ZsoO+oDFgfSdf2MY4z1n6TpQGrdVI/hlh2tc7VgctQ3GPJndXjWBhfKi/VH8nofDmQaemJuVowybx9jtt51Ai8XmONrKmAhh+2h+d7sMSiv6wde7yoC6MYetZ3V3dl0DH46O08iUAyRTQQKmbbbMt4xFI0DWLP9YX+fUsVhjypygllPcwbA1QQBew0PVAw9mgakekCCzQC+ITosqa7Qlk25JxtkU8abZZPR+kCuW0e9OCiyWs29/+VCwEYhZYv5Bjour/G9VmCJLo7EaU7BBDFnfeKNOhVAkS7B9m1HEux5hRGr/Fm4fAMpHds1ACmWfTTVm2b/IjkVQZyGrLMgYxSr/dL0W9vO8sjqziTE7y5zVnZqz5tBYDwDlmdBpk1r31d/r86/HBT/yGNTPi/L/tlmKW1fmCUirLx9j9pyMPrLlFJjdwIzshUun0sUkryyV3q1Ak7JnGQhbAKXwGUsZ2QlSX++1i4IhcjbU11wbNi2bbLsfgMuMacQCmO6B1hVLeQf5oQVIs53PiussupaSyNR3qx+DWOgHVaAYHIZZN5ci22hS19fvWR/FBn6sPFwOMjMvcqcbOqI5x+TUKIi0Fb3pzjDL4GLTHwiomfVY6BvCACxD6PNrXxiAXOfRc/OP2mWNjSmrwpp5MHpf8XVcn+SjxnAbILU6q6vrHjNCW15YM9bgIGawc1/LFcNmetGMMlie1kKJicUwMdogRqYDUGvSxejb7t3e37rsOQSNG9VVscSyhyOPE9rImMSZgejcCgdMU31cs8c3cWL0YYZhKh00C8HXTuvr5iJ8vLr5CgV8b9vrxM20tib8ghFKzeYm14vTjWz4nQntzQ3SbIbfxIw3Or/ltXWpZKdiKES6JMCMwZha5qvc0ZBEahidhRYAUHuX+fTIw5QNjA1RYZMc3/UugRkxrkxrtWbjswo2BQFiELUtZhtsOY1g4jHgRmwaY57tuQJevwzAxlb5sNx9kYlKTS6w1TgUSYyL9j2mB9AJjGnQNKNTJHloj8YbfAeqfSlQPjjXmgkrxtvJy0zB0ZJX1hBKKaN2y8jVsMT6slrJQl/Yp37LslnOl7oxWi5j3GXN2vt1KGIqYq0ZZ5sF6/xWa6ZGIOUAkCXW+hwufVlZ6he8H3f4u6cmVc8AM/s5AtjzfT6Xna9UD/XxGa7XX389rO8RcsxeZrv8CXDpZwKcJkB7IpPs8DMBBhzYDAJRae3THnuVsFy7gOsGYIZV6LOARRwxeFjY8LfXWtd2BKTv+9mKHT3TLmjmeOqJIaRIUP3RZ1V9NYxUgURaMTDT0quAZVwcGRPHRo4n09q0URgk2stQI8PFc7xzWyLnZPpBmkyX6cF+B/Nko6mAjsX6ShVWxPC2PhT0lKcCVmJCrgTzMFNfwxAvSuB8s8xXMLaSM+a1ZnUKqEa9DIv+jo88SvaazXwHVZxIxj0ZfW97zZ46DbQ4h1R7ZjgxGBknR0TwL/rgGK+b14CaiH7JwILvtVbFFbOtw6fNQEvHCn1Z38XG4hLe2fLTWEbXGZwNENWaBCk0wONjGF9lpsPBbexiskM5cZP6cWvL6lPH4gzUOFg8k+lg2OlzdEGw8e9jaIu2+To+n4qbLNcCTzMduU2+JSCn0PWVsz6Du7ojprqCq8gG+2E5sgS27+ch03PO1zgzZpkSlylOcE6NQDJ7/Rb/dje6yFa6FfwENUJOUw4sXW2oZS52MPse6srqPOwxW7QnG8GURIfwKI/Xrl1reW0dIr1gzFzqzCaTkEJW+TaADVvks/siyxgVONW1oyGDs0zCOBmAHLBl4XWl31dXxqzmrA5wmdWaMfDi2rNqOShbMoMF70fBNz7mifACbwgwO5p68J1O6vLyMWbP/XHEmO0N2kWaOC2/9znLE/X1arCPGKK8ZNv2ZI1ZThq7E6psMgONOyHY6WcMKEfmtYFfZ9uv2WGyLBL2K1jm62th2VTaGF7z50mG2dFVP6SMtiac2vPq0SSk2+JjKEjafadZ5TfL3pow871jrFKepUYhjK84i1gJKPbY5xFHVQcTj3bZVgG/I1TJh6JGdi1oMbU62hdlWJ4TYxZ46rRL04FUXcy9gSBUyy9rxh6Fhi9jcMi32BmsWZqYplLHipVG8eKDXTIGYWQ1DxsMWu2sTbOK3wa97YRgRmmzXG9D4uoJYxPqp64nWMvPavVrwcG427hbfz4INCNQYRE6EqPT3UmJ5fPIT3Xg0fbNg/8egtX+mAwxOvfHRjvNilTfLOk7WTuYP4P177oUjjWWckQ7cL6Od+auN691e5QYs+MIcdyN2WvtYVngNdcSmhPrichgMuNZioxZLbJixRMQRswqFzoB4kxRwqTA5DmB6IaqrNTgalniOABypayzRfzyiX+j5WYvyPFOpvQuZO4BMtpwiwoIK5hjHdlpnhAfY+DWtKXMhGZgzqTpoWDNF2QFa577RjrJUNm9ClTPpWDM1zWrj/f40BYk/dqgGsmlcZVbZsn7zVXSY21ZNXEzbLVl5MRYmWmqc8D0odU89gFa9dkuP3NoVOOPurLOrzGAmtmzYG1fZsOSy04ItQIzZsocgBe83wq+8bHPhCswy/InbKGWwY6i5gkYM7yqMXtqYDa5MIax7Qy+lsurHG/n9VDBuZ95nckY9XUDZNn+B/nirUD1BHN4+HrF+h3svwK0W4AqEubxPq/3gZlHc6AAesiFsan52hRwn+AWK/2+HNWHBRljRiCZ1Jwxk8djR8ylOxEElYgAA1XBTIGyJGUGYwzQun8/EtaLgEGoM+MpTGVcbN6uRNYw+D8PXfSdeCbqjHkMmB6SxsGe+cRjWo8r5hwqGjSr++JUQbQNzauIJ31I5IwnfnjALvbwwVYjMDsjw6uLzfjarp7c4+qQBiYSOqcRKp+XmNidYMvRs79cJi1ADFQ/OlvwM+/bBFc8u32TlbzxpFlktY0YYyeQ4KhTrRZ1YhJl4CE/gHPVENrFJ6VwgPgdXFqA/HOHRPLQfpo04Dqlh0dgZhqgtTXQCuME20VPAqgNw6l0XQsX54I8VHW1Yz0wTenn6WDOMmA2YI4LoxahO1sDmUza5OweRrZ637beEkW6u+wvAzWj7mL77A6zF0u30fcFiYnIzplMxLE8MtqsbhsQEqrLONds66ML5Zj12mHEGUMrTz2U/NAWIv1aypJpblnPKEts8jm7zEuoJ3NPQBgFTDfPqjRUGrOM8aF2+Zpp5okJiGdW+WL8oWxaNwI5Y2BiO7VlamzyBExZB2b2Bh3nIxizwzU1+fYrxuz5A7MMbAjttbK2h7JOCVs0vW5EljBmh+CCvpPKH3deT2zXLVK9M4ziQ9dxVIOXgaOs9uwEWNbv7IKwpK4wm4YpsahuLFX1nqjeGTR7amUQE1VkMU7Srkoh03EOaMYzIIik0wCcCztPPKlxus0sQHAz2Ta8SRU7BcCjFZpl1aRNHpWy9SQDsVB/JiiUUbG4mhjJGpHAn0pWBAM+ckwtOswqGHbdSFkvtciPAdPReD8CqtpDqqmsjuRhQyV2HTw51RilPKHMfkeeahv8Co4JYGmFrd0P7h5+4n7JDE5kVX2xStd0BgVdO9WErnIXBkjiFumJTaIzCEnqeBwKKOP+ZzFtAeSEtrVDG8a0dlQdSF14q+AIWBLnxcHuLUPHgDlEq197JZiA5Fdb7JAtwDTFNxbCpS+ASB6zxDOOoo7IUq3x2VCfG/wuAWurAdNSBUjkUuhOW+2ZY4oA64pSi1YmGSkZSsEQ65oLRFHK3hyuK6njB73mmsi2ViNmf8q040rBx374Bs4K4OW1UWNmeW6ZZ7llVHNWC+WWEegiENaZJJ/t8XtNWSGwoqCGgQ9yq/w0VBoxUDqTNTpLKCHGHyJjDHVmPhuBhJq5kwAtqzF7SlA2GLOyYMAMO/5umOvRnoAxe+45Zs/J6CNbbpGhNRl7nFhG688UjPWQaJU6MoAjqeIpOeEN7M4pBu4hoIrrv7Qe7ETQ9aqND0GgAFBbAOvd14t13lR7ljJmMpaF5N5Ul8B6j470OsbqSjbWuuusm629/1j6yL+RnsXLzBuLw88WEh06uhJRKftJ6+hcvf05JbvKyJjZtHRU7nMw9sRFzTLFsVeVZu99qjdjgFbJTHtAiNphlYI0X4C2OW65Ut5TDTlKnfEOhOX1GAzjjiG3nEFUDF9iUWCl6p+w502SSDDRuK4puYMMGR5CllmoS5x6z8Eg1YNb0rSNG2sYXeDVsTGjhX06rTuLLWCe5yh6dpyPujmF/plkj3PkqraJSzYcbSdHrg01ouVHwDbG0YfT4XX+IrpBBgVnY8xAFoCdonEBZaSBVpdGyOtAtHuAXQ1cgTismgAgI7BdJJb7EsBTW3eZvBrjxmKBMk16hjs6zzyVMk53kFWxmZNRLY8CPU7AsRzSnDK/IQ6MRSzyMSSOQdqoNWkQR8gpBoVQZSGQxRNqgSVVfaZShU/6+NCGJF4bcspWU6Ynp8hbAyi7fsYOx8H8o0QjkIklq2QKYhGA7VnmO07Y5SeArMsWIazYCev8LNOsW+pjWOT7ym0Ss8QxhE1fQdnXWcE3PeWBn6WMe9M+CtZyYPaKMXtGj9Xg+75gDYBvYcphGXqvr6eFLsvrJfBLXuNomYQ1U+BiJxnCMwYlZySLWc3WUX7c3vec7s2+AGl8F5lkh1jEFqyMU85cQzrh3Wcsiwyw2B1+u68Zdb7ATES1PdFw6UnGiDxzKq03w2JB7sDUa8YgBhvKGYDsaAXM8RZyQEwmaQxuJkgs1lX3ZZjThSNTFCtZYn6VBU7F4uB9A0vXEyc+9ySSWgGaBRMSRxQBzjlrLnYl7t1Sr9ustxqoxsrBt8GrNjnk5DCFZujGF915EKOGTKWRINfFzqlVKR9r+9pq0SqxvrxZdbS+88S7CE55XUES2GvLhgMiIc54irbfMgIoxFJdSye9t/GokxvnXjeosPYaBIiNjEGGKUqvhOLAc8dwoOynah0YukGCvm1buHi0KOFOGizO7bVoQdFbe01iJzmKSVGTzbLGPe1cim2a24QHLqrS0VchqM17FDpuVnZriVYRAGaTxz+wNq5QG/2SGuRzuDSkH+fVuom5YYmMljryeok3jgl88Z4UMfuwGaTBI4ZutXDucZnJ+7+wlEJ3klgw3cFBwWWI/GnBmZc3cClfDy9fMmwvt2NeC3BXZrbMOM/MrpllYonf6su4tmwlYZxMM3C7lDF9fiBlVBOQLGTaReJYxQik/b147i6Z1ZpxADXVnv2UGz6Igr/91Ad9ADNbALNVOqktBzqPfbY+NpB6U66m5/K4XC5pDln2ngKIhblH6tOpUkdm0yBGGTcAorPAZfd7J9mre0kWs/1HHjVwBAZ331uAzYmmoWVK0uap+cdq2j7JMmvv3VXGD4jkkrebdDNp8yh7rOQZbSWWbfRfvESHJ0Ac5xkStBl6i/VkXIblkXzYzcciZwmRCnLBxAoSVioeF8as0iir0sZ4QgsyXeiJ+0kqvcTETkXYZaHeywlAVoqZNaoYG+KfGN5rYvbhHZRFR8ZKYG7mP9RW/2rIwW53Bket28C7rSlxWaDZEfJqMaqnqiSk9LF/1iYpDGaV3ADbvtfRJmxJX5Ug22rRjIEP+ns0fXNdbwVZ2DtJHLcj5ARinUxOnEa2jgEI2cq/NU+VCQZOeiATmxogvXUYVpXyDsYkg56u3VXSaR9pkO91GIGwCQnVANUNBLtMbHg3IgGqeTTQ4BQLj+AWTmdWVbpFiKYJjHkS4IqUucuGKAy98veig+Mqo4QBW6Hhiy+D13SnuK8qBwOq2EdoBZ32lXa0A00JiGiE2LtTkrOned6W+Uwi+nHMm7520ERCGfdb4kV+wCUbIGPS3tTHN8Pt+1Dte+HllwWzD2ODD2LIikgeyfDDhSHzRMJYy8wsBTv8BVO2J2XMANlKyjiZf2CuKZus85Ow6crujHXIEkPANANPLAHaj/sd3os7/OibccBf2BuPeJ49DWP2yvzjERizM4wJciv9MyAj8Ko7AGLFBtk93kPG3S5YoOk2cl9gtgBPpwHbPcDYWWYvBXJSYxaO69G+L669AsAuSO5VFEHENfiVS1Uq5yhJELTkfHJZVU3MDPv4vEaIEsKmaWxaXaRaAVRS0FJ16dQKjQaysDRelgdFrQZNGLJqSf2Y4ipP6D/HWi5HLE9aaySD5T7AJTBAg/NCosfr0KXSuKd2axDv++2pUX80+VBz/rko2UMOgzaHVobNvbmLq+WyfqrbrIPYutj2k8lHgsOnSiinEhxaXx+Yu4dg9Mi8Rkg9wVjP9nvsg5ZKqlX9nOsnUknJl+vHx8m4hA0++kyLkM8VydnlIv10WjTKTud4xWhoCpWZ8rZMUk+jHLOEUCriyc4THCbe63Y0ZZyn963wS1YZUuQK4iFVM//g+W+bgFq6k0it34lBW1oMWEwWANnYU9lkYNrMIvXnjIG2ybhGXIZDkAVML2zy2ZURG/u26yU86ekTWo0RpBN1N8kX6xNxBruPH0a1r4CVbwXKb7kCrw2EfX4LkiaGjGWPzJZ18FIEkEmY9JI5w8ycLcKWUynjMsMsAWiBCUMeMK2OjZNLY1ZrhrFvYb/KQp5p+EG/w5+xNwmUXRmzz2E/pwM4V2OGPkPyqGfr66+/Htb3CDlmL52U8YFA5BZwFoYGWa3ZWYB3Arzw9+1G8HILILoZJD0UdJ54X8FXOo13hmF8CIutY97JrMCiuzyY/VI7ZcVBWdyXZ0lYO07zEmTNCiSfR95xA7O5nEAgaphRkdOfXRnlLqUjZA2YTkf9tF51bpThrvUaLt2LSsu42I8HqnCWhvbhn4d6pPFbc7UawzEIA8f1T5Ulj4TKA4AnJN0t1QHOiR6gojEywf4dovzcqn26nT7JFdmATwZvwZQvbUHXyq7AnBqHJfcQagwb+e5kOCi5ZtZhKgh1qplbjfSNArRt5yIlvm3Uq20M2eZmGXK3232lRQV0as+CtweDqeaaKNXE5NdinFwgfQvFIICO1QYazax7OfBlbK0DCPb4WMgYTZwbF2RU7MERg6QTPIDZKsIWM16q6L4LA9ohQYwMmMk8WlkANAVn+a0g4BOfyaQp9oswrSUlWA3fqGdRkCcmitJC5h4K0Do4pD69WEKQAVK4WKM+k+coOzjnnahydCTX5c19/BsAvxXVPgYvXzObfdDrLUgaxQIYq3VmzEL0TBHmLJEy+hkp4x5bhmPLfM4vy+zylzVmPpt/qCHIxfM8s5oD0O/EF+CPv9kH+oV/lk5wexin5E9jl/+sGbjnZPSRLdeK6W8BXCsQdAtg2gM9C9h/E0g6AB6nlt1pl0dpr1vbZa+9VqBuwX4dMYz3bq92d8qSqJjI0awbh+AYI+BGBeJMPHXVHgZr1p9jP7/Mce2IQQMMP9XNyIjDaSThghwn90bIDb3JSSxKFgMQgxh9iPd/bzMx4q40eNTPBHipDLFBq0L7y+wYsyZsr2CdSatAcFlUCWMFQuSzyhlrgDEMFJ10Tr3cjFgrYwkcIrY1jNyyYXPvoT6s0ijS4cOQoMsJY7TCiLKrlAOmnpc+ndoIVvcDoFdQ9lmTO1ZOWh81mcPwhLw03SlXDds6t+Vkq5oDo/POBDbuKt/02mScRtvFoedVcsysS5TbTnqrw3Pljq4Xrm+5be61A6nr+8bp2GMKwVtuXJNwgkDYYO96FJwP1nMEbdPsTGPFoKArcZOYpADUeU3Ad18YiMWQKuPVnK6xFkChCj0Xt0WI82KsUJujq30pnByvJ/sQE7m5NItt8jirs/iAu08T9FkI1BWbmTJImRfngncyKysFy+5c5qKp1EkJX3CZi1ugFbxl4ivHHwXsB1DLNwH2njRQerPJ9xYm3RJbCkn/WIliM3O2kjLWPSkjxGYex+BskjcmNvmh7iyrN6tSi5a5M0q2mZfdmrPPeMGf9xf4zreCyclrzFY9iO9OtLyyy3+GD871uoEh22XEbgVzR58pSEuyvB4KJm4FYDe//xCQm8gQ/RZp5GOxbwvgnC3fXRld/SlMMsPqyOfsmczimohtdq7duJ3xjJO0Ajmu2XOTDwBDas1in0dTsJP7YdbpSYhP12hyOOkBMAMiS1bbAB4j2TP4lNdYX7YolnMy7MBUxcUCx7lIsPbBIQS2gfixOVA62uGD4N2QxwExhyuakWyD01qxIjOZPULWl3H4nfyeSt9YuDckdRZ4DZfRtXMWUo1Oj4lXIqJccuzMrMokiZRRbQ4xVw2chZorgdttGw11uoDNhzQ1sJmNafRu1RjYuDF5Qu23sXp12o8o+QzCUecatAZGB6jLAsD6sfHoGOk1ssd5voeP9jNsThNCKDF5FOgbnwFcn6wRbZ/NnfTOEGlnSOKbwY4J/zrO7SYytiA/tO2b1kFblpBmEp6RgcflVJWU3BmXavE8AEXCtQkTEy8kI23bJFHckS2auO0Gkovn01JW0wigr4BXBlJr0mKsmnjLqmIqgI/A8Y9xKf8AtXxZs8O/Shob9VUGIKuYzT/YcZFCppmAqwtA5isZo+2HS6fGHxDwRX8nlgy0P5hrzNhKv+pzMQJZsWVu+CTu8AdQ8J/fKrBwrTFbTffY3vB4OZR7VWP2jB579u0MKNrMZPbd5DO1wU/BCdvMY9/1cZoW0PytZJvbuh2JpHELlQZyuWOW8aW/nzJ8yfvLz3ZYqtUxyiiYs8DztJzxxDlz9B3TuCetK4PHLOQW+VVpBrUmcDWAKouMGJNJzIC55OB2wxGSrsmYOz+rPMl9kpn85MPA3kyjeaxoPY8bNhXJER2UUX4hC8DToZaTKb1+7pRkFv0cr59ewvh1ODIagS0jcaTEBGMWnc6vLZjnb+tLCqK6JUGoAfPIWnjCaDBISDLt5otThGRO+WZTyHcd8sN0qskp22pxA83yuCoxbv37G2Ayk3YezCBLLivmDDs2PhnvzKxfZPkaU8LWqy3g26T9mL6aGacp+yz8iETQ9T7FUZuE06MDac5ZcrD2cPa8dlZlBl+pzR+k5gwzYAt2g5gy3gZLvRMpMHV9Rt2TTTcCB3AX7HnmvLJCgK3VnkWYl2WfRceMLGTaVhutzJlIFk3xDCjqsVA9me/Y4GNtlc/tw6abqZZU7SU16yLYrKrxB/dnBQu/37fi8R/h+B1wez9Q/jJgd8MqvwzJIjFmVUKlqyU2+QTW0tqrE1b54Z++5zuvEykjs2MMxjTLLLgy+syU6euLEyC9bufna8EH8QLfZMD/eSsP7Fxj5vsM7i70egJgpjVhj5Bj9rIyZisGLICzFUtzw2cTS5YZU9zIsK0AB4Ohyb3xrCX9CTbsST7DwqnxHgzZaZbs5GdHLFqpHuukw02dJSYsVZRoMFAYafucyabMTR6+YM48kQ554qlxeEvds2l0mTWtycxq1an4KMRf7QDkeRUakoGj1xhEHQZ00aYbIXGqTiMW3fKME4wsQJYeB+DgfQsiSshzxsBSq9YBDoVTT4P6OvbYWaw3QqV7jZXUivlC+xSjAaz/JLkHIar7HFZtsu13AZnTqLaBvx6qbYHNavuROniQdivIOXuLeFyX6fUwwGWv4VImvC0VcqDm/LtWL9fNZxw5kygTHg2ANRBKUHibYKlhbkIrO02cScOvbdJN76N6kTCGSzyhaqT+LsocgRyVazCERcCIzOHUwn7bdBU1Nm2uJ/MgU2ywQZ0VLWXMIrayCWuFXDpgylE3S+dAeoLA5K/RmGZy7V0dlqzMD2KSuOq1beWZkDGdjDpDkjUWzifP7vGzAD6Aap+A219DLV/ZWDO1xue8MicJ4+TKSADN+XZjUksm9WWhlFrqy/JwlTw9JrBmiazRBZSlrowC0porI7/fQ6cBeMHH/Q7fgIJPPYeD+gKfTTipI8v8bIJ23Pdf2eU/T2B2K0jAAUg4AlM3AbEzYOwhgOMME/SU7XP03Sdo30dvHwZmviCcQo0B38jrAF2qXBr24cJmlJkwCkN+i6QRSyQrclC2lu+wPiaxdMyy1sNsrCMLcQ3ADIkJyATMMDNDwTJ/tVcMgvLhl0+dtSWDZwuBtzONy0YenryOrAybfIwtnION0WdMK+Vhxcy16tvyzQmQZwLa4N55uxno1AEejKR1ZvBuxx+dA/teWR0xD0yK8ngOm7V+DUVx2/I+AqvNgvV8BKMeJYOhxaxrwyzaE1L93WYQsWmIOzA1dmccv+/G4Cw6WJq5OJp6CINu+2LCtF3BVrSXMbMAdTuxuW1Pbe81o5GeXyZMepcmyj44CMolLHz1IWVMY77Uq10G86HQyXOkMo/4YTu8npNkODhXytXSRI7DAzXWi5VwtQ72LLJl/L4CwxxWYrH73KVNBLXNE3GmogIbcsYMdNnqENBvl6TFNShgfxgpbHt6R0KiivAUNj+Tx78C7Pei2h8G7Our49dUAmGVasvqDmN2+A87z7HzPPvnO893mLO9oOnJrbHO1vnBuRH44VrwmhX8PXGweouB2eeQx9Ia1vVmixwzexog9azX95yMPrLlGJgdgItTnz8WyLgnGLsVcDjyEOr7ALOwTMgUunGZvTq1J26/PVDqN3xeapz4HjddzA6MoetQC3SbX/db32XM2CFxlQ9MGd1bU+d5O1P3oXpMAWjZtDG2u146WBPnE3YzgbgxMhM2jctFJoaMonQagFWZtzepNPOJd8jgW0DiCUPBhh8M2thlMZqARGDHtVEdTFVPbOJHVpXLLIDxOeW+mDsUZ1pmfQjYeWA64sp9GV3nM3HZAYz8hoCwjNGFa0KdR6Dks5gx7rNTeaRjElNrAWY4qTwCoQ3rZOagDjkeMlHhpGl2T+rwnCAKgWJwDl0AZeJkaghOLfNVJ9dec5dgtGFi9KFaONbOwRauFHPfoPVhlnJlJkw3pnFhSxaMoki26EEAaUbQpBBY498qAShOItb+eRjQCVHNk25muZDKbcze9ck6aWKT9ZiaIyJKHaHMGS03Za6tbq9KrZlj984QPjKsZOPPZR4ewEfh+D6veL87/oQbvqgDGq4hy2rLjOLQDmzymTVb1phhBmmcX+YLUMZs2eTKCGHIstoyYc68xuU2oPYzXvEdbvgwCn76uR3IKzBbDRH9tnPRX0Jg9twfZ4KVbwRnp5c5AHG3LHcTYFkAkSP27ibgI7V7h6HWZ0DfWRB1j+UevIw8ShfxSVF23Zt+TW54Kn/UYvLAiAmcUPA1ATx57/hWunJB2vsmB0Ol0ayxoGm54S5MGpKaNEsAZM6MmQ7WJ+Egf0vn12dJU+0cSH4UYoB0tPgImVjTFsQbTbhOVMEXzhGyzA/7bJCkssA9QJhACFy0LLU6ID2LrorLkVwu98tBNdc12hYNMB8rjfdy0zqxYe0R6rnS09fk+MgnPJqW3fPVZZHWbCIFLi5zGxws2OSNzYEzlm1qenwiQ1W6HriW3yxNPRSk2SxphKCO3oFZBgcJiDkxWXHvdUoEUxB8jIS/6/WDWjMGMg5R1m7u20xYNo2eTq3yqdl0noqbjA9nJxlb1hjisQzNbjMzFuSNlpObsBkQmq/GsD7LGVMbSQwpY/G3oyvBTwH4Oq/45mp4X3X8qVrxnu6kz/VkLiCMLfKLyBYXoCzki4pdvuaYHdrlI3FlRO7EmDFoWc4ZM2XV8Rl3fDsc3wLgvz3XA3iVMp4dkr0FNWavcsweOIVS61OBqjNA5ywL9uDlbgErNwKl02D/ndpeCXArFbPPgroeWnJz1xq0EN0lticuAI0H6ynGwb7dxHKSKfhA04DLD9DlJGFUOJMAsxSg2RwYfbSM+w5rolKo7HSIkC3O50eAN4s0XZivyBBZECx6qE/z5LMQd+2eDvQtEk+UtaVAS/PScirKF2gimsmnDjzBZ8R5EJefdYEX8fRnRSKVGMisMKDLvjtyXBl3Xz0dZzxlq77P5DyUCZBshRMLm036agQCg/kdlnA5A6RKnh5yZWtDPksoGWRsGdkSBuasyPUQa8ci64UA38ZVWEJ9ZN34r7ItXYI0MQNc6x3T4VkEfzOfXhDl4VO/rgY6qgZPvJJM5L+GBGTZTvqa5Te3UAub5ZmZ5TSYKbq02MnwRuUn7XN+/ASA98Pxre7409XxJ2vFF3VjD4qkqSUyZE6OjX6D6ccEzjDXlZ11Z+yfqazR1zVnVd0aB5P2M9XxEQDfBuC/PPcD98I+l9yvz7C0iXPjyyhlfBsCs9Og5ARTdQvb9KgA5IjRekSG6AyQfXB7PWL7Pnp7Jb1BaR2rIXgChEGhiVQRMhOrZBDf3Fm95IkkJuCWQqTVDlCDLdi5zLo8gC6/oU9cUH8pWkxsLF06V60/S3+0IgqoVuYC2dxZrDXz4OHmU1ONiozZGl9Bm9bOmByRWI+WMGbTCchrnFKgd5afyZYg3tzqm1TaFbBCcnPr1V9tFGM7Yb0pyMNkFpJEt9/wyC64AzC66Al9cmJsY1afBttTqLsElvuqN/HDiONpMmf+xHZnjPvybJdvi5E9lI5BZNkmeigV8W3vlIm/tl2wzv6JZbtmCu4Cn51udOC551oyrj8b37epFde3xECe2ux4O01LSfdlfHlI51xs51AkOJovF1sMOG2vg870mFiAtukmYUdX9HN9/CcAfwkV3+KG9znwB93xy1ttWQdEwozVM1JGLBwZE3CWZpkldWae/F1JGadcszpiPzdg9l8d+Bgcfwv2fBmyCZjhs1hb/mYd90rWmN/1XwGzt/hxQ1DyY7BCj/adhwCWRwSFuh9ZpMCZersz37Mbjqnf4zs7w7CbQazVg4HnxFh47CayVnMZZ2k4tSMHX6jz+0i6KV/JrjL2QvGrn5i1cuSf++o3FzpNeLLDR5eB7zMIApTmoUZmOoEwlHORMuaCwHmH5/+z13yeRhnYPELfzsBmJ199k/UxO+A9yypkhSNK5LI6sDFkvgY3s0W8J7HSTuYTYQDcjRJ05iKe0G4EqjfzEFuBy8Ut2RRoC0YrFOvNrqhIkkS8B1lv7diMNmrCNlR2zTRRGvrMXmxW9twdVsI9174y7lx3jPR4HKfSObsKbocqcosP8A2YZaN+HACzie5Z8TVt2TJ9zxZuqevZcKPJDxMxcAk8G8LVgiBMnIMaon0+/xZ2hnU1qfMKUY8iR3RurnZcufmHj82QRyI39cCivswzkObREV/SUSloTVHkwZ3RGSFWPNP6sjOPH4fj62D4gFf8fr/KHX+9MmdpwDTOSxkDEFtlmXkEaqeljJAcsxVT5vjXAD4M4BNw/Nzb7UBda8zOGH+cH1K/VMDsORl9ZMtljNkDQNN9gNOpNr9V2veIbNARiD1a5hRLtve9N7E9Hwv8lWyMtsxlRiJFE3lif7/MQdVh1hY5CPMzOAjLbGK643siTdthJ4CEKQNSTea0UVktE0831wVI9B1sGPzwpL6LZ999GsDF1CtMgzqwZb2wXzbJE+NvcOZZtN6X574GflPzs/GDI4muHsBphqjIzTcm4OhzePIEvD04RE4431dnZZwxcNqoPZCcAtrslUfwo1LBfMaC9sHrAkLr7Igj2fOpjSM4S5sghnGHdayY1Hm5iLGZ8ZLBeMqcMVgjuDB9L4PHJVwpM9TiKzSDRPEKLAmA8gDITISMNu3Uylw7q2abbhLbR3erG4klsYGWN496I03W+FgcEpvr3CZIbNJlLzOjRQER5F47seBLuerbdo7/DQAfdcd3OfAb3PFVteL3ueFXV7bGLwNc3SJl9HtKGdX8g6WMWdi0z/9+xIFPAPhuOD4Fw+XteoCujFkyObScRTie53+VY/aMHjvA7KEA7bA9H8KUPTXwuC8wu3UfHgp87wlm790WJ9m4UjFP9nLNzZTfuehGQr2OAbiM555MWiIJsNaxpSd1Lx3Y1Z3Wqpk9/hn3I1/MNWMGZmFn6syyhXoy+V3XpNasU7bUfsKW9hs2gRm2MYimIS7OcSqT1F/Q+rK89o2BoNdKDBK1rshdBxOT3KRcptrlME3iMLfOsOigOuOq0vfpOI5AbI9FLzrNL6xGts+w+Hx8tirygRTZ+CJ0yqjt04TkHi2gFiPrQKwW7Ly1Jek/VXGa1SVNEzuIJhqRuZjbaVfdU0oyQMcMtHSAntEyhwDNpqvRE9iVAzq9PkzWvhbu+QTELPmF+UxbBWx0ILS89g7uPst6XkxW+7aDhVIMpZef5Yd2WuOhlPFoR4B7CE+e6+PnAby+/fur7vjN7viqCvyuavh1wQgkkTD6I0sZ3fcljZn5R3X8kAPf48A/dOCfv1PG7S/wBh6PlX0JGbO3OzBrEjsKavb7gpRErncmE2sJkMxsD0CcOY437cSZdfI2HbTRoxuRPNK57Sd/286vBHmtiYClXUdXxSae4BlPJuwzr4gFoeR+codWNpEndNzp65Te8IMNyyiFve/kACsfiiNlteIve8KszdvlkYvBMnyYwF1s3cjHXIPLr9O21WQ7ndbjFpwUXcbPTUpnCbjllLM+6N+6yauszrvdezX1pLmeXHUbBQ6pY7N+byPXitadGGKKas//6qHSVNFHYKbnezXgSBkVlSSGfYOMjrDLMF0yLIb0UwKk+40DPRcuunFuv0BANIR7O7GznPHnV0dBeDKnEJSem5wT6MHZVzkdcb0aNO1xG8IAvO1LKTu9W5JhmC23nGnyZBAUZa/zVEPeb7SY6Jm1NumRWE7b0s5M4i2sP8dywsHSq7tgVhl0GSLh2wDSuL44wUJxYLLf1OH9DEcfLWeLLrUsfrGFr+FovvcdA8qyxz/b/v0Vd/xGd/z2DaT9qgr8ymo5g3arlDGAL+xLGSfzD+DHquM/VMf3u+GfAPgUgM+/0w7Evl3+rcPbJwBmJwfgpwe9tjfafwc+jgb9jymxuxFgPApgeQrW6DH28RHB1qNOMpyJSzgF+I9gqK+AbUIGLZZ3uw1t+31mcHfx9JETkp/b+b0uzB/p/TQsOvtk3eBRdpXLHu1Q2unS5Bo+vXZEDIN+O5L0rdbC2YEm0dm5QNKXDoieuo0ifOzJRIGPoGvfcXYMkwwiB3RucY+MdMdYOvuhreXJKcJyxljJlnvmL1o6fL6y1Pd0tiStBw2f+dw2Imf0M/2aWsQuL5sd+ZoaVtj5LtMW5icKqmz5wxkutAXTtObEdF2rYdqeUM8ypssSr5pE3pg1vZUbbj52EiMf3blsZ2BrRxYiN5d1v50fPw/gkwA+CceHAbwbjt8EwxdXx1dXwy+uwG/bQNgvDOYgoHo05FJGRx4sLQzZ/93+/mB1fMYNH3fHp93wL96ONWM3A7M3Pk8X4wFj68rmS49T7W1x5r5izJ5Bu73JLNE7HmC/6efVCrL4OdxjOHajPzslk0kXd4HZubXugof9m3e2I2eRYeZ1jpPfy8FlllSVeb0dYb+cQWM/yLpoK1/uif71lYvL6UO4NkHxdA2Om1b55l/56824tU/wG3bM8YB2eYbmCKXc/67ywDuMnT44tvsdT2Acg3BbmsTYyV99grvtCg/77T+eQqcHEVj2hDv+jnp8DsAPbs8/vp04X7J1QV/uhvdsDNfvrIZfEZgxS9gyAWTb6x+rhh/Y1vNpN3z/xrj/z5exwf8/KN3SXB79k9cAAAAASUVORK5CYII=); }\n\n.minicolors-no-data-uris .minicolors-sprite {\n background-image: url(jquery.minicolors.png); }\n\n.minicolors-swatch {\n position: absolute;\n vertical-align: middle;\n background-position: -80px 0;\n border: solid 1px #ccc;\n cursor: text;\n padding: 0;\n margin: 0;\n display: inline-block; }\n\n.minicolors-swatch-color {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n\n.minicolors input[type=hidden] + .minicolors-swatch {\n width: 28px;\n position: static;\n cursor: pointer; }\n\n.minicolors input[type=hidden][disabled] + .minicolors-swatch {\n cursor: default; }\n\n/* Panel */\n.minicolors-panel {\n position: absolute;\n width: 173px;\n height: 152px;\n background: white;\n border: solid 1px #CCC;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);\n z-index: 99999;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n display: none; }\n\n.minicolors-panel.minicolors-visible {\n display: block; }\n\n/* Panel positioning */\n.minicolors-position-top .minicolors-panel {\n top: -154px; }\n\n.minicolors-position-right .minicolors-panel {\n right: 0; }\n\n.minicolors-position-bottom .minicolors-panel {\n top: auto; }\n\n.minicolors-position-left .minicolors-panel {\n left: 0; }\n\n.minicolors-with-opacity .minicolors-panel {\n width: 194px; }\n\n.minicolors .minicolors-grid {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 150px;\n height: 150px;\n background-position: -120px 0;\n cursor: crosshair; }\n\n.minicolors .minicolors-grid-inner {\n position: absolute;\n top: 0;\n left: 0;\n width: 150px;\n height: 150px; }\n\n.minicolors-slider-saturation .minicolors-grid {\n background-position: -420px 0; }\n\n.minicolors-slider-saturation .minicolors-grid-inner {\n background-position: -270px 0;\n background-image: inherit; }\n\n.minicolors-slider-brightness .minicolors-grid {\n background-position: -570px 0; }\n\n.minicolors-slider-brightness .minicolors-grid-inner {\n background-color: black; }\n\n.minicolors-slider-wheel .minicolors-grid {\n background-position: -720px 0; }\n\n.minicolors-slider,\n.minicolors-opacity-slider {\n position: absolute;\n top: 1px;\n left: 152px;\n width: 20px;\n height: 150px;\n background-color: white;\n background-position: 0 0;\n cursor: row-resize; }\n\n.minicolors-slider-saturation .minicolors-slider {\n background-position: -60px 0; }\n\n.minicolors-slider-brightness .minicolors-slider {\n background-position: -20px 0; }\n\n.minicolors-slider-wheel .minicolors-slider {\n background-position: -20px 0; }\n\n.minicolors-opacity-slider {\n left: 173px;\n background-position: -40px 0;\n display: none; }\n\n.minicolors-with-opacity .minicolors-opacity-slider {\n display: block; }\n\n/* Pickers */\n.minicolors-grid .minicolors-picker {\n position: absolute;\n top: 70px;\n left: 70px;\n width: 12px;\n height: 12px;\n border: solid 1px black;\n border-radius: 10px;\n margin-top: -6px;\n margin-left: -6px;\n background: none; }\n\n.minicolors-grid .minicolors-picker > div {\n position: absolute;\n top: 0;\n left: 0;\n width: 8px;\n height: 8px;\n border-radius: 8px;\n border: solid 2px white;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box; }\n\n.minicolors-picker {\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 2px;\n background: white;\n border: solid 1px black;\n margin-top: -2px;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box; }\n\n/* Inline controls */\n.minicolors-inline {\n display: inline-block; }\n\n.minicolors-inline .minicolors-input {\n display: none !important; }\n\n.minicolors-inline .minicolors-panel {\n position: relative;\n top: auto;\n left: auto;\n box-shadow: none;\n z-index: auto;\n display: inline-block; }\n\n/* Default theme */\n.minicolors-theme-default .minicolors-swatch {\n top: 5px;\n left: 5px;\n width: 18px;\n height: 18px; }\n\n.minicolors-theme-default.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 5px; }\n\n.minicolors-theme-default.minicolors {\n width: auto;\n display: inline-block; }\n\n.minicolors-theme-default .minicolors-input {\n height: 20px;\n width: auto;\n display: inline-block;\n padding-left: 26px; }\n\n.minicolors-theme-default.minicolors-position-right .minicolors-input {\n padding-right: 26px;\n padding-left: inherit; }\n\n/* Bootstrap theme */\n.minicolors-theme-bootstrap .minicolors-swatch {\n z-index: 2;\n top: 3px;\n left: 3px;\n width: 28px;\n height: 28px;\n border-radius: 3px; }\n\n.minicolors-theme-bootstrap .minicolors-swatch-color {\n border-radius: inherit; }\n\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 3px; }\n\n.minicolors-theme-bootstrap .minicolors-input {\n float: none;\n padding-left: 44px; }\n\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {\n padding-right: 44px;\n padding-left: 12px; }\n\n.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch, .minicolors-theme-bootstrap .input-group-lg > .minicolors-input.form-control + .minicolors-swatch, .minicolors-theme-bootstrap\n.input-group-lg > .minicolors-input.input-group-addon + .minicolors-swatch, .minicolors-theme-bootstrap\n.input-group-lg > .input-group-btn > .minicolors-input.btn + .minicolors-swatch {\n top: 4px;\n left: 4px;\n width: 37px;\n height: 37px;\n border-radius: 5px; }\n\n.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch, .minicolors-theme-bootstrap .input-group-sm > .minicolors-input.form-control + .minicolors-swatch, .minicolors-theme-bootstrap\n.input-group-sm > .minicolors-input.input-group-addon + .minicolors-swatch, .minicolors-theme-bootstrap\n.input-group-sm > .input-group-btn > .minicolors-input.btn + .minicolors-swatch {\n width: 24px;\n height: 24px; }\n\n.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0; }\n\n@font-face {\n font-family: octicons-link;\n src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format(\"woff\"); }\n\n.markdown-body {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n line-height: 1.5;\n color: #333;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 16px;\n line-height: 1.5;\n word-wrap: break-word; }\n\n.markdown-body .pl-c {\n color: #969896; }\n\n.markdown-body .pl-c1,\n.markdown-body .pl-s .pl-v {\n color: #0086b3; }\n\n.markdown-body .pl-e,\n.markdown-body .pl-en {\n color: #795da3; }\n\n.markdown-body .pl-smi,\n.markdown-body .pl-s .pl-s1 {\n color: #333; }\n\n.markdown-body .pl-ent {\n color: #63a35c; }\n\n.markdown-body .pl-k {\n color: #a71d5d; }\n\n.markdown-body .pl-s,\n.markdown-body .pl-pds,\n.markdown-body .pl-s .pl-pse .pl-s1,\n.markdown-body .pl-sr,\n.markdown-body .pl-sr .pl-cce,\n.markdown-body .pl-sr .pl-sre,\n.markdown-body .pl-sr .pl-sra {\n color: #183691; }\n\n.markdown-body .pl-v {\n color: #ed6a43; }\n\n.markdown-body .pl-id {\n color: #b52a1d; }\n\n.markdown-body .pl-ii {\n color: #f8f8f8;\n background-color: #b52a1d; }\n\n.markdown-body .pl-sr .pl-cce {\n font-weight: bold;\n color: #63a35c; }\n\n.markdown-body .pl-ml {\n color: #693a17; }\n\n.markdown-body .pl-mh,\n.markdown-body .pl-mh .pl-en,\n.markdown-body .pl-ms {\n font-weight: bold;\n color: #1d3e81; }\n\n.markdown-body .pl-mq {\n color: #008080; }\n\n.markdown-body .pl-mi {\n font-style: italic;\n color: #333; }\n\n.markdown-body .pl-mb {\n font-weight: bold;\n color: #333; }\n\n.markdown-body .pl-md {\n color: #bd2c00;\n background-color: #ffecec; }\n\n.markdown-body .pl-mi1 {\n color: #55a532;\n background-color: #eaffea; }\n\n.markdown-body .pl-mdr {\n font-weight: bold;\n color: #795da3; }\n\n.markdown-body .pl-mo {\n color: #1d3e81; }\n\n.markdown-body .octicon {\n display: inline-block;\n vertical-align: text-top;\n fill: currentColor; }\n\n.markdown-body a {\n background-color: transparent;\n -webkit-text-decoration-skip: objects; }\n\n.markdown-body a:active,\n.markdown-body a:hover {\n outline-width: 0; }\n\n.markdown-body strong {\n font-weight: inherit; }\n\n.markdown-body strong {\n font-weight: bolder; }\n\n.markdown-body h1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n.markdown-body img {\n border-style: none; }\n\n.markdown-body svg:not(:root) {\n overflow: hidden; }\n\n.markdown-body code,\n.markdown-body kbd,\n.markdown-body pre {\n font-family: monospace, monospace;\n font-size: 1em; }\n\n.markdown-body hr {\n box-sizing: content-box;\n height: 0;\n overflow: visible; }\n\n.markdown-body input {\n font: inherit;\n margin: 0; }\n\n.markdown-body input {\n overflow: visible; }\n\n.markdown-body [type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0; }\n\n.markdown-body * {\n box-sizing: border-box; }\n\n.markdown-body input {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\n.markdown-body a {\n color: #4078c0;\n text-decoration: none; }\n\n.markdown-body a:hover,\n.markdown-body a:active {\n text-decoration: underline; }\n\n.markdown-body strong {\n font-weight: 600; }\n\n.markdown-body hr {\n height: 0;\n margin: 15px 0;\n overflow: hidden;\n background: transparent;\n border: 0;\n border-bottom: 1px solid #ddd; }\n\n.markdown-body hr::before {\n display: table;\n content: \"\"; }\n\n.markdown-body hr::after {\n display: table;\n clear: both;\n content: \"\"; }\n\n.markdown-body table {\n border-spacing: 0;\n border-collapse: collapse; }\n\n.markdown-body td,\n.markdown-body th {\n padding: 0; }\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 0;\n margin-bottom: 0; }\n\n.markdown-body h1 {\n font-size: 32px;\n font-weight: 600; }\n\n.markdown-body h2 {\n font-size: 24px;\n font-weight: 600; }\n\n.markdown-body h3 {\n font-size: 20px;\n font-weight: 600; }\n\n.markdown-body h4 {\n font-size: 16px;\n font-weight: 600; }\n\n.markdown-body h5 {\n font-size: 14px;\n font-weight: 600; }\n\n.markdown-body h6 {\n font-size: 12px;\n font-weight: 600; }\n\n.markdown-body p {\n margin-top: 0;\n margin-bottom: 10px; }\n\n.markdown-body blockquote {\n margin: 0; }\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 0;\n margin-top: 0;\n margin-bottom: 0; }\n\n.markdown-body ol ol,\n.markdown-body ul ol {\n list-style-type: lower-roman; }\n\n.markdown-body ul ul ol,\n.markdown-body ul ol ol,\n.markdown-body ol ul ol,\n.markdown-body ol ol ol {\n list-style-type: lower-alpha; }\n\n.markdown-body dd {\n margin-left: 0; }\n\n.markdown-body code {\n font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n font-size: 12px; }\n\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 0;\n font: 12px Consolas, \"Liberation Mono\", Menlo, Courier, monospace; }\n\n.markdown-body .octicon {\n vertical-align: text-bottom; }\n\n.markdown-body input {\n -webkit-font-feature-settings: \"liga\" 0;\n font-feature-settings: \"liga\" 0; }\n\n.markdown-body::before {\n display: table;\n content: \"\"; }\n\n.markdown-body::after {\n display: table;\n clear: both;\n content: \"\"; }\n\n.markdown-body > *:first-child {\n margin-top: 0 !important; }\n\n.markdown-body > *:last-child {\n margin-bottom: 0 !important; }\n\n.markdown-body a:not([href]) {\n color: inherit;\n text-decoration: none; }\n\n.markdown-body .anchor {\n float: left;\n padding-right: 4px;\n margin-left: -20px;\n line-height: 1; }\n\n.markdown-body .anchor:focus {\n outline: none; }\n\n.markdown-body p,\n.markdown-body blockquote,\n.markdown-body ul,\n.markdown-body ol,\n.markdown-body dl,\n.markdown-body table,\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 16px; }\n\n.markdown-body hr {\n height: 0.25em;\n padding: 0;\n margin: 24px 0;\n background-color: #e7e7e7;\n border: 0; }\n\n.markdown-body blockquote {\n padding: 0 1em;\n color: #777;\n border-left: 0.25em solid #ddd; }\n\n.markdown-body blockquote > :first-child {\n margin-top: 0; }\n\n.markdown-body blockquote > :last-child {\n margin-bottom: 0; }\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font-size: 11px;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb; }\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 24px;\n margin-bottom: 16px;\n font-weight: 600;\n line-height: 1.25; }\n\n.markdown-body h1 .octicon-link,\n.markdown-body h2 .octicon-link,\n.markdown-body h3 .octicon-link,\n.markdown-body h4 .octicon-link,\n.markdown-body h5 .octicon-link,\n.markdown-body h6 .octicon-link {\n color: #000;\n vertical-align: middle;\n visibility: hidden; }\n\n.markdown-body h1:hover .anchor,\n.markdown-body h2:hover .anchor,\n.markdown-body h3:hover .anchor,\n.markdown-body h4:hover .anchor,\n.markdown-body h5:hover .anchor,\n.markdown-body h6:hover .anchor {\n text-decoration: none; }\n\n.markdown-body h1:hover .anchor .octicon-link,\n.markdown-body h2:hover .anchor .octicon-link,\n.markdown-body h3:hover .anchor .octicon-link,\n.markdown-body h4:hover .anchor .octicon-link,\n.markdown-body h5:hover .anchor .octicon-link,\n.markdown-body h6:hover .anchor .octicon-link {\n visibility: visible; }\n\n.markdown-body h1 {\n padding-bottom: 0.3em;\n font-size: 2em;\n border-bottom: 1px solid #eee; }\n\n.markdown-body h2 {\n padding-bottom: 0.3em;\n font-size: 1.5em;\n border-bottom: 1px solid #eee; }\n\n.markdown-body h3 {\n font-size: 1.25em; }\n\n.markdown-body h4 {\n font-size: 1em; }\n\n.markdown-body h5 {\n font-size: 0.875em; }\n\n.markdown-body h6 {\n font-size: 0.85em;\n color: #777; }\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 2em; }\n\n.markdown-body ul ul,\n.markdown-body ul ol,\n.markdown-body ol ol,\n.markdown-body ol ul {\n margin-top: 0;\n margin-bottom: 0; }\n\n.markdown-body li > p {\n margin-top: 16px; }\n\n.markdown-body li + li {\n margin-top: 0.25em; }\n\n.markdown-body dl {\n padding: 0; }\n\n.markdown-body dl dt {\n padding: 0;\n margin-top: 16px;\n font-size: 1em;\n font-style: italic;\n font-weight: bold; }\n\n.markdown-body dl dd {\n padding: 0 16px;\n margin-bottom: 16px; }\n\n.markdown-body table {\n display: block;\n width: 100%;\n overflow: auto; }\n\n.markdown-body table th {\n font-weight: bold; }\n\n.markdown-body table th,\n.markdown-body table td {\n padding: 6px 13px;\n border: 1px solid #ddd; }\n\n.markdown-body table tr {\n background-color: #fff;\n border-top: 1px solid #ccc; }\n\n.markdown-body table tr:nth-child(2n) {\n background-color: #f8f8f8; }\n\n.markdown-body img {\n max-width: 100%;\n box-sizing: content-box;\n background-color: #fff; }\n\n.markdown-body code {\n padding: 0;\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(0, 0, 0, 0.04);\n border-radius: 3px; }\n\n.markdown-body code::before,\n.markdown-body code::after {\n letter-spacing: -0.2em;\n content: \"\\00a0\"; }\n\n.markdown-body pre {\n word-wrap: normal; }\n\n.markdown-body pre > code {\n padding: 0;\n margin: 0;\n font-size: 100%;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0; }\n\n.markdown-body .highlight {\n margin-bottom: 16px; }\n\n.markdown-body .highlight pre {\n margin-bottom: 0;\n word-break: normal; }\n\n.markdown-body .highlight pre,\n.markdown-body pre {\n padding: 16px;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: #f7f7f7;\n border-radius: 3px; }\n\n.markdown-body pre code {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0; }\n\n.markdown-body pre code::before,\n.markdown-body pre code::after {\n content: normal; }\n\n.markdown-body .pl-0 {\n padding-left: 0 !important; }\n\n.markdown-body .pl-1 {\n padding-left: 3px !important; }\n\n.markdown-body .pl-2 {\n padding-left: 6px !important; }\n\n.markdown-body .pl-3 {\n padding-left: 12px !important; }\n\n.markdown-body .pl-4 {\n padding-left: 24px !important; }\n\n.markdown-body .pl-5 {\n padding-left: 36px !important; }\n\n.markdown-body .pl-6 {\n padding-left: 48px !important; }\n\n.markdown-body .full-commit .btn-outline:not(:disabled):hover {\n color: #4078c0;\n border: 1px solid #4078c0; }\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb; }\n\n.markdown-body :checked + .radio-label {\n position: relative;\n z-index: 1;\n border-color: #4078c0; }\n\n.markdown-body .task-list-item {\n list-style-type: none; }\n\n.markdown-body .task-list-item + .task-list-item {\n margin-top: 3px; }\n\n.markdown-body .task-list-item input {\n margin: 0 0.2em 0.25em -1.6em;\n vertical-align: middle; }\n\n.markdown-body hr {\n border-bottom-color: #eee; }\n\n.swal2-overlay {\n background-color: rgba(0, 0, 0, 0.4);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: none;\n z-index: 1000; }\n\n.swal2-modal {\n background-color: #fff;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n border-radius: 5px;\n box-sizing: border-box;\n text-align: center;\n position: fixed;\n left: 50%;\n top: 50%;\n margin-top: -200px;\n max-height: 90%;\n overflow-x: hidden;\n overflow-y: auto;\n display: none;\n z-index: 2000; }\n .swal2-modal:focus {\n outline: none; }\n .swal2-modal.loading {\n overflow-y: hidden; }\n .swal2-modal h2 {\n color: #575757;\n font-size: 30px;\n text-align: center;\n font-weight: 600;\n text-transform: none;\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 60px;\n display: block; }\n .swal2-modal .swal2-spacer {\n height: 10px;\n color: transparent;\n border: 0; }\n .swal2-modal button.styled {\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: #fff;\n cursor: pointer;\n font-size: 17px;\n font-weight: 500;\n margin: 0 5px;\n padding: 10px 32px; }\n .swal2-modal button.styled:not(.loading)[disabled] {\n opacity: .4;\n cursor: no-drop; }\n .swal2-modal button.styled.loading {\n box-sizing: border-box;\n border: 4px solid transparent;\n border-color: transparent;\n width: 40px;\n height: 40px;\n padding: 0;\n margin: -2px 30px;\n vertical-align: top;\n background-color: transparent !important;\n color: transparent;\n cursor: default;\n border-radius: 100%;\n animation: rotate-loading 1.5s linear 0s infinite normal; }\n .swal2-modal button:not(.styled).loading:after {\n display: inline-block;\n content: \"\";\n margin-left: 5px;\n vertical-align: -1px;\n height: 6px;\n width: 6px;\n border: 3px solid #999;\n border-right-color: transparent;\n border-radius: 50%;\n animation: rotate-loading 1.5s linear 0s infinite normal; }\n .swal2-modal .swal2-image {\n margin: 20px auto;\n max-width: 100%; }\n .swal2-modal .swal2-close {\n font-size: 36px;\n line-height: 36px;\n font-family: serif;\n position: absolute;\n top: 5px;\n right: 13px;\n cursor: pointer;\n color: #cfcfcf;\n transition: all 0.1s ease; }\n .swal2-modal .swal2-close:hover {\n color: #d55; }\n .swal2-modal > .swal2-input,\n .swal2-modal > .swal2-textarea,\n .swal2-modal > .swal2-select,\n .swal2-modal > .swal2-radio,\n .swal2-modal > .swal2-checkbox {\n display: none; }\n .swal2-modal .swal2-content {\n font-size: 18px;\n text-align: center;\n font-weight: 300;\n position: relative;\n float: none;\n margin: 0;\n padding: 0;\n line-height: normal;\n color: #555; }\n .swal2-modal .swal2-input,\n .swal2-modal .swal2-textarea,\n .swal2-modal .swal2-select,\n .swal2-modal .swal2-radio,\n .swal2-modal .swal2-checkbox,\n .swal2-modal .swal2-range input,\n .swal2-modal .swal2-range output {\n margin: 20px auto; }\n .swal2-modal .swal2-input:not([type=\"file\"]), .swal2-modal .swal2-textarea {\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n border: 1px solid #d7d7d7;\n font-size: 18px;\n box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n transition: all 0.3s; }\n .swal2-modal .swal2-input:not([type=\"file\"]).error, .swal2-modal .swal2-textarea.error {\n border-color: #f06e57 !important; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus, .swal2-modal .swal2-textarea:focus {\n outline: none;\n box-shadow: 0px 0px 3px #c4e6f5;\n border: 1px solid #b4dbed; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus::-moz-placeholder, .swal2-modal .swal2-textarea:focus::-moz-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus:-ms-input-placeholder, .swal2-modal .swal2-textarea:focus:-ms-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"]):focus::-webkit-input-placeholder, .swal2-modal .swal2-textarea:focus::-webkit-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8; }\n .swal2-modal .swal2-input:not([type=\"file\"])::-moz-placeholder, .swal2-modal .swal2-textarea::-moz-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-input:not([type=\"file\"]):-ms-input-placeholder, .swal2-modal .swal2-textarea:-ms-input-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-input:not([type=\"file\"])::-webkit-input-placeholder, .swal2-modal .swal2-textarea::-webkit-input-placeholder {\n color: #bdbdbd; }\n .swal2-modal .swal2-range input {\n float: left;\n padding: 0 !important;\n width: 80% !important; }\n .swal2-modal .swal2-range output {\n float: right;\n font-size: 20px;\n font-weight: 600; }\n .swal2-modal .swal2-input:not([type=\"file\"]),\n .swal2-modal .swal2-range input,\n .swal2-modal .swal2-range output {\n height: 43px;\n line-height: 43px;\n vertical-align: middle;\n padding: 0 12px; }\n .swal2-modal .swal2-input[type=\"file\"] {\n font-size: 20px; }\n .swal2-modal .swal2-input[type=\"number\"] {\n max-width: 150px; }\n .swal2-modal .swal2-textarea {\n height: 108px;\n padding: 12px; }\n .swal2-modal .swal2-select {\n color: #555;\n font-size: inherit;\n padding: 5px 10px;\n min-width: 40%;\n max-width: 100%; }\n .swal2-modal .swal2-radio {\n border: 0; }\n .swal2-modal .swal2-radio label:not(:first-child) {\n margin-left: 20px; }\n .swal2-modal .swal2-radio input, .swal2-modal .swal2-radio span {\n vertical-align: middle; }\n .swal2-modal .swal2-radio input {\n margin: 0 3px 0 0; }\n .swal2-modal .swal2-checkbox {\n color: #555; }\n .swal2-modal .swal2-checkbox input, .swal2-modal .swal2-checkbox span {\n vertical-align: middle; }\n .swal2-modal .swal2-validationerror {\n background-color: #f1f1f1;\n margin: 0 -20px;\n overflow: hidden;\n padding: 10px;\n color: #797979;\n font-size: 16px;\n font-weight: 300;\n display: none; }\n .swal2-modal .swal2-validationerror::before {\n content: \"!\";\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: #ea7d7d;\n color: white;\n line-height: 24px;\n text-align: center;\n margin-right: 10px; }\n\n.swal2-icon {\n width: 80px;\n height: 80px;\n border: 4px solid #808080;\n border-radius: 50%;\n margin: 20px auto 30px;\n padding: 0;\n position: relative;\n box-sizing: content-box;\n cursor: default;\n /* http://stackoverflow.com/a/4407335/1331425 */\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .swal2-icon.swal2-error {\n border-color: #f27474; }\n .swal2-icon.swal2-error .x-mark {\n position: relative;\n display: block; }\n .swal2-icon.swal2-error .line {\n position: absolute;\n height: 5px;\n width: 47px;\n background-color: #f27474;\n display: block;\n top: 37px;\n border-radius: 2px; }\n .swal2-icon.swal2-error .line.left {\n transform: rotate(45deg);\n left: 17px; }\n .swal2-icon.swal2-error .line.right {\n transform: rotate(-45deg);\n right: 16px; }\n .swal2-icon.swal2-warning {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #f8bb86;\n border-color: #f8bb86;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-info {\n font-family: \"Open Sans\", sans-serif;\n color: #3fc3ee;\n border-color: #3fc3ee;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-question {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #c9dae1;\n border-color: #c9dae1;\n font-size: 60px;\n line-height: 80px;\n text-align: center; }\n .swal2-icon.swal2-success {\n border-color: #a5dc86; }\n .swal2-icon.swal2-success::before, .swal2-icon.swal2-success::after {\n content: '';\n border-radius: 50%;\n position: absolute;\n width: 60px;\n height: 120px;\n background: #fff;\n transform: rotate(45deg); }\n .swal2-icon.swal2-success::before {\n border-radius: 120px 0 0 120px;\n top: -7px;\n left: -33px;\n transform: rotate(-45deg);\n transform-origin: 60px 60px; }\n .swal2-icon.swal2-success::after {\n border-radius: 0 120px 120px 0;\n top: -11px;\n left: 30px;\n transform: rotate(-45deg);\n transform-origin: 0 60px; }\n .swal2-icon.swal2-success .placeholder {\n width: 80px;\n height: 80px;\n border: 4px solid rgba(165, 220, 134, 0.2);\n border-radius: 50%;\n box-sizing: content-box;\n position: absolute;\n left: -4px;\n top: -4px;\n z-index: 2; }\n .swal2-icon.swal2-success .fix {\n width: 7px;\n height: 90px;\n background-color: #fff;\n position: absolute;\n left: 28px;\n top: 8px;\n z-index: 1;\n transform: rotate(-45deg); }\n .swal2-icon.swal2-success .line {\n height: 5px;\n background-color: #a5dc86;\n display: block;\n border-radius: 2px;\n position: absolute;\n z-index: 2; }\n .swal2-icon.swal2-success .line.tip {\n width: 25px;\n left: 14px;\n top: 46px;\n transform: rotate(45deg); }\n .swal2-icon.swal2-success .line.long {\n width: 47px;\n right: 8px;\n top: 38px;\n transform: rotate(-45deg); }\n\n.swal2-progresssteps {\n font-weight: 600;\n margin: 0 0 20px;\n padding: 0; }\n .swal2-progresssteps li {\n display: inline-block;\n position: relative; }\n .swal2-progresssteps .swal2-progresscircle {\n background: #3085d6;\n border-radius: 2em;\n color: #fff;\n height: 2em;\n line-height: 2em;\n text-align: center;\n width: 2em;\n z-index: 20; }\n .swal2-progresssteps .swal2-progresscircle:first-child {\n margin-left: 0; }\n .swal2-progresssteps .swal2-progresscircle:last-child {\n margin-right: 0; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep {\n background: #3085d6; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progresscircle {\n background: #add8e6; }\n .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progressline {\n background: #add8e6; }\n .swal2-progresssteps .swal2-progressline {\n background: #3085d6;\n height: 0.4em;\n margin: 0 -1px;\n z-index: 10; }\n\n/* github.com/limonte/sweetalert2/issues/268 */\n[class^=swal2] {\n -webkit-tap-highlight-color: transparent; }\n\n@keyframes showSweetAlert {\n 0% {\n transform: scale(0.7); }\n 45% {\n transform: scale(1.05); }\n 80% {\n transform: scale(0.95); }\n 100% {\n transform: scale(1); } }\n\n@keyframes hideSweetAlert {\n 0% {\n transform: scale(1);\n opacity: 1; }\n 100% {\n transform: scale(0.5);\n opacity: 0; } }\n\n.show-swal2 {\n animation: showSweetAlert 0.3s; }\n .show-swal2.no-animation {\n animation: none; }\n\n.hide-swal2 {\n animation: hideSweetAlert 0.15s forwards; }\n .hide-swal2.no-animation {\n animation: none; }\n\n@keyframes animate-success-tip {\n 0% {\n width: 0;\n left: 1px;\n top: 19px; }\n 54% {\n width: 0;\n left: 1px;\n top: 19px; }\n 70% {\n width: 50px;\n left: -8px;\n top: 37px; }\n 84% {\n width: 17px;\n left: 21px;\n top: 48px; }\n 100% {\n width: 25px;\n left: 14px;\n top: 45px; } }\n\n@keyframes animate-success-long {\n 0% {\n width: 0;\n right: 46px;\n top: 54px; }\n 65% {\n width: 0;\n right: 46px;\n top: 54px; }\n 84% {\n width: 55px;\n right: 0;\n top: 35px; }\n 100% {\n width: 47px;\n right: 8px;\n top: 38px; } }\n\n@keyframes rotatePlaceholder {\n 0% {\n transform: rotate(-45deg); }\n 5% {\n transform: rotate(-45deg); }\n 12% {\n transform: rotate(-405deg); }\n 100% {\n transform: rotate(-405deg); } }\n\n.animate-success-tip {\n animation: animate-success-tip 0.75s; }\n\n.animate-success-long {\n animation: animate-success-long 0.75s; }\n\n.swal2-icon.swal2-success.animate::after {\n animation: rotatePlaceholder 4.25s ease-in; }\n\n@keyframes animate-error-icon {\n 0% {\n transform: rotateX(100deg);\n opacity: 0; }\n 100% {\n transform: rotateX(0deg);\n opacity: 1; } }\n\n.animate-error-icon {\n animation: animate-error-icon 0.5s; }\n\n@keyframes animate-x-mark {\n 0% {\n transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 50% {\n transform: scale(0.4);\n margin-top: 26px;\n opacity: 0; }\n 80% {\n transform: scale(1.15);\n margin-top: -6px; }\n 100% {\n transform: scale(1);\n margin-top: 0;\n opacity: 1; } }\n\n.animate-x-mark {\n animation: animate-x-mark 0.5s; }\n\n@keyframes pulse-warning {\n 0% {\n border-color: #f8d486; }\n 100% {\n border-color: #f8bb86; } }\n\n.pulse-warning {\n animation: pulse-warning 0.75s infinite alternate; }\n\n@keyframes rotate-loading {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n.swal2-modal button {\n margin-right: 8px; }\n\nul.messenger {\n margin: 0;\n padding: 0; }\n\nul.messenger > li {\n list-style: none;\n margin: 0;\n padding: 0; }\n\nul.messenger.messenger-empty {\n display: none; }\n\nul.messenger .messenger-message {\n overflow: hidden;\n *zoom: 1; }\n\nul.messenger .messenger-message.messenger-hidden {\n display: none; }\n\nul.messenger .messenger-message .messenger-phrase, ul.messenger .messenger-message .messenger-actions a {\n padding-right: 5px; }\n\nul.messenger .messenger-message .messenger-actions {\n float: right; }\n\nul.messenger .messenger-message .messenger-actions a {\n cursor: pointer;\n text-decoration: underline; }\n\nul.messenger .messenger-message ul, ul.messenger .messenger-message ol {\n margin: 10px 18px 0; }\n\nul.messenger.messenger-fixed {\n position: fixed;\n z-index: 10000; }\n\nul.messenger.messenger-fixed .messenger-message {\n min-width: 0;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\nul.messenger.messenger-fixed .message .messenger-actions {\n float: left; }\n\nul.messenger.messenger-fixed.messenger-on-top {\n top: 20px; }\n\nul.messenger.messenger-fixed.messenger-on-bottom {\n bottom: 20px; }\n\nul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 50%;\n width: 600px;\n margin-left: -300px; }\n\n@media (max-width: 960px) {\n ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 10%;\n width: 80%;\n margin-left: 0px; } }\n\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right {\n right: 20px;\n left: auto; }\n\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-left, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left {\n left: 20px;\n margin-left: 0px; }\n\nul.messenger.messenger-fixed.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-left {\n width: 350px; }\n\nul.messenger.messenger-fixed.messenger-on-right .messenger-actions, ul.messenger.messenger-fixed.messenger-on-left .messenger-actions {\n float: left; }\n\nul.messenger .messenger-spinner {\n display: none; }\n\n@-webkit-keyframes ui-spinner-rotate-right {\n 0% {\n -webkit-transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(180deg); }\n 50% {\n -webkit-transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(360deg); }\n 100% {\n -webkit-transform: rotate(360deg); } }\n\n@-webkit-keyframes ui-spinner-rotate-left {\n 0% {\n -webkit-transform: rotate(0deg); }\n 25% {\n -webkit-transform: rotate(0deg); }\n 50% {\n -webkit-transform: rotate(180deg); }\n 75% {\n -webkit-transform: rotate(180deg); }\n 100% {\n -webkit-transform: rotate(360deg); } }\n\n@-moz-keyframes ui-spinner-rotate-right {\n 0% {\n -moz-transform: rotate(0deg); }\n 25% {\n -moz-transform: rotate(180deg); }\n 50% {\n -moz-transform: rotate(180deg); }\n 75% {\n -moz-transform: rotate(360deg); }\n 100% {\n -moz-transform: rotate(360deg); } }\n\n@-moz-keyframes ui-spinner-rotate-left {\n 0% {\n -moz-transform: rotate(0deg); }\n 25% {\n -moz-transform: rotate(0deg); }\n 50% {\n -moz-transform: rotate(180deg); }\n 75% {\n -moz-transform: rotate(180deg); }\n 100% {\n -moz-transform: rotate(360deg); } }\n\n@keyframes ui-spinner-rotate-right {\n 0% {\n transform: rotate(0deg); }\n 25% {\n transform: rotate(180deg); }\n 50% {\n transform: rotate(180deg); }\n 75% {\n transform: rotate(360deg); }\n 100% {\n transform: rotate(360deg); } }\n\n@keyframes ui-spinner-rotate-left {\n 0% {\n transform: rotate(0deg); }\n 25% {\n transform: rotate(0deg); }\n 50% {\n transform: rotate(180deg); }\n 75% {\n transform: rotate(180deg); }\n 100% {\n transform: rotate(360deg); } }\n\n.messenger-spinner {\n position: relative;\n border-radius: 100%; }\n\nul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {\n display: block; }\n\n.messenger-spinner .messenger-spinner-side {\n width: 50%;\n height: 100%;\n overflow: hidden;\n position: absolute; }\n\n.messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n border-radius: 999px;\n position: absolute;\n width: 100%;\n height: 100%;\n -webkit-animation-iteration-count: infinite;\n -moz-animation-iteration-count: infinite;\n -ms-animation-iteration-count: infinite;\n -o-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n -webkit-animation-timing-function: linear;\n -moz-animation-timing-function: linear;\n -ms-animation-timing-function: linear;\n -o-animation-timing-function: linear;\n animation-timing-function: linear; }\n\n.messenger-spinner .messenger-spinner-side-left {\n left: 0; }\n\n.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill {\n left: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-left;\n -moz-animation-name: ui-spinner-rotate-left;\n -ms-animation-name: ui-spinner-rotate-left;\n -o-animation-name: ui-spinner-rotate-left;\n animation-name: ui-spinner-rotate-left;\n -webkit-transform-origin: 0 50%;\n -moz-transform-origin: 0 50%;\n -ms-transform-origin: 0 50%;\n -o-transform-origin: 0 50%;\n transform-origin: 0 50%; }\n\n.messenger-spinner .messenger-spinner-side-right {\n left: 50%; }\n\n.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill {\n left: -100%;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-right;\n -moz-animation-name: ui-spinner-rotate-right;\n -ms-animation-name: ui-spinner-rotate-right;\n -o-animation-name: ui-spinner-rotate-right;\n animation-name: ui-spinner-rotate-right;\n -webkit-transform-origin: 100% 50%;\n -moz-transform-origin: 100% 50%;\n -ms-transform-origin: 100% 50%;\n -o-transform-origin: 100% 50%;\n transform-origin: 100% 50%; }\n\nul.messenger-theme-air {\n -moz-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n user-select: none;\n font-family: \"Raleway\", sans-serif; }\n\nul.messenger-theme-air .messenger-message {\n -webkit-transition: background-color 0.4s;\n -moz-transition: background-color 0.4s;\n -o-transition: background-color 0.4s;\n transition: background-color 0.4s;\n -webkit-border-radius: 5px;\n -moz-border-radius: 5px;\n -ms-border-radius: 5px;\n -o-border-radius: 5px;\n border-radius: 5px;\n -webkit-box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n -moz-box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n border: 0px;\n background-color: white;\n position: relative;\n margin-bottom: 1em;\n font-size: 13px;\n color: #666666;\n font-weight: 500;\n padding: 10px 30px 11px 46px; }\n\nul.messenger-theme-air .messenger-message:hover {\n background-color: white; }\n\nul.messenger-theme-air .messenger-message .messenger-close {\n position: absolute;\n top: 0px;\n right: 0px;\n color: #888888;\n opacity: 1;\n font-weight: bold;\n display: block;\n font-size: 20px;\n line-height: 20px;\n padding: 8px 10px 7px 7px;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\nul.messenger-theme-air .messenger-message .messenger-close:hover {\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-close:active {\n color: #222222; }\n\nul.messenger-theme-air .messenger-message .messenger-actions {\n float: none;\n margin-top: 10px; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n -ms-border-radius: 4px;\n -o-border-radius: 4px;\n border-radius: 4px;\n text-decoration: none;\n display: inline-block;\n padding: 10px;\n color: #888888;\n margin-right: 10px;\n padding: 3px 10px 5px;\n text-transform: capitalize; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a:hover {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-actions a:active {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n background: rgba(0, 0, 0, 0.04);\n color: #444444; }\n\nul.messenger-theme-air .messenger-message .messenger-actions .messenger-phrase {\n display: none; }\n\nul.messenger-theme-air .messenger-message .messenger-message-inner:before {\n -webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n -moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n -webkit-border-radius: 50%;\n -moz-border-radius: 50%;\n -ms-border-radius: 50%;\n -o-border-radius: 50%;\n border-radius: 50%;\n position: absolute;\n left: 17px;\n display: block;\n content: \" \";\n top: 50%;\n margin-top: -8px;\n height: 13px;\n width: 13px;\n z-index: 20; }\n\nul.messenger-theme-air .messenger-message.alert-success .messenger-message-inner:before {\n background-color: #5fca4a; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 20s;\n -moz-animation-duration: 20s;\n -ms-animation-duration: 20s;\n -o-animation-duration: 20s;\n animation-duration: 20s;\n opacity: 1; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 600s;\n -moz-animation-duration: 600s;\n -ms-animation-duration: 600s;\n -o-animation-duration: 600s;\n animation-duration: 600s;\n opacity: 1; }\n\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block; }\n\nul.messenger-theme-air .messenger-message.alert-error .messenger-message-inner:before {\n background-color: #dd6a45; }\n\nul.messenger-theme-air .messenger-message.alert-info .messenger-message-inner:before {\n background-color: #61c4b8; }\n\nul.messenger-theme-air .messenger-spinner {\n display: block;\n position: absolute;\n left: 12px;\n top: 50%;\n margin-top: -13px;\n z-index: 999;\n height: 24px;\n width: 24px;\n z-index: 10; }\n\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license - http://opensource.org/licenses/MIT\nCopyright (c) 2015 Daniel Eden\n*/\nbody {\n -webkit-backface-visibility: hidden; }\n\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both; }\n .animated.infinite {\n animation-iteration-count: infinite; }\n .animated.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s; }\n .animated.bounceIn, .animated.bounceOut {\n -webkit-animation-duration: 0.75s;\n animation-duration: 0.75s; }\n .animated.flipOutX, .animated.flipOutY {\n -webkit-animation-duration: 0.75s;\n animation-duration: 0.75s; }\n\nbody {\n -webkit-backface-visibility: hidden; }\n\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both; }\n .animated.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s; }\n\n.bootstrap-datetimepicker-widget {\n list-style: none; }\n .bootstrap-datetimepicker-widget.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em; }\n @media (min-width: 768px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 992px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 1200px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {\n content: '';\n display: inline-block;\n position: absolute; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n top: -7px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n top: -6px;\n left: 8px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid #ccc;\n border-top-color: rgba(0, 0, 0, 0.2);\n bottom: -7px;\n left: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid white;\n bottom: -6px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {\n left: auto;\n right: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {\n left: auto;\n right: 7px; }\n .bootstrap-datetimepicker-widget .list-unstyled {\n margin: 0; }\n .bootstrap-datetimepicker-widget a[data-action] {\n padding: 6px 0; }\n .bootstrap-datetimepicker-widget a[data-action]:active {\n box-shadow: none; }\n .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: 1.2em;\n margin: 0; }\n .bootstrap-datetimepicker-widget button[data-action] {\n padding: 6px; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after {\n content: \"Increment Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after {\n content: \"Increment Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after {\n content: \"Decrement Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after {\n content: \"Decrement Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after {\n content: \"Show Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after {\n content: \"Show Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after {\n content: \"Toggle AM/PM\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after {\n content: \"Clear the picker\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after {\n content: \"Set the date to today\"; }\n .bootstrap-datetimepicker-widget .picker-switch {\n text-align: center; }\n .bootstrap-datetimepicker-widget .picker-switch::after {\n content: \"Toggle Date and Time Screens\"; }\n .bootstrap-datetimepicker-widget .picker-switch td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit; }\n .bootstrap-datetimepicker-widget .picker-switch td span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%; }\n .bootstrap-datetimepicker-widget table {\n width: 100%;\n margin: 0; }\n .bootstrap-datetimepicker-widget table td,\n .bootstrap-datetimepicker-widget table th {\n text-align: center;\n border-radius: 3px; }\n .bootstrap-datetimepicker-widget table th {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table th.picker-switch {\n width: 145px; }\n .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table th.prev::after {\n content: \"Previous Month\"; }\n .bootstrap-datetimepicker-widget table th.next::after {\n content: \"Next Month\"; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th {\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {\n background: #e8e8e8; }\n .bootstrap-datetimepicker-widget table td {\n height: 54px;\n line-height: 54px;\n width: 54px; }\n .bootstrap-datetimepicker-widget table td.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: #999; }\n .bootstrap-datetimepicker-widget table td.day {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {\n background: #e8e8e8;\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {\n color: #999; }\n .bootstrap-datetimepicker-widget table td.today {\n position: relative; }\n .bootstrap-datetimepicker-widget table td.today:before {\n content: '';\n display: inline-block;\n border: solid transparent;\n border-width: 0 0 7px 7px;\n border-bottom-color: #7ED321;\n border-top-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n bottom: 4px;\n right: 4px; }\n .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {\n background-color: #7ED321;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td.active.today:before {\n border-bottom-color: #fff; }\n .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table td span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: 3px; }\n .bootstrap-datetimepicker-widget table td span:hover {\n background: #e8e8e8; }\n .bootstrap-datetimepicker-widget table td span.active {\n background-color: #7ED321;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td span.old {\n color: #999; }\n .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {\n background: none;\n color: #999;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget.usetwentyfour td.hour {\n height: 27px;\n line-height: 27px; }\n\n.input-group.date .input-group-addon {\n cursor: pointer; }\n\n.strengthify-wrapper > * {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n opacity: 0;\n -webkit-transition: all .5s ease-in-out;\n -moz-transition: all .5s ease-in-out;\n transition: all .5s ease-in-out; }\n\n.strengthify-wrapper {\n position: relative; }\n\n.strengthify-bg, .strengthify-container, .strengthify-wrapper, .strengthify-separator {\n height: 8px; }\n\n.strengthify-bg, .strengthify-container {\n display: block;\n position: absolute;\n width: 100%; }\n\n.strengthify-bg {\n background-color: #eeeeee; }\n\n.strengthify-separator {\n display: inline-block;\n position: absolute;\n background-color: #ffffff;\n width: 2px;\n z-index: 10; }\n\n.password-bad {\n background-color: #ff6f6f; }\n\n.password-medium {\n background-color: #F7CA18; }\n\n.password-good {\n background-color: #7ED321; }\n\n.sortable-chosen {\n border: 1px solid #e8e8e8 !important;\n background-color: #f0f3f4; }\n","@import \"ionicons-variables\";\n/*!\n Ionicons, v#{$ionicons-version}\n Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n https://twitter.com/benjsperry https://twitter.com/ionicframework\n MIT License: https://github.com/driftyco/ionicons\n\n Android-style icons originally built by Google’s\n Material Design Icons: https://github.com/google/material-design-icons\n used under CC BY http://creativecommons.org/licenses/by/4.0/\n Modified icons to fit ionicon’s grid from original.\n*/\n\n@import \"ionicons-font\";\n@import \"ionicons-icons\";\n","// Ionicons Font Path\n// --------------------------\n\n@font-face {\n font-family: $ionicons-font-family;\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}\");\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix\") format(\"embedded-opentype\"),\n url(\"#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}\") format(\"truetype\"),\n url(\"#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}\") format(\"woff\"),\n url(\"#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.ion {\n display: inline-block;\n font-family: $ionicons-font-family;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}","// Ionicons Variables\n// --------------------------\n\n$ionicons-font-path: \"../fonts\" !default;\n$ionicons-font-family: \"Ionicons\" !default;\n$ionicons-version: \"2.0.1\" !default;\n$ionicons-prefix: ion- !default;\n\n$ionicon-var-alert: \"\\f101\";\n$ionicon-var-alert-circled: \"\\f100\";\n$ionicon-var-android-add: \"\\f2c7\";\n$ionicon-var-android-add-circle: \"\\f359\";\n$ionicon-var-android-alarm-clock: \"\\f35a\";\n$ionicon-var-android-alert: \"\\f35b\";\n$ionicon-var-android-apps: \"\\f35c\";\n$ionicon-var-android-archive: \"\\f2c9\";\n$ionicon-var-android-arrow-back: \"\\f2ca\";\n$ionicon-var-android-arrow-down: \"\\f35d\";\n$ionicon-var-android-arrow-dropdown: \"\\f35f\";\n$ionicon-var-android-arrow-dropdown-circle: \"\\f35e\";\n$ionicon-var-android-arrow-dropleft: \"\\f361\";\n$ionicon-var-android-arrow-dropleft-circle: \"\\f360\";\n$ionicon-var-android-arrow-dropright: \"\\f363\";\n$ionicon-var-android-arrow-dropright-circle: \"\\f362\";\n$ionicon-var-android-arrow-dropup: \"\\f365\";\n$ionicon-var-android-arrow-dropup-circle: \"\\f364\";\n$ionicon-var-android-arrow-forward: \"\\f30f\";\n$ionicon-var-android-arrow-up: \"\\f366\";\n$ionicon-var-android-attach: \"\\f367\";\n$ionicon-var-android-bar: \"\\f368\";\n$ionicon-var-android-bicycle: \"\\f369\";\n$ionicon-var-android-boat: \"\\f36a\";\n$ionicon-var-android-bookmark: \"\\f36b\";\n$ionicon-var-android-bulb: \"\\f36c\";\n$ionicon-var-android-bus: \"\\f36d\";\n$ionicon-var-android-calendar: \"\\f2d1\";\n$ionicon-var-android-call: \"\\f2d2\";\n$ionicon-var-android-camera: \"\\f2d3\";\n$ionicon-var-android-cancel: \"\\f36e\";\n$ionicon-var-android-car: \"\\f36f\";\n$ionicon-var-android-cart: \"\\f370\";\n$ionicon-var-android-chat: \"\\f2d4\";\n$ionicon-var-android-checkbox: \"\\f374\";\n$ionicon-var-android-checkbox-blank: \"\\f371\";\n$ionicon-var-android-checkbox-outline: \"\\f373\";\n$ionicon-var-android-checkbox-outline-blank: \"\\f372\";\n$ionicon-var-android-checkmark-circle: \"\\f375\";\n$ionicon-var-android-clipboard: \"\\f376\";\n$ionicon-var-android-close: \"\\f2d7\";\n$ionicon-var-android-cloud: \"\\f37a\";\n$ionicon-var-android-cloud-circle: \"\\f377\";\n$ionicon-var-android-cloud-done: \"\\f378\";\n$ionicon-var-android-cloud-outline: \"\\f379\";\n$ionicon-var-android-color-palette: \"\\f37b\";\n$ionicon-var-android-compass: \"\\f37c\";\n$ionicon-var-android-contact: \"\\f2d8\";\n$ionicon-var-android-contacts: \"\\f2d9\";\n$ionicon-var-android-contract: \"\\f37d\";\n$ionicon-var-android-create: \"\\f37e\";\n$ionicon-var-android-delete: \"\\f37f\";\n$ionicon-var-android-desktop: \"\\f380\";\n$ionicon-var-android-document: \"\\f381\";\n$ionicon-var-android-done: \"\\f383\";\n$ionicon-var-android-done-all: \"\\f382\";\n$ionicon-var-android-download: \"\\f2dd\";\n$ionicon-var-android-drafts: \"\\f384\";\n$ionicon-var-android-exit: \"\\f385\";\n$ionicon-var-android-expand: \"\\f386\";\n$ionicon-var-android-favorite: \"\\f388\";\n$ionicon-var-android-favorite-outline: \"\\f387\";\n$ionicon-var-android-film: \"\\f389\";\n$ionicon-var-android-folder: \"\\f2e0\";\n$ionicon-var-android-folder-open: \"\\f38a\";\n$ionicon-var-android-funnel: \"\\f38b\";\n$ionicon-var-android-globe: \"\\f38c\";\n$ionicon-var-android-hand: \"\\f2e3\";\n$ionicon-var-android-hangout: \"\\f38d\";\n$ionicon-var-android-happy: \"\\f38e\";\n$ionicon-var-android-home: \"\\f38f\";\n$ionicon-var-android-image: \"\\f2e4\";\n$ionicon-var-android-laptop: \"\\f390\";\n$ionicon-var-android-list: \"\\f391\";\n$ionicon-var-android-locate: \"\\f2e9\";\n$ionicon-var-android-lock: \"\\f392\";\n$ionicon-var-android-mail: \"\\f2eb\";\n$ionicon-var-android-map: \"\\f393\";\n$ionicon-var-android-menu: \"\\f394\";\n$ionicon-var-android-microphone: \"\\f2ec\";\n$ionicon-var-android-microphone-off: \"\\f395\";\n$ionicon-var-android-more-horizontal: \"\\f396\";\n$ionicon-var-android-more-vertical: \"\\f397\";\n$ionicon-var-android-navigate: \"\\f398\";\n$ionicon-var-android-notifications: \"\\f39b\";\n$ionicon-var-android-notifications-none: \"\\f399\";\n$ionicon-var-android-notifications-off: \"\\f39a\";\n$ionicon-var-android-open: \"\\f39c\";\n$ionicon-var-android-options: \"\\f39d\";\n$ionicon-var-android-people: \"\\f39e\";\n$ionicon-var-android-person: \"\\f3a0\";\n$ionicon-var-android-person-add: \"\\f39f\";\n$ionicon-var-android-phone-landscape: \"\\f3a1\";\n$ionicon-var-android-phone-portrait: \"\\f3a2\";\n$ionicon-var-android-pin: \"\\f3a3\";\n$ionicon-var-android-plane: \"\\f3a4\";\n$ionicon-var-android-playstore: \"\\f2f0\";\n$ionicon-var-android-print: \"\\f3a5\";\n$ionicon-var-android-radio-button-off: \"\\f3a6\";\n$ionicon-var-android-radio-button-on: \"\\f3a7\";\n$ionicon-var-android-refresh: \"\\f3a8\";\n$ionicon-var-android-remove: \"\\f2f4\";\n$ionicon-var-android-remove-circle: \"\\f3a9\";\n$ionicon-var-android-restaurant: \"\\f3aa\";\n$ionicon-var-android-sad: \"\\f3ab\";\n$ionicon-var-android-search: \"\\f2f5\";\n$ionicon-var-android-send: \"\\f2f6\";\n$ionicon-var-android-settings: \"\\f2f7\";\n$ionicon-var-android-share: \"\\f2f8\";\n$ionicon-var-android-share-alt: \"\\f3ac\";\n$ionicon-var-android-star: \"\\f2fc\";\n$ionicon-var-android-star-half: \"\\f3ad\";\n$ionicon-var-android-star-outline: \"\\f3ae\";\n$ionicon-var-android-stopwatch: \"\\f2fd\";\n$ionicon-var-android-subway: \"\\f3af\";\n$ionicon-var-android-sunny: \"\\f3b0\";\n$ionicon-var-android-sync: \"\\f3b1\";\n$ionicon-var-android-textsms: \"\\f3b2\";\n$ionicon-var-android-time: \"\\f3b3\";\n$ionicon-var-android-train: \"\\f3b4\";\n$ionicon-var-android-unlock: \"\\f3b5\";\n$ionicon-var-android-upload: \"\\f3b6\";\n$ionicon-var-android-volume-down: \"\\f3b7\";\n$ionicon-var-android-volume-mute: \"\\f3b8\";\n$ionicon-var-android-volume-off: \"\\f3b9\";\n$ionicon-var-android-volume-up: \"\\f3ba\";\n$ionicon-var-android-walk: \"\\f3bb\";\n$ionicon-var-android-warning: \"\\f3bc\";\n$ionicon-var-android-watch: \"\\f3bd\";\n$ionicon-var-android-wifi: \"\\f305\";\n$ionicon-var-aperture: \"\\f313\";\n$ionicon-var-archive: \"\\f102\";\n$ionicon-var-arrow-down-a: \"\\f103\";\n$ionicon-var-arrow-down-b: \"\\f104\";\n$ionicon-var-arrow-down-c: \"\\f105\";\n$ionicon-var-arrow-expand: \"\\f25e\";\n$ionicon-var-arrow-graph-down-left: \"\\f25f\";\n$ionicon-var-arrow-graph-down-right: \"\\f260\";\n$ionicon-var-arrow-graph-up-left: \"\\f261\";\n$ionicon-var-arrow-graph-up-right: \"\\f262\";\n$ionicon-var-arrow-left-a: \"\\f106\";\n$ionicon-var-arrow-left-b: \"\\f107\";\n$ionicon-var-arrow-left-c: \"\\f108\";\n$ionicon-var-arrow-move: \"\\f263\";\n$ionicon-var-arrow-resize: \"\\f264\";\n$ionicon-var-arrow-return-left: \"\\f265\";\n$ionicon-var-arrow-return-right: \"\\f266\";\n$ionicon-var-arrow-right-a: \"\\f109\";\n$ionicon-var-arrow-right-b: \"\\f10a\";\n$ionicon-var-arrow-right-c: \"\\f10b\";\n$ionicon-var-arrow-shrink: \"\\f267\";\n$ionicon-var-arrow-swap: \"\\f268\";\n$ionicon-var-arrow-up-a: \"\\f10c\";\n$ionicon-var-arrow-up-b: \"\\f10d\";\n$ionicon-var-arrow-up-c: \"\\f10e\";\n$ionicon-var-asterisk: \"\\f314\";\n$ionicon-var-at: \"\\f10f\";\n$ionicon-var-backspace: \"\\f3bf\";\n$ionicon-var-backspace-outline: \"\\f3be\";\n$ionicon-var-bag: \"\\f110\";\n$ionicon-var-battery-charging: \"\\f111\";\n$ionicon-var-battery-empty: \"\\f112\";\n$ionicon-var-battery-full: \"\\f113\";\n$ionicon-var-battery-half: \"\\f114\";\n$ionicon-var-battery-low: \"\\f115\";\n$ionicon-var-beaker: \"\\f269\";\n$ionicon-var-beer: \"\\f26a\";\n$ionicon-var-bluetooth: \"\\f116\";\n$ionicon-var-bonfire: \"\\f315\";\n$ionicon-var-bookmark: \"\\f26b\";\n$ionicon-var-bowtie: \"\\f3c0\";\n$ionicon-var-briefcase: \"\\f26c\";\n$ionicon-var-bug: \"\\f2be\";\n$ionicon-var-calculator: \"\\f26d\";\n$ionicon-var-calendar: \"\\f117\";\n$ionicon-var-camera: \"\\f118\";\n$ionicon-var-card: \"\\f119\";\n$ionicon-var-cash: \"\\f316\";\n$ionicon-var-chatbox: \"\\f11b\";\n$ionicon-var-chatbox-working: \"\\f11a\";\n$ionicon-var-chatboxes: \"\\f11c\";\n$ionicon-var-chatbubble: \"\\f11e\";\n$ionicon-var-chatbubble-working: \"\\f11d\";\n$ionicon-var-chatbubbles: \"\\f11f\";\n$ionicon-var-checkmark: \"\\f122\";\n$ionicon-var-checkmark-circled: \"\\f120\";\n$ionicon-var-checkmark-round: \"\\f121\";\n$ionicon-var-chevron-down: \"\\f123\";\n$ionicon-var-chevron-left: \"\\f124\";\n$ionicon-var-chevron-right: \"\\f125\";\n$ionicon-var-chevron-up: \"\\f126\";\n$ionicon-var-clipboard: \"\\f127\";\n$ionicon-var-clock: \"\\f26e\";\n$ionicon-var-close: \"\\f12a\";\n$ionicon-var-close-circled: \"\\f128\";\n$ionicon-var-close-round: \"\\f129\";\n$ionicon-var-closed-captioning: \"\\f317\";\n$ionicon-var-cloud: \"\\f12b\";\n$ionicon-var-code: \"\\f271\";\n$ionicon-var-code-download: \"\\f26f\";\n$ionicon-var-code-working: \"\\f270\";\n$ionicon-var-coffee: \"\\f272\";\n$ionicon-var-compass: \"\\f273\";\n$ionicon-var-compose: \"\\f12c\";\n$ionicon-var-connection-bars: \"\\f274\";\n$ionicon-var-contrast: \"\\f275\";\n$ionicon-var-crop: \"\\f3c1\";\n$ionicon-var-cube: \"\\f318\";\n$ionicon-var-disc: \"\\f12d\";\n$ionicon-var-document: \"\\f12f\";\n$ionicon-var-document-text: \"\\f12e\";\n$ionicon-var-drag: \"\\f130\";\n$ionicon-var-earth: \"\\f276\";\n$ionicon-var-easel: \"\\f3c2\";\n$ionicon-var-edit: \"\\f2bf\";\n$ionicon-var-egg: \"\\f277\";\n$ionicon-var-eject: \"\\f131\";\n$ionicon-var-email: \"\\f132\";\n$ionicon-var-email-unread: \"\\f3c3\";\n$ionicon-var-erlenmeyer-flask: \"\\f3c5\";\n$ionicon-var-erlenmeyer-flask-bubbles: \"\\f3c4\";\n$ionicon-var-eye: \"\\f133\";\n$ionicon-var-eye-disabled: \"\\f306\";\n$ionicon-var-female: \"\\f278\";\n$ionicon-var-filing: \"\\f134\";\n$ionicon-var-film-marker: \"\\f135\";\n$ionicon-var-fireball: \"\\f319\";\n$ionicon-var-flag: \"\\f279\";\n$ionicon-var-flame: \"\\f31a\";\n$ionicon-var-flash: \"\\f137\";\n$ionicon-var-flash-off: \"\\f136\";\n$ionicon-var-folder: \"\\f139\";\n$ionicon-var-fork: \"\\f27a\";\n$ionicon-var-fork-repo: \"\\f2c0\";\n$ionicon-var-forward: \"\\f13a\";\n$ionicon-var-funnel: \"\\f31b\";\n$ionicon-var-gear-a: \"\\f13d\";\n$ionicon-var-gear-b: \"\\f13e\";\n$ionicon-var-grid: \"\\f13f\";\n$ionicon-var-hammer: \"\\f27b\";\n$ionicon-var-happy: \"\\f31c\";\n$ionicon-var-happy-outline: \"\\f3c6\";\n$ionicon-var-headphone: \"\\f140\";\n$ionicon-var-heart: \"\\f141\";\n$ionicon-var-heart-broken: \"\\f31d\";\n$ionicon-var-help: \"\\f143\";\n$ionicon-var-help-buoy: \"\\f27c\";\n$ionicon-var-help-circled: \"\\f142\";\n$ionicon-var-home: \"\\f144\";\n$ionicon-var-icecream: \"\\f27d\";\n$ionicon-var-image: \"\\f147\";\n$ionicon-var-images: \"\\f148\";\n$ionicon-var-information: \"\\f14a\";\n$ionicon-var-information-circled: \"\\f149\";\n$ionicon-var-ionic: \"\\f14b\";\n$ionicon-var-ios-alarm: \"\\f3c8\";\n$ionicon-var-ios-alarm-outline: \"\\f3c7\";\n$ionicon-var-ios-albums: \"\\f3ca\";\n$ionicon-var-ios-albums-outline: \"\\f3c9\";\n$ionicon-var-ios-americanfootball: \"\\f3cc\";\n$ionicon-var-ios-americanfootball-outline: \"\\f3cb\";\n$ionicon-var-ios-analytics: \"\\f3ce\";\n$ionicon-var-ios-analytics-outline: \"\\f3cd\";\n$ionicon-var-ios-arrow-back: \"\\f3cf\";\n$ionicon-var-ios-arrow-down: \"\\f3d0\";\n$ionicon-var-ios-arrow-forward: \"\\f3d1\";\n$ionicon-var-ios-arrow-left: \"\\f3d2\";\n$ionicon-var-ios-arrow-right: \"\\f3d3\";\n$ionicon-var-ios-arrow-thin-down: \"\\f3d4\";\n$ionicon-var-ios-arrow-thin-left: \"\\f3d5\";\n$ionicon-var-ios-arrow-thin-right: \"\\f3d6\";\n$ionicon-var-ios-arrow-thin-up: \"\\f3d7\";\n$ionicon-var-ios-arrow-up: \"\\f3d8\";\n$ionicon-var-ios-at: \"\\f3da\";\n$ionicon-var-ios-at-outline: \"\\f3d9\";\n$ionicon-var-ios-barcode: \"\\f3dc\";\n$ionicon-var-ios-barcode-outline: \"\\f3db\";\n$ionicon-var-ios-baseball: \"\\f3de\";\n$ionicon-var-ios-baseball-outline: \"\\f3dd\";\n$ionicon-var-ios-basketball: \"\\f3e0\";\n$ionicon-var-ios-basketball-outline: \"\\f3df\";\n$ionicon-var-ios-bell: \"\\f3e2\";\n$ionicon-var-ios-bell-outline: \"\\f3e1\";\n$ionicon-var-ios-body: \"\\f3e4\";\n$ionicon-var-ios-body-outline: \"\\f3e3\";\n$ionicon-var-ios-bolt: \"\\f3e6\";\n$ionicon-var-ios-bolt-outline: \"\\f3e5\";\n$ionicon-var-ios-book: \"\\f3e8\";\n$ionicon-var-ios-book-outline: \"\\f3e7\";\n$ionicon-var-ios-bookmarks: \"\\f3ea\";\n$ionicon-var-ios-bookmarks-outline: \"\\f3e9\";\n$ionicon-var-ios-box: \"\\f3ec\";\n$ionicon-var-ios-box-outline: \"\\f3eb\";\n$ionicon-var-ios-briefcase: \"\\f3ee\";\n$ionicon-var-ios-briefcase-outline: \"\\f3ed\";\n$ionicon-var-ios-browsers: \"\\f3f0\";\n$ionicon-var-ios-browsers-outline: \"\\f3ef\";\n$ionicon-var-ios-calculator: \"\\f3f2\";\n$ionicon-var-ios-calculator-outline: \"\\f3f1\";\n$ionicon-var-ios-calendar: \"\\f3f4\";\n$ionicon-var-ios-calendar-outline: \"\\f3f3\";\n$ionicon-var-ios-camera: \"\\f3f6\";\n$ionicon-var-ios-camera-outline: \"\\f3f5\";\n$ionicon-var-ios-cart: \"\\f3f8\";\n$ionicon-var-ios-cart-outline: \"\\f3f7\";\n$ionicon-var-ios-chatboxes: \"\\f3fa\";\n$ionicon-var-ios-chatboxes-outline: \"\\f3f9\";\n$ionicon-var-ios-chatbubble: \"\\f3fc\";\n$ionicon-var-ios-chatbubble-outline: \"\\f3fb\";\n$ionicon-var-ios-checkmark: \"\\f3ff\";\n$ionicon-var-ios-checkmark-empty: \"\\f3fd\";\n$ionicon-var-ios-checkmark-outline: \"\\f3fe\";\n$ionicon-var-ios-circle-filled: \"\\f400\";\n$ionicon-var-ios-circle-outline: \"\\f401\";\n$ionicon-var-ios-clock: \"\\f403\";\n$ionicon-var-ios-clock-outline: \"\\f402\";\n$ionicon-var-ios-close: \"\\f406\";\n$ionicon-var-ios-close-empty: \"\\f404\";\n$ionicon-var-ios-close-outline: \"\\f405\";\n$ionicon-var-ios-cloud: \"\\f40c\";\n$ionicon-var-ios-cloud-download: \"\\f408\";\n$ionicon-var-ios-cloud-download-outline: \"\\f407\";\n$ionicon-var-ios-cloud-outline: \"\\f409\";\n$ionicon-var-ios-cloud-upload: \"\\f40b\";\n$ionicon-var-ios-cloud-upload-outline: \"\\f40a\";\n$ionicon-var-ios-cloudy: \"\\f410\";\n$ionicon-var-ios-cloudy-night: \"\\f40e\";\n$ionicon-var-ios-cloudy-night-outline: \"\\f40d\";\n$ionicon-var-ios-cloudy-outline: \"\\f40f\";\n$ionicon-var-ios-cog: \"\\f412\";\n$ionicon-var-ios-cog-outline: \"\\f411\";\n$ionicon-var-ios-color-filter: \"\\f414\";\n$ionicon-var-ios-color-filter-outline: \"\\f413\";\n$ionicon-var-ios-color-wand: \"\\f416\";\n$ionicon-var-ios-color-wand-outline: \"\\f415\";\n$ionicon-var-ios-compose: \"\\f418\";\n$ionicon-var-ios-compose-outline: \"\\f417\";\n$ionicon-var-ios-contact: \"\\f41a\";\n$ionicon-var-ios-contact-outline: \"\\f419\";\n$ionicon-var-ios-copy: \"\\f41c\";\n$ionicon-var-ios-copy-outline: \"\\f41b\";\n$ionicon-var-ios-crop: \"\\f41e\";\n$ionicon-var-ios-crop-strong: \"\\f41d\";\n$ionicon-var-ios-download: \"\\f420\";\n$ionicon-var-ios-download-outline: \"\\f41f\";\n$ionicon-var-ios-drag: \"\\f421\";\n$ionicon-var-ios-email: \"\\f423\";\n$ionicon-var-ios-email-outline: \"\\f422\";\n$ionicon-var-ios-eye: \"\\f425\";\n$ionicon-var-ios-eye-outline: \"\\f424\";\n$ionicon-var-ios-fastforward: \"\\f427\";\n$ionicon-var-ios-fastforward-outline: \"\\f426\";\n$ionicon-var-ios-filing: \"\\f429\";\n$ionicon-var-ios-filing-outline: \"\\f428\";\n$ionicon-var-ios-film: \"\\f42b\";\n$ionicon-var-ios-film-outline: \"\\f42a\";\n$ionicon-var-ios-flag: \"\\f42d\";\n$ionicon-var-ios-flag-outline: \"\\f42c\";\n$ionicon-var-ios-flame: \"\\f42f\";\n$ionicon-var-ios-flame-outline: \"\\f42e\";\n$ionicon-var-ios-flask: \"\\f431\";\n$ionicon-var-ios-flask-outline: \"\\f430\";\n$ionicon-var-ios-flower: \"\\f433\";\n$ionicon-var-ios-flower-outline: \"\\f432\";\n$ionicon-var-ios-folder: \"\\f435\";\n$ionicon-var-ios-folder-outline: \"\\f434\";\n$ionicon-var-ios-football: \"\\f437\";\n$ionicon-var-ios-football-outline: \"\\f436\";\n$ionicon-var-ios-game-controller-a: \"\\f439\";\n$ionicon-var-ios-game-controller-a-outline: \"\\f438\";\n$ionicon-var-ios-game-controller-b: \"\\f43b\";\n$ionicon-var-ios-game-controller-b-outline: \"\\f43a\";\n$ionicon-var-ios-gear: \"\\f43d\";\n$ionicon-var-ios-gear-outline: \"\\f43c\";\n$ionicon-var-ios-glasses: \"\\f43f\";\n$ionicon-var-ios-glasses-outline: \"\\f43e\";\n$ionicon-var-ios-grid-view: \"\\f441\";\n$ionicon-var-ios-grid-view-outline: \"\\f440\";\n$ionicon-var-ios-heart: \"\\f443\";\n$ionicon-var-ios-heart-outline: \"\\f442\";\n$ionicon-var-ios-help: \"\\f446\";\n$ionicon-var-ios-help-empty: \"\\f444\";\n$ionicon-var-ios-help-outline: \"\\f445\";\n$ionicon-var-ios-home: \"\\f448\";\n$ionicon-var-ios-home-outline: \"\\f447\";\n$ionicon-var-ios-infinite: \"\\f44a\";\n$ionicon-var-ios-infinite-outline: \"\\f449\";\n$ionicon-var-ios-information: \"\\f44d\";\n$ionicon-var-ios-information-empty: \"\\f44b\";\n$ionicon-var-ios-information-outline: \"\\f44c\";\n$ionicon-var-ios-ionic-outline: \"\\f44e\";\n$ionicon-var-ios-keypad: \"\\f450\";\n$ionicon-var-ios-keypad-outline: \"\\f44f\";\n$ionicon-var-ios-lightbulb: \"\\f452\";\n$ionicon-var-ios-lightbulb-outline: \"\\f451\";\n$ionicon-var-ios-list: \"\\f454\";\n$ionicon-var-ios-list-outline: \"\\f453\";\n$ionicon-var-ios-location: \"\\f456\";\n$ionicon-var-ios-location-outline: \"\\f455\";\n$ionicon-var-ios-locked: \"\\f458\";\n$ionicon-var-ios-locked-outline: \"\\f457\";\n$ionicon-var-ios-loop: \"\\f45a\";\n$ionicon-var-ios-loop-strong: \"\\f459\";\n$ionicon-var-ios-medical: \"\\f45c\";\n$ionicon-var-ios-medical-outline: \"\\f45b\";\n$ionicon-var-ios-medkit: \"\\f45e\";\n$ionicon-var-ios-medkit-outline: \"\\f45d\";\n$ionicon-var-ios-mic: \"\\f461\";\n$ionicon-var-ios-mic-off: \"\\f45f\";\n$ionicon-var-ios-mic-outline: \"\\f460\";\n$ionicon-var-ios-minus: \"\\f464\";\n$ionicon-var-ios-minus-empty: \"\\f462\";\n$ionicon-var-ios-minus-outline: \"\\f463\";\n$ionicon-var-ios-monitor: \"\\f466\";\n$ionicon-var-ios-monitor-outline: \"\\f465\";\n$ionicon-var-ios-moon: \"\\f468\";\n$ionicon-var-ios-moon-outline: \"\\f467\";\n$ionicon-var-ios-more: \"\\f46a\";\n$ionicon-var-ios-more-outline: \"\\f469\";\n$ionicon-var-ios-musical-note: \"\\f46b\";\n$ionicon-var-ios-musical-notes: \"\\f46c\";\n$ionicon-var-ios-navigate: \"\\f46e\";\n$ionicon-var-ios-navigate-outline: \"\\f46d\";\n$ionicon-var-ios-nutrition: \"\\f470\";\n$ionicon-var-ios-nutrition-outline: \"\\f46f\";\n$ionicon-var-ios-paper: \"\\f472\";\n$ionicon-var-ios-paper-outline: \"\\f471\";\n$ionicon-var-ios-paperplane: \"\\f474\";\n$ionicon-var-ios-paperplane-outline: \"\\f473\";\n$ionicon-var-ios-partlysunny: \"\\f476\";\n$ionicon-var-ios-partlysunny-outline: \"\\f475\";\n$ionicon-var-ios-pause: \"\\f478\";\n$ionicon-var-ios-pause-outline: \"\\f477\";\n$ionicon-var-ios-paw: \"\\f47a\";\n$ionicon-var-ios-paw-outline: \"\\f479\";\n$ionicon-var-ios-people: \"\\f47c\";\n$ionicon-var-ios-people-outline: \"\\f47b\";\n$ionicon-var-ios-person: \"\\f47e\";\n$ionicon-var-ios-person-outline: \"\\f47d\";\n$ionicon-var-ios-personadd: \"\\f480\";\n$ionicon-var-ios-personadd-outline: \"\\f47f\";\n$ionicon-var-ios-photos: \"\\f482\";\n$ionicon-var-ios-photos-outline: \"\\f481\";\n$ionicon-var-ios-pie: \"\\f484\";\n$ionicon-var-ios-pie-outline: \"\\f483\";\n$ionicon-var-ios-pint: \"\\f486\";\n$ionicon-var-ios-pint-outline: \"\\f485\";\n$ionicon-var-ios-play: \"\\f488\";\n$ionicon-var-ios-play-outline: \"\\f487\";\n$ionicon-var-ios-plus: \"\\f48b\";\n$ionicon-var-ios-plus-empty: \"\\f489\";\n$ionicon-var-ios-plus-outline: \"\\f48a\";\n$ionicon-var-ios-pricetag: \"\\f48d\";\n$ionicon-var-ios-pricetag-outline: \"\\f48c\";\n$ionicon-var-ios-pricetags: \"\\f48f\";\n$ionicon-var-ios-pricetags-outline: \"\\f48e\";\n$ionicon-var-ios-printer: \"\\f491\";\n$ionicon-var-ios-printer-outline: \"\\f490\";\n$ionicon-var-ios-pulse: \"\\f493\";\n$ionicon-var-ios-pulse-strong: \"\\f492\";\n$ionicon-var-ios-rainy: \"\\f495\";\n$ionicon-var-ios-rainy-outline: \"\\f494\";\n$ionicon-var-ios-recording: \"\\f497\";\n$ionicon-var-ios-recording-outline: \"\\f496\";\n$ionicon-var-ios-redo: \"\\f499\";\n$ionicon-var-ios-redo-outline: \"\\f498\";\n$ionicon-var-ios-refresh: \"\\f49c\";\n$ionicon-var-ios-refresh-empty: \"\\f49a\";\n$ionicon-var-ios-refresh-outline: \"\\f49b\";\n$ionicon-var-ios-reload: \"\\f49d\";\n$ionicon-var-ios-reverse-camera: \"\\f49f\";\n$ionicon-var-ios-reverse-camera-outline: \"\\f49e\";\n$ionicon-var-ios-rewind: \"\\f4a1\";\n$ionicon-var-ios-rewind-outline: \"\\f4a0\";\n$ionicon-var-ios-rose: \"\\f4a3\";\n$ionicon-var-ios-rose-outline: \"\\f4a2\";\n$ionicon-var-ios-search: \"\\f4a5\";\n$ionicon-var-ios-search-strong: \"\\f4a4\";\n$ionicon-var-ios-settings: \"\\f4a7\";\n$ionicon-var-ios-settings-strong: \"\\f4a6\";\n$ionicon-var-ios-shuffle: \"\\f4a9\";\n$ionicon-var-ios-shuffle-strong: \"\\f4a8\";\n$ionicon-var-ios-skipbackward: \"\\f4ab\";\n$ionicon-var-ios-skipbackward-outline: \"\\f4aa\";\n$ionicon-var-ios-skipforward: \"\\f4ad\";\n$ionicon-var-ios-skipforward-outline: \"\\f4ac\";\n$ionicon-var-ios-snowy: \"\\f4ae\";\n$ionicon-var-ios-speedometer: \"\\f4b0\";\n$ionicon-var-ios-speedometer-outline: \"\\f4af\";\n$ionicon-var-ios-star: \"\\f4b3\";\n$ionicon-var-ios-star-half: \"\\f4b1\";\n$ionicon-var-ios-star-outline: \"\\f4b2\";\n$ionicon-var-ios-stopwatch: \"\\f4b5\";\n$ionicon-var-ios-stopwatch-outline: \"\\f4b4\";\n$ionicon-var-ios-sunny: \"\\f4b7\";\n$ionicon-var-ios-sunny-outline: \"\\f4b6\";\n$ionicon-var-ios-telephone: \"\\f4b9\";\n$ionicon-var-ios-telephone-outline: \"\\f4b8\";\n$ionicon-var-ios-tennisball: \"\\f4bb\";\n$ionicon-var-ios-tennisball-outline: \"\\f4ba\";\n$ionicon-var-ios-thunderstorm: \"\\f4bd\";\n$ionicon-var-ios-thunderstorm-outline: \"\\f4bc\";\n$ionicon-var-ios-time: \"\\f4bf\";\n$ionicon-var-ios-time-outline: \"\\f4be\";\n$ionicon-var-ios-timer: \"\\f4c1\";\n$ionicon-var-ios-timer-outline: \"\\f4c0\";\n$ionicon-var-ios-toggle: \"\\f4c3\";\n$ionicon-var-ios-toggle-outline: \"\\f4c2\";\n$ionicon-var-ios-trash: \"\\f4c5\";\n$ionicon-var-ios-trash-outline: \"\\f4c4\";\n$ionicon-var-ios-undo: \"\\f4c7\";\n$ionicon-var-ios-undo-outline: \"\\f4c6\";\n$ionicon-var-ios-unlocked: \"\\f4c9\";\n$ionicon-var-ios-unlocked-outline: \"\\f4c8\";\n$ionicon-var-ios-upload: \"\\f4cb\";\n$ionicon-var-ios-upload-outline: \"\\f4ca\";\n$ionicon-var-ios-videocam: \"\\f4cd\";\n$ionicon-var-ios-videocam-outline: \"\\f4cc\";\n$ionicon-var-ios-volume-high: \"\\f4ce\";\n$ionicon-var-ios-volume-low: \"\\f4cf\";\n$ionicon-var-ios-wineglass: \"\\f4d1\";\n$ionicon-var-ios-wineglass-outline: \"\\f4d0\";\n$ionicon-var-ios-world: \"\\f4d3\";\n$ionicon-var-ios-world-outline: \"\\f4d2\";\n$ionicon-var-ipad: \"\\f1f9\";\n$ionicon-var-iphone: \"\\f1fa\";\n$ionicon-var-ipod: \"\\f1fb\";\n$ionicon-var-jet: \"\\f295\";\n$ionicon-var-key: \"\\f296\";\n$ionicon-var-knife: \"\\f297\";\n$ionicon-var-laptop: \"\\f1fc\";\n$ionicon-var-leaf: \"\\f1fd\";\n$ionicon-var-levels: \"\\f298\";\n$ionicon-var-lightbulb: \"\\f299\";\n$ionicon-var-link: \"\\f1fe\";\n$ionicon-var-load-a: \"\\f29a\";\n$ionicon-var-load-b: \"\\f29b\";\n$ionicon-var-load-c: \"\\f29c\";\n$ionicon-var-load-d: \"\\f29d\";\n$ionicon-var-location: \"\\f1ff\";\n$ionicon-var-lock-combination: \"\\f4d4\";\n$ionicon-var-locked: \"\\f200\";\n$ionicon-var-log-in: \"\\f29e\";\n$ionicon-var-log-out: \"\\f29f\";\n$ionicon-var-loop: \"\\f201\";\n$ionicon-var-magnet: \"\\f2a0\";\n$ionicon-var-male: \"\\f2a1\";\n$ionicon-var-man: \"\\f202\";\n$ionicon-var-map: \"\\f203\";\n$ionicon-var-medkit: \"\\f2a2\";\n$ionicon-var-merge: \"\\f33f\";\n$ionicon-var-mic-a: \"\\f204\";\n$ionicon-var-mic-b: \"\\f205\";\n$ionicon-var-mic-c: \"\\f206\";\n$ionicon-var-minus: \"\\f209\";\n$ionicon-var-minus-circled: \"\\f207\";\n$ionicon-var-minus-round: \"\\f208\";\n$ionicon-var-model-s: \"\\f2c1\";\n$ionicon-var-monitor: \"\\f20a\";\n$ionicon-var-more: \"\\f20b\";\n$ionicon-var-mouse: \"\\f340\";\n$ionicon-var-music-note: \"\\f20c\";\n$ionicon-var-navicon: \"\\f20e\";\n$ionicon-var-navicon-round: \"\\f20d\";\n$ionicon-var-navigate: \"\\f2a3\";\n$ionicon-var-network: \"\\f341\";\n$ionicon-var-no-smoking: \"\\f2c2\";\n$ionicon-var-nuclear: \"\\f2a4\";\n$ionicon-var-outlet: \"\\f342\";\n$ionicon-var-paintbrush: \"\\f4d5\";\n$ionicon-var-paintbucket: \"\\f4d6\";\n$ionicon-var-paper-airplane: \"\\f2c3\";\n$ionicon-var-paperclip: \"\\f20f\";\n$ionicon-var-pause: \"\\f210\";\n$ionicon-var-person: \"\\f213\";\n$ionicon-var-person-add: \"\\f211\";\n$ionicon-var-person-stalker: \"\\f212\";\n$ionicon-var-pie-graph: \"\\f2a5\";\n$ionicon-var-pin: \"\\f2a6\";\n$ionicon-var-pinpoint: \"\\f2a7\";\n$ionicon-var-pizza: \"\\f2a8\";\n$ionicon-var-plane: \"\\f214\";\n$ionicon-var-planet: \"\\f343\";\n$ionicon-var-play: \"\\f215\";\n$ionicon-var-playstation: \"\\f30a\";\n$ionicon-var-plus: \"\\f218\";\n$ionicon-var-plus-circled: \"\\f216\";\n$ionicon-var-plus-round: \"\\f217\";\n$ionicon-var-podium: \"\\f344\";\n$ionicon-var-pound: \"\\f219\";\n$ionicon-var-power: \"\\f2a9\";\n$ionicon-var-pricetag: \"\\f2aa\";\n$ionicon-var-pricetags: \"\\f2ab\";\n$ionicon-var-printer: \"\\f21a\";\n$ionicon-var-pull-request: \"\\f345\";\n$ionicon-var-qr-scanner: \"\\f346\";\n$ionicon-var-quote: \"\\f347\";\n$ionicon-var-radio-waves: \"\\f2ac\";\n$ionicon-var-record: \"\\f21b\";\n$ionicon-var-refresh: \"\\f21c\";\n$ionicon-var-reply: \"\\f21e\";\n$ionicon-var-reply-all: \"\\f21d\";\n$ionicon-var-ribbon-a: \"\\f348\";\n$ionicon-var-ribbon-b: \"\\f349\";\n$ionicon-var-sad: \"\\f34a\";\n$ionicon-var-sad-outline: \"\\f4d7\";\n$ionicon-var-scissors: \"\\f34b\";\n$ionicon-var-search: \"\\f21f\";\n$ionicon-var-settings: \"\\f2ad\";\n$ionicon-var-share: \"\\f220\";\n$ionicon-var-shuffle: \"\\f221\";\n$ionicon-var-skip-backward: \"\\f222\";\n$ionicon-var-skip-forward: \"\\f223\";\n$ionicon-var-social-android: \"\\f225\";\n$ionicon-var-social-android-outline: \"\\f224\";\n$ionicon-var-social-angular: \"\\f4d9\";\n$ionicon-var-social-angular-outline: \"\\f4d8\";\n$ionicon-var-social-apple: \"\\f227\";\n$ionicon-var-social-apple-outline: \"\\f226\";\n$ionicon-var-social-bitcoin: \"\\f2af\";\n$ionicon-var-social-bitcoin-outline: \"\\f2ae\";\n$ionicon-var-social-buffer: \"\\f229\";\n$ionicon-var-social-buffer-outline: \"\\f228\";\n$ionicon-var-social-chrome: \"\\f4db\";\n$ionicon-var-social-chrome-outline: \"\\f4da\";\n$ionicon-var-social-codepen: \"\\f4dd\";\n$ionicon-var-social-codepen-outline: \"\\f4dc\";\n$ionicon-var-social-css3: \"\\f4df\";\n$ionicon-var-social-css3-outline: \"\\f4de\";\n$ionicon-var-social-designernews: \"\\f22b\";\n$ionicon-var-social-designernews-outline: \"\\f22a\";\n$ionicon-var-social-dribbble: \"\\f22d\";\n$ionicon-var-social-dribbble-outline: \"\\f22c\";\n$ionicon-var-social-dropbox: \"\\f22f\";\n$ionicon-var-social-dropbox-outline: \"\\f22e\";\n$ionicon-var-social-euro: \"\\f4e1\";\n$ionicon-var-social-euro-outline: \"\\f4e0\";\n$ionicon-var-social-facebook: \"\\f231\";\n$ionicon-var-social-facebook-outline: \"\\f230\";\n$ionicon-var-social-foursquare: \"\\f34d\";\n$ionicon-var-social-foursquare-outline: \"\\f34c\";\n$ionicon-var-social-freebsd-devil: \"\\f2c4\";\n$ionicon-var-social-github: \"\\f233\";\n$ionicon-var-social-github-outline: \"\\f232\";\n$ionicon-var-social-google: \"\\f34f\";\n$ionicon-var-social-google-outline: \"\\f34e\";\n$ionicon-var-social-googleplus: \"\\f235\";\n$ionicon-var-social-googleplus-outline: \"\\f234\";\n$ionicon-var-social-hackernews: \"\\f237\";\n$ionicon-var-social-hackernews-outline: \"\\f236\";\n$ionicon-var-social-html5: \"\\f4e3\";\n$ionicon-var-social-html5-outline: \"\\f4e2\";\n$ionicon-var-social-instagram: \"\\f351\";\n$ionicon-var-social-instagram-outline: \"\\f350\";\n$ionicon-var-social-javascript: \"\\f4e5\";\n$ionicon-var-social-javascript-outline: \"\\f4e4\";\n$ionicon-var-social-linkedin: \"\\f239\";\n$ionicon-var-social-linkedin-outline: \"\\f238\";\n$ionicon-var-social-markdown: \"\\f4e6\";\n$ionicon-var-social-nodejs: \"\\f4e7\";\n$ionicon-var-social-octocat: \"\\f4e8\";\n$ionicon-var-social-pinterest: \"\\f2b1\";\n$ionicon-var-social-pinterest-outline: \"\\f2b0\";\n$ionicon-var-social-python: \"\\f4e9\";\n$ionicon-var-social-reddit: \"\\f23b\";\n$ionicon-var-social-reddit-outline: \"\\f23a\";\n$ionicon-var-social-rss: \"\\f23d\";\n$ionicon-var-social-rss-outline: \"\\f23c\";\n$ionicon-var-social-sass: \"\\f4ea\";\n$ionicon-var-social-skype: \"\\f23f\";\n$ionicon-var-social-skype-outline: \"\\f23e\";\n$ionicon-var-social-snapchat: \"\\f4ec\";\n$ionicon-var-social-snapchat-outline: \"\\f4eb\";\n$ionicon-var-social-tumblr: \"\\f241\";\n$ionicon-var-social-tumblr-outline: \"\\f240\";\n$ionicon-var-social-tux: \"\\f2c5\";\n$ionicon-var-social-twitch: \"\\f4ee\";\n$ionicon-var-social-twitch-outline: \"\\f4ed\";\n$ionicon-var-social-twitter: \"\\f243\";\n$ionicon-var-social-twitter-outline: \"\\f242\";\n$ionicon-var-social-usd: \"\\f353\";\n$ionicon-var-social-usd-outline: \"\\f352\";\n$ionicon-var-social-vimeo: \"\\f245\";\n$ionicon-var-social-vimeo-outline: \"\\f244\";\n$ionicon-var-social-whatsapp: \"\\f4f0\";\n$ionicon-var-social-whatsapp-outline: \"\\f4ef\";\n$ionicon-var-social-windows: \"\\f247\";\n$ionicon-var-social-windows-outline: \"\\f246\";\n$ionicon-var-social-wordpress: \"\\f249\";\n$ionicon-var-social-wordpress-outline: \"\\f248\";\n$ionicon-var-social-yahoo: \"\\f24b\";\n$ionicon-var-social-yahoo-outline: \"\\f24a\";\n$ionicon-var-social-yen: \"\\f4f2\";\n$ionicon-var-social-yen-outline: \"\\f4f1\";\n$ionicon-var-social-youtube: \"\\f24d\";\n$ionicon-var-social-youtube-outline: \"\\f24c\";\n$ionicon-var-soup-can: \"\\f4f4\";\n$ionicon-var-soup-can-outline: \"\\f4f3\";\n$ionicon-var-speakerphone: \"\\f2b2\";\n$ionicon-var-speedometer: \"\\f2b3\";\n$ionicon-var-spoon: \"\\f2b4\";\n$ionicon-var-star: \"\\f24e\";\n$ionicon-var-stats-bars: \"\\f2b5\";\n$ionicon-var-steam: \"\\f30b\";\n$ionicon-var-stop: \"\\f24f\";\n$ionicon-var-thermometer: \"\\f2b6\";\n$ionicon-var-thumbsdown: \"\\f250\";\n$ionicon-var-thumbsup: \"\\f251\";\n$ionicon-var-toggle: \"\\f355\";\n$ionicon-var-toggle-filled: \"\\f354\";\n$ionicon-var-transgender: \"\\f4f5\";\n$ionicon-var-trash-a: \"\\f252\";\n$ionicon-var-trash-b: \"\\f253\";\n$ionicon-var-trophy: \"\\f356\";\n$ionicon-var-tshirt: \"\\f4f7\";\n$ionicon-var-tshirt-outline: \"\\f4f6\";\n$ionicon-var-umbrella: \"\\f2b7\";\n$ionicon-var-university: \"\\f357\";\n$ionicon-var-unlocked: \"\\f254\";\n$ionicon-var-upload: \"\\f255\";\n$ionicon-var-usb: \"\\f2b8\";\n$ionicon-var-videocamera: \"\\f256\";\n$ionicon-var-volume-high: \"\\f257\";\n$ionicon-var-volume-low: \"\\f258\";\n$ionicon-var-volume-medium: \"\\f259\";\n$ionicon-var-volume-mute: \"\\f25a\";\n$ionicon-var-wand: \"\\f358\";\n$ionicon-var-waterdrop: \"\\f25b\";\n$ionicon-var-wifi: \"\\f25c\";\n$ionicon-var-wineglass: \"\\f2b9\";\n$ionicon-var-woman: \"\\f25d\";\n$ionicon-var-wrench: \"\\f2ba\";\n$ionicon-var-xbox: \"\\f30c\";","// Ionicons Icons\n// --------------------------\n\n.ionicons,\n.#{$ionicons-prefix}alert:before,\n.#{$ionicons-prefix}alert-circled:before,\n.#{$ionicons-prefix}android-add:before,\n.#{$ionicons-prefix}android-add-circle:before,\n.#{$ionicons-prefix}android-alarm-clock:before,\n.#{$ionicons-prefix}android-alert:before,\n.#{$ionicons-prefix}android-apps:before,\n.#{$ionicons-prefix}android-archive:before,\n.#{$ionicons-prefix}android-arrow-back:before,\n.#{$ionicons-prefix}android-arrow-down:before,\n.#{$ionicons-prefix}android-arrow-dropdown:before,\n.#{$ionicons-prefix}android-arrow-dropdown-circle:before,\n.#{$ionicons-prefix}android-arrow-dropleft:before,\n.#{$ionicons-prefix}android-arrow-dropleft-circle:before,\n.#{$ionicons-prefix}android-arrow-dropright:before,\n.#{$ionicons-prefix}android-arrow-dropright-circle:before,\n.#{$ionicons-prefix}android-arrow-dropup:before,\n.#{$ionicons-prefix}android-arrow-dropup-circle:before,\n.#{$ionicons-prefix}android-arrow-forward:before,\n.#{$ionicons-prefix}android-arrow-up:before,\n.#{$ionicons-prefix}android-attach:before,\n.#{$ionicons-prefix}android-bar:before,\n.#{$ionicons-prefix}android-bicycle:before,\n.#{$ionicons-prefix}android-boat:before,\n.#{$ionicons-prefix}android-bookmark:before,\n.#{$ionicons-prefix}android-bulb:before,\n.#{$ionicons-prefix}android-bus:before,\n.#{$ionicons-prefix}android-calendar:before,\n.#{$ionicons-prefix}android-call:before,\n.#{$ionicons-prefix}android-camera:before,\n.#{$ionicons-prefix}android-cancel:before,\n.#{$ionicons-prefix}android-car:before,\n.#{$ionicons-prefix}android-cart:before,\n.#{$ionicons-prefix}android-chat:before,\n.#{$ionicons-prefix}android-checkbox:before,\n.#{$ionicons-prefix}android-checkbox-blank:before,\n.#{$ionicons-prefix}android-checkbox-outline:before,\n.#{$ionicons-prefix}android-checkbox-outline-blank:before,\n.#{$ionicons-prefix}android-checkmark-circle:before,\n.#{$ionicons-prefix}android-clipboard:before,\n.#{$ionicons-prefix}android-close:before,\n.#{$ionicons-prefix}android-cloud:before,\n.#{$ionicons-prefix}android-cloud-circle:before,\n.#{$ionicons-prefix}android-cloud-done:before,\n.#{$ionicons-prefix}android-cloud-outline:before,\n.#{$ionicons-prefix}android-color-palette:before,\n.#{$ionicons-prefix}android-compass:before,\n.#{$ionicons-prefix}android-contact:before,\n.#{$ionicons-prefix}android-contacts:before,\n.#{$ionicons-prefix}android-contract:before,\n.#{$ionicons-prefix}android-create:before,\n.#{$ionicons-prefix}android-delete:before,\n.#{$ionicons-prefix}android-desktop:before,\n.#{$ionicons-prefix}android-document:before,\n.#{$ionicons-prefix}android-done:before,\n.#{$ionicons-prefix}android-done-all:before,\n.#{$ionicons-prefix}android-download:before,\n.#{$ionicons-prefix}android-drafts:before,\n.#{$ionicons-prefix}android-exit:before,\n.#{$ionicons-prefix}android-expand:before,\n.#{$ionicons-prefix}android-favorite:before,\n.#{$ionicons-prefix}android-favorite-outline:before,\n.#{$ionicons-prefix}android-film:before,\n.#{$ionicons-prefix}android-folder:before,\n.#{$ionicons-prefix}android-folder-open:before,\n.#{$ionicons-prefix}android-funnel:before,\n.#{$ionicons-prefix}android-globe:before,\n.#{$ionicons-prefix}android-hand:before,\n.#{$ionicons-prefix}android-hangout:before,\n.#{$ionicons-prefix}android-happy:before,\n.#{$ionicons-prefix}android-home:before,\n.#{$ionicons-prefix}android-image:before,\n.#{$ionicons-prefix}android-laptop:before,\n.#{$ionicons-prefix}android-list:before,\n.#{$ionicons-prefix}android-locate:before,\n.#{$ionicons-prefix}android-lock:before,\n.#{$ionicons-prefix}android-mail:before,\n.#{$ionicons-prefix}android-map:before,\n.#{$ionicons-prefix}android-menu:before,\n.#{$ionicons-prefix}android-microphone:before,\n.#{$ionicons-prefix}android-microphone-off:before,\n.#{$ionicons-prefix}android-more-horizontal:before,\n.#{$ionicons-prefix}android-more-vertical:before,\n.#{$ionicons-prefix}android-navigate:before,\n.#{$ionicons-prefix}android-notifications:before,\n.#{$ionicons-prefix}android-notifications-none:before,\n.#{$ionicons-prefix}android-notifications-off:before,\n.#{$ionicons-prefix}android-open:before,\n.#{$ionicons-prefix}android-options:before,\n.#{$ionicons-prefix}android-people:before,\n.#{$ionicons-prefix}android-person:before,\n.#{$ionicons-prefix}android-person-add:before,\n.#{$ionicons-prefix}android-phone-landscape:before,\n.#{$ionicons-prefix}android-phone-portrait:before,\n.#{$ionicons-prefix}android-pin:before,\n.#{$ionicons-prefix}android-plane:before,\n.#{$ionicons-prefix}android-playstore:before,\n.#{$ionicons-prefix}android-print:before,\n.#{$ionicons-prefix}android-radio-button-off:before,\n.#{$ionicons-prefix}android-radio-button-on:before,\n.#{$ionicons-prefix}android-refresh:before,\n.#{$ionicons-prefix}android-remove:before,\n.#{$ionicons-prefix}android-remove-circle:before,\n.#{$ionicons-prefix}android-restaurant:before,\n.#{$ionicons-prefix}android-sad:before,\n.#{$ionicons-prefix}android-search:before,\n.#{$ionicons-prefix}android-send:before,\n.#{$ionicons-prefix}android-settings:before,\n.#{$ionicons-prefix}android-share:before,\n.#{$ionicons-prefix}android-share-alt:before,\n.#{$ionicons-prefix}android-star:before,\n.#{$ionicons-prefix}android-star-half:before,\n.#{$ionicons-prefix}android-star-outline:before,\n.#{$ionicons-prefix}android-stopwatch:before,\n.#{$ionicons-prefix}android-subway:before,\n.#{$ionicons-prefix}android-sunny:before,\n.#{$ionicons-prefix}android-sync:before,\n.#{$ionicons-prefix}android-textsms:before,\n.#{$ionicons-prefix}android-time:before,\n.#{$ionicons-prefix}android-train:before,\n.#{$ionicons-prefix}android-unlock:before,\n.#{$ionicons-prefix}android-upload:before,\n.#{$ionicons-prefix}android-volume-down:before,\n.#{$ionicons-prefix}android-volume-mute:before,\n.#{$ionicons-prefix}android-volume-off:before,\n.#{$ionicons-prefix}android-volume-up:before,\n.#{$ionicons-prefix}android-walk:before,\n.#{$ionicons-prefix}android-warning:before,\n.#{$ionicons-prefix}android-watch:before,\n.#{$ionicons-prefix}android-wifi:before,\n.#{$ionicons-prefix}aperture:before,\n.#{$ionicons-prefix}archive:before,\n.#{$ionicons-prefix}arrow-down-a:before,\n.#{$ionicons-prefix}arrow-down-b:before,\n.#{$ionicons-prefix}arrow-down-c:before,\n.#{$ionicons-prefix}arrow-expand:before,\n.#{$ionicons-prefix}arrow-graph-down-left:before,\n.#{$ionicons-prefix}arrow-graph-down-right:before,\n.#{$ionicons-prefix}arrow-graph-up-left:before,\n.#{$ionicons-prefix}arrow-graph-up-right:before,\n.#{$ionicons-prefix}arrow-left-a:before,\n.#{$ionicons-prefix}arrow-left-b:before,\n.#{$ionicons-prefix}arrow-left-c:before,\n.#{$ionicons-prefix}arrow-move:before,\n.#{$ionicons-prefix}arrow-resize:before,\n.#{$ionicons-prefix}arrow-return-left:before,\n.#{$ionicons-prefix}arrow-return-right:before,\n.#{$ionicons-prefix}arrow-right-a:before,\n.#{$ionicons-prefix}arrow-right-b:before,\n.#{$ionicons-prefix}arrow-right-c:before,\n.#{$ionicons-prefix}arrow-shrink:before,\n.#{$ionicons-prefix}arrow-swap:before,\n.#{$ionicons-prefix}arrow-up-a:before,\n.#{$ionicons-prefix}arrow-up-b:before,\n.#{$ionicons-prefix}arrow-up-c:before,\n.#{$ionicons-prefix}asterisk:before,\n.#{$ionicons-prefix}at:before,\n.#{$ionicons-prefix}backspace:before,\n.#{$ionicons-prefix}backspace-outline:before,\n.#{$ionicons-prefix}bag:before,\n.#{$ionicons-prefix}battery-charging:before,\n.#{$ionicons-prefix}battery-empty:before,\n.#{$ionicons-prefix}battery-full:before,\n.#{$ionicons-prefix}battery-half:before,\n.#{$ionicons-prefix}battery-low:before,\n.#{$ionicons-prefix}beaker:before,\n.#{$ionicons-prefix}beer:before,\n.#{$ionicons-prefix}bluetooth:before,\n.#{$ionicons-prefix}bonfire:before,\n.#{$ionicons-prefix}bookmark:before,\n.#{$ionicons-prefix}bowtie:before,\n.#{$ionicons-prefix}briefcase:before,\n.#{$ionicons-prefix}bug:before,\n.#{$ionicons-prefix}calculator:before,\n.#{$ionicons-prefix}calendar:before,\n.#{$ionicons-prefix}camera:before,\n.#{$ionicons-prefix}card:before,\n.#{$ionicons-prefix}cash:before,\n.#{$ionicons-prefix}chatbox:before,\n.#{$ionicons-prefix}chatbox-working:before,\n.#{$ionicons-prefix}chatboxes:before,\n.#{$ionicons-prefix}chatbubble:before,\n.#{$ionicons-prefix}chatbubble-working:before,\n.#{$ionicons-prefix}chatbubbles:before,\n.#{$ionicons-prefix}checkmark:before,\n.#{$ionicons-prefix}checkmark-circled:before,\n.#{$ionicons-prefix}checkmark-round:before,\n.#{$ionicons-prefix}chevron-down:before,\n.#{$ionicons-prefix}chevron-left:before,\n.#{$ionicons-prefix}chevron-right:before,\n.#{$ionicons-prefix}chevron-up:before,\n.#{$ionicons-prefix}clipboard:before,\n.#{$ionicons-prefix}clock:before,\n.#{$ionicons-prefix}close:before,\n.#{$ionicons-prefix}close-circled:before,\n.#{$ionicons-prefix}close-round:before,\n.#{$ionicons-prefix}closed-captioning:before,\n.#{$ionicons-prefix}cloud:before,\n.#{$ionicons-prefix}code:before,\n.#{$ionicons-prefix}code-download:before,\n.#{$ionicons-prefix}code-working:before,\n.#{$ionicons-prefix}coffee:before,\n.#{$ionicons-prefix}compass:before,\n.#{$ionicons-prefix}compose:before,\n.#{$ionicons-prefix}connection-bars:before,\n.#{$ionicons-prefix}contrast:before,\n.#{$ionicons-prefix}crop:before,\n.#{$ionicons-prefix}cube:before,\n.#{$ionicons-prefix}disc:before,\n.#{$ionicons-prefix}document:before,\n.#{$ionicons-prefix}document-text:before,\n.#{$ionicons-prefix}drag:before,\n.#{$ionicons-prefix}earth:before,\n.#{$ionicons-prefix}easel:before,\n.#{$ionicons-prefix}edit:before,\n.#{$ionicons-prefix}egg:before,\n.#{$ionicons-prefix}eject:before,\n.#{$ionicons-prefix}email:before,\n.#{$ionicons-prefix}email-unread:before,\n.#{$ionicons-prefix}erlenmeyer-flask:before,\n.#{$ionicons-prefix}erlenmeyer-flask-bubbles:before,\n.#{$ionicons-prefix}eye:before,\n.#{$ionicons-prefix}eye-disabled:before,\n.#{$ionicons-prefix}female:before,\n.#{$ionicons-prefix}filing:before,\n.#{$ionicons-prefix}film-marker:before,\n.#{$ionicons-prefix}fireball:before,\n.#{$ionicons-prefix}flag:before,\n.#{$ionicons-prefix}flame:before,\n.#{$ionicons-prefix}flash:before,\n.#{$ionicons-prefix}flash-off:before,\n.#{$ionicons-prefix}folder:before,\n.#{$ionicons-prefix}fork:before,\n.#{$ionicons-prefix}fork-repo:before,\n.#{$ionicons-prefix}forward:before,\n.#{$ionicons-prefix}funnel:before,\n.#{$ionicons-prefix}gear-a:before,\n.#{$ionicons-prefix}gear-b:before,\n.#{$ionicons-prefix}grid:before,\n.#{$ionicons-prefix}hammer:before,\n.#{$ionicons-prefix}happy:before,\n.#{$ionicons-prefix}happy-outline:before,\n.#{$ionicons-prefix}headphone:before,\n.#{$ionicons-prefix}heart:before,\n.#{$ionicons-prefix}heart-broken:before,\n.#{$ionicons-prefix}help:before,\n.#{$ionicons-prefix}help-buoy:before,\n.#{$ionicons-prefix}help-circled:before,\n.#{$ionicons-prefix}home:before,\n.#{$ionicons-prefix}icecream:before,\n.#{$ionicons-prefix}image:before,\n.#{$ionicons-prefix}images:before,\n.#{$ionicons-prefix}information:before,\n.#{$ionicons-prefix}information-circled:before,\n.#{$ionicons-prefix}ionic:before,\n.#{$ionicons-prefix}ios-alarm:before,\n.#{$ionicons-prefix}ios-alarm-outline:before,\n.#{$ionicons-prefix}ios-albums:before,\n.#{$ionicons-prefix}ios-albums-outline:before,\n.#{$ionicons-prefix}ios-americanfootball:before,\n.#{$ionicons-prefix}ios-americanfootball-outline:before,\n.#{$ionicons-prefix}ios-analytics:before,\n.#{$ionicons-prefix}ios-analytics-outline:before,\n.#{$ionicons-prefix}ios-arrow-back:before,\n.#{$ionicons-prefix}ios-arrow-down:before,\n.#{$ionicons-prefix}ios-arrow-forward:before,\n.#{$ionicons-prefix}ios-arrow-left:before,\n.#{$ionicons-prefix}ios-arrow-right:before,\n.#{$ionicons-prefix}ios-arrow-thin-down:before,\n.#{$ionicons-prefix}ios-arrow-thin-left:before,\n.#{$ionicons-prefix}ios-arrow-thin-right:before,\n.#{$ionicons-prefix}ios-arrow-thin-up:before,\n.#{$ionicons-prefix}ios-arrow-up:before,\n.#{$ionicons-prefix}ios-at:before,\n.#{$ionicons-prefix}ios-at-outline:before,\n.#{$ionicons-prefix}ios-barcode:before,\n.#{$ionicons-prefix}ios-barcode-outline:before,\n.#{$ionicons-prefix}ios-baseball:before,\n.#{$ionicons-prefix}ios-baseball-outline:before,\n.#{$ionicons-prefix}ios-basketball:before,\n.#{$ionicons-prefix}ios-basketball-outline:before,\n.#{$ionicons-prefix}ios-bell:before,\n.#{$ionicons-prefix}ios-bell-outline:before,\n.#{$ionicons-prefix}ios-body:before,\n.#{$ionicons-prefix}ios-body-outline:before,\n.#{$ionicons-prefix}ios-bolt:before,\n.#{$ionicons-prefix}ios-bolt-outline:before,\n.#{$ionicons-prefix}ios-book:before,\n.#{$ionicons-prefix}ios-book-outline:before,\n.#{$ionicons-prefix}ios-bookmarks:before,\n.#{$ionicons-prefix}ios-bookmarks-outline:before,\n.#{$ionicons-prefix}ios-box:before,\n.#{$ionicons-prefix}ios-box-outline:before,\n.#{$ionicons-prefix}ios-briefcase:before,\n.#{$ionicons-prefix}ios-briefcase-outline:before,\n.#{$ionicons-prefix}ios-browsers:before,\n.#{$ionicons-prefix}ios-browsers-outline:before,\n.#{$ionicons-prefix}ios-calculator:before,\n.#{$ionicons-prefix}ios-calculator-outline:before,\n.#{$ionicons-prefix}ios-calendar:before,\n.#{$ionicons-prefix}ios-calendar-outline:before,\n.#{$ionicons-prefix}ios-camera:before,\n.#{$ionicons-prefix}ios-camera-outline:before,\n.#{$ionicons-prefix}ios-cart:before,\n.#{$ionicons-prefix}ios-cart-outline:before,\n.#{$ionicons-prefix}ios-chatboxes:before,\n.#{$ionicons-prefix}ios-chatboxes-outline:before,\n.#{$ionicons-prefix}ios-chatbubble:before,\n.#{$ionicons-prefix}ios-chatbubble-outline:before,\n.#{$ionicons-prefix}ios-checkmark:before,\n.#{$ionicons-prefix}ios-checkmark-empty:before,\n.#{$ionicons-prefix}ios-checkmark-outline:before,\n.#{$ionicons-prefix}ios-circle-filled:before,\n.#{$ionicons-prefix}ios-circle-outline:before,\n.#{$ionicons-prefix}ios-clock:before,\n.#{$ionicons-prefix}ios-clock-outline:before,\n.#{$ionicons-prefix}ios-close:before,\n.#{$ionicons-prefix}ios-close-empty:before,\n.#{$ionicons-prefix}ios-close-outline:before,\n.#{$ionicons-prefix}ios-cloud:before,\n.#{$ionicons-prefix}ios-cloud-download:before,\n.#{$ionicons-prefix}ios-cloud-download-outline:before,\n.#{$ionicons-prefix}ios-cloud-outline:before,\n.#{$ionicons-prefix}ios-cloud-upload:before,\n.#{$ionicons-prefix}ios-cloud-upload-outline:before,\n.#{$ionicons-prefix}ios-cloudy:before,\n.#{$ionicons-prefix}ios-cloudy-night:before,\n.#{$ionicons-prefix}ios-cloudy-night-outline:before,\n.#{$ionicons-prefix}ios-cloudy-outline:before,\n.#{$ionicons-prefix}ios-cog:before,\n.#{$ionicons-prefix}ios-cog-outline:before,\n.#{$ionicons-prefix}ios-color-filter:before,\n.#{$ionicons-prefix}ios-color-filter-outline:before,\n.#{$ionicons-prefix}ios-color-wand:before,\n.#{$ionicons-prefix}ios-color-wand-outline:before,\n.#{$ionicons-prefix}ios-compose:before,\n.#{$ionicons-prefix}ios-compose-outline:before,\n.#{$ionicons-prefix}ios-contact:before,\n.#{$ionicons-prefix}ios-contact-outline:before,\n.#{$ionicons-prefix}ios-copy:before,\n.#{$ionicons-prefix}ios-copy-outline:before,\n.#{$ionicons-prefix}ios-crop:before,\n.#{$ionicons-prefix}ios-crop-strong:before,\n.#{$ionicons-prefix}ios-download:before,\n.#{$ionicons-prefix}ios-download-outline:before,\n.#{$ionicons-prefix}ios-drag:before,\n.#{$ionicons-prefix}ios-email:before,\n.#{$ionicons-prefix}ios-email-outline:before,\n.#{$ionicons-prefix}ios-eye:before,\n.#{$ionicons-prefix}ios-eye-outline:before,\n.#{$ionicons-prefix}ios-fastforward:before,\n.#{$ionicons-prefix}ios-fastforward-outline:before,\n.#{$ionicons-prefix}ios-filing:before,\n.#{$ionicons-prefix}ios-filing-outline:before,\n.#{$ionicons-prefix}ios-film:before,\n.#{$ionicons-prefix}ios-film-outline:before,\n.#{$ionicons-prefix}ios-flag:before,\n.#{$ionicons-prefix}ios-flag-outline:before,\n.#{$ionicons-prefix}ios-flame:before,\n.#{$ionicons-prefix}ios-flame-outline:before,\n.#{$ionicons-prefix}ios-flask:before,\n.#{$ionicons-prefix}ios-flask-outline:before,\n.#{$ionicons-prefix}ios-flower:before,\n.#{$ionicons-prefix}ios-flower-outline:before,\n.#{$ionicons-prefix}ios-folder:before,\n.#{$ionicons-prefix}ios-folder-outline:before,\n.#{$ionicons-prefix}ios-football:before,\n.#{$ionicons-prefix}ios-football-outline:before,\n.#{$ionicons-prefix}ios-game-controller-a:before,\n.#{$ionicons-prefix}ios-game-controller-a-outline:before,\n.#{$ionicons-prefix}ios-game-controller-b:before,\n.#{$ionicons-prefix}ios-game-controller-b-outline:before,\n.#{$ionicons-prefix}ios-gear:before,\n.#{$ionicons-prefix}ios-gear-outline:before,\n.#{$ionicons-prefix}ios-glasses:before,\n.#{$ionicons-prefix}ios-glasses-outline:before,\n.#{$ionicons-prefix}ios-grid-view:before,\n.#{$ionicons-prefix}ios-grid-view-outline:before,\n.#{$ionicons-prefix}ios-heart:before,\n.#{$ionicons-prefix}ios-heart-outline:before,\n.#{$ionicons-prefix}ios-help:before,\n.#{$ionicons-prefix}ios-help-empty:before,\n.#{$ionicons-prefix}ios-help-outline:before,\n.#{$ionicons-prefix}ios-home:before,\n.#{$ionicons-prefix}ios-home-outline:before,\n.#{$ionicons-prefix}ios-infinite:before,\n.#{$ionicons-prefix}ios-infinite-outline:before,\n.#{$ionicons-prefix}ios-information:before,\n.#{$ionicons-prefix}ios-information-empty:before,\n.#{$ionicons-prefix}ios-information-outline:before,\n.#{$ionicons-prefix}ios-ionic-outline:before,\n.#{$ionicons-prefix}ios-keypad:before,\n.#{$ionicons-prefix}ios-keypad-outline:before,\n.#{$ionicons-prefix}ios-lightbulb:before,\n.#{$ionicons-prefix}ios-lightbulb-outline:before,\n.#{$ionicons-prefix}ios-list:before,\n.#{$ionicons-prefix}ios-list-outline:before,\n.#{$ionicons-prefix}ios-location:before,\n.#{$ionicons-prefix}ios-location-outline:before,\n.#{$ionicons-prefix}ios-locked:before,\n.#{$ionicons-prefix}ios-locked-outline:before,\n.#{$ionicons-prefix}ios-loop:before,\n.#{$ionicons-prefix}ios-loop-strong:before,\n.#{$ionicons-prefix}ios-medical:before,\n.#{$ionicons-prefix}ios-medical-outline:before,\n.#{$ionicons-prefix}ios-medkit:before,\n.#{$ionicons-prefix}ios-medkit-outline:before,\n.#{$ionicons-prefix}ios-mic:before,\n.#{$ionicons-prefix}ios-mic-off:before,\n.#{$ionicons-prefix}ios-mic-outline:before,\n.#{$ionicons-prefix}ios-minus:before,\n.#{$ionicons-prefix}ios-minus-empty:before,\n.#{$ionicons-prefix}ios-minus-outline:before,\n.#{$ionicons-prefix}ios-monitor:before,\n.#{$ionicons-prefix}ios-monitor-outline:before,\n.#{$ionicons-prefix}ios-moon:before,\n.#{$ionicons-prefix}ios-moon-outline:before,\n.#{$ionicons-prefix}ios-more:before,\n.#{$ionicons-prefix}ios-more-outline:before,\n.#{$ionicons-prefix}ios-musical-note:before,\n.#{$ionicons-prefix}ios-musical-notes:before,\n.#{$ionicons-prefix}ios-navigate:before,\n.#{$ionicons-prefix}ios-navigate-outline:before,\n.#{$ionicons-prefix}ios-nutrition:before,\n.#{$ionicons-prefix}ios-nutrition-outline:before,\n.#{$ionicons-prefix}ios-paper:before,\n.#{$ionicons-prefix}ios-paper-outline:before,\n.#{$ionicons-prefix}ios-paperplane:before,\n.#{$ionicons-prefix}ios-paperplane-outline:before,\n.#{$ionicons-prefix}ios-partlysunny:before,\n.#{$ionicons-prefix}ios-partlysunny-outline:before,\n.#{$ionicons-prefix}ios-pause:before,\n.#{$ionicons-prefix}ios-pause-outline:before,\n.#{$ionicons-prefix}ios-paw:before,\n.#{$ionicons-prefix}ios-paw-outline:before,\n.#{$ionicons-prefix}ios-people:before,\n.#{$ionicons-prefix}ios-people-outline:before,\n.#{$ionicons-prefix}ios-person:before,\n.#{$ionicons-prefix}ios-person-outline:before,\n.#{$ionicons-prefix}ios-personadd:before,\n.#{$ionicons-prefix}ios-personadd-outline:before,\n.#{$ionicons-prefix}ios-photos:before,\n.#{$ionicons-prefix}ios-photos-outline:before,\n.#{$ionicons-prefix}ios-pie:before,\n.#{$ionicons-prefix}ios-pie-outline:before,\n.#{$ionicons-prefix}ios-pint:before,\n.#{$ionicons-prefix}ios-pint-outline:before,\n.#{$ionicons-prefix}ios-play:before,\n.#{$ionicons-prefix}ios-play-outline:before,\n.#{$ionicons-prefix}ios-plus:before,\n.#{$ionicons-prefix}ios-plus-empty:before,\n.#{$ionicons-prefix}ios-plus-outline:before,\n.#{$ionicons-prefix}ios-pricetag:before,\n.#{$ionicons-prefix}ios-pricetag-outline:before,\n.#{$ionicons-prefix}ios-pricetags:before,\n.#{$ionicons-prefix}ios-pricetags-outline:before,\n.#{$ionicons-prefix}ios-printer:before,\n.#{$ionicons-prefix}ios-printer-outline:before,\n.#{$ionicons-prefix}ios-pulse:before,\n.#{$ionicons-prefix}ios-pulse-strong:before,\n.#{$ionicons-prefix}ios-rainy:before,\n.#{$ionicons-prefix}ios-rainy-outline:before,\n.#{$ionicons-prefix}ios-recording:before,\n.#{$ionicons-prefix}ios-recording-outline:before,\n.#{$ionicons-prefix}ios-redo:before,\n.#{$ionicons-prefix}ios-redo-outline:before,\n.#{$ionicons-prefix}ios-refresh:before,\n.#{$ionicons-prefix}ios-refresh-empty:before,\n.#{$ionicons-prefix}ios-refresh-outline:before,\n.#{$ionicons-prefix}ios-reload:before,\n.#{$ionicons-prefix}ios-reverse-camera:before,\n.#{$ionicons-prefix}ios-reverse-camera-outline:before,\n.#{$ionicons-prefix}ios-rewind:before,\n.#{$ionicons-prefix}ios-rewind-outline:before,\n.#{$ionicons-prefix}ios-rose:before,\n.#{$ionicons-prefix}ios-rose-outline:before,\n.#{$ionicons-prefix}ios-search:before,\n.#{$ionicons-prefix}ios-search-strong:before,\n.#{$ionicons-prefix}ios-settings:before,\n.#{$ionicons-prefix}ios-settings-strong:before,\n.#{$ionicons-prefix}ios-shuffle:before,\n.#{$ionicons-prefix}ios-shuffle-strong:before,\n.#{$ionicons-prefix}ios-skipbackward:before,\n.#{$ionicons-prefix}ios-skipbackward-outline:before,\n.#{$ionicons-prefix}ios-skipforward:before,\n.#{$ionicons-prefix}ios-skipforward-outline:before,\n.#{$ionicons-prefix}ios-snowy:before,\n.#{$ionicons-prefix}ios-speedometer:before,\n.#{$ionicons-prefix}ios-speedometer-outline:before,\n.#{$ionicons-prefix}ios-star:before,\n.#{$ionicons-prefix}ios-star-half:before,\n.#{$ionicons-prefix}ios-star-outline:before,\n.#{$ionicons-prefix}ios-stopwatch:before,\n.#{$ionicons-prefix}ios-stopwatch-outline:before,\n.#{$ionicons-prefix}ios-sunny:before,\n.#{$ionicons-prefix}ios-sunny-outline:before,\n.#{$ionicons-prefix}ios-telephone:before,\n.#{$ionicons-prefix}ios-telephone-outline:before,\n.#{$ionicons-prefix}ios-tennisball:before,\n.#{$ionicons-prefix}ios-tennisball-outline:before,\n.#{$ionicons-prefix}ios-thunderstorm:before,\n.#{$ionicons-prefix}ios-thunderstorm-outline:before,\n.#{$ionicons-prefix}ios-time:before,\n.#{$ionicons-prefix}ios-time-outline:before,\n.#{$ionicons-prefix}ios-timer:before,\n.#{$ionicons-prefix}ios-timer-outline:before,\n.#{$ionicons-prefix}ios-toggle:before,\n.#{$ionicons-prefix}ios-toggle-outline:before,\n.#{$ionicons-prefix}ios-trash:before,\n.#{$ionicons-prefix}ios-trash-outline:before,\n.#{$ionicons-prefix}ios-undo:before,\n.#{$ionicons-prefix}ios-undo-outline:before,\n.#{$ionicons-prefix}ios-unlocked:before,\n.#{$ionicons-prefix}ios-unlocked-outline:before,\n.#{$ionicons-prefix}ios-upload:before,\n.#{$ionicons-prefix}ios-upload-outline:before,\n.#{$ionicons-prefix}ios-videocam:before,\n.#{$ionicons-prefix}ios-videocam-outline:before,\n.#{$ionicons-prefix}ios-volume-high:before,\n.#{$ionicons-prefix}ios-volume-low:before,\n.#{$ionicons-prefix}ios-wineglass:before,\n.#{$ionicons-prefix}ios-wineglass-outline:before,\n.#{$ionicons-prefix}ios-world:before,\n.#{$ionicons-prefix}ios-world-outline:before,\n.#{$ionicons-prefix}ipad:before,\n.#{$ionicons-prefix}iphone:before,\n.#{$ionicons-prefix}ipod:before,\n.#{$ionicons-prefix}jet:before,\n.#{$ionicons-prefix}key:before,\n.#{$ionicons-prefix}knife:before,\n.#{$ionicons-prefix}laptop:before,\n.#{$ionicons-prefix}leaf:before,\n.#{$ionicons-prefix}levels:before,\n.#{$ionicons-prefix}lightbulb:before,\n.#{$ionicons-prefix}link:before,\n.#{$ionicons-prefix}load-a:before,\n.#{$ionicons-prefix}load-b:before,\n.#{$ionicons-prefix}load-c:before,\n.#{$ionicons-prefix}load-d:before,\n.#{$ionicons-prefix}location:before,\n.#{$ionicons-prefix}lock-combination:before,\n.#{$ionicons-prefix}locked:before,\n.#{$ionicons-prefix}log-in:before,\n.#{$ionicons-prefix}log-out:before,\n.#{$ionicons-prefix}loop:before,\n.#{$ionicons-prefix}magnet:before,\n.#{$ionicons-prefix}male:before,\n.#{$ionicons-prefix}man:before,\n.#{$ionicons-prefix}map:before,\n.#{$ionicons-prefix}medkit:before,\n.#{$ionicons-prefix}merge:before,\n.#{$ionicons-prefix}mic-a:before,\n.#{$ionicons-prefix}mic-b:before,\n.#{$ionicons-prefix}mic-c:before,\n.#{$ionicons-prefix}minus:before,\n.#{$ionicons-prefix}minus-circled:before,\n.#{$ionicons-prefix}minus-round:before,\n.#{$ionicons-prefix}model-s:before,\n.#{$ionicons-prefix}monitor:before,\n.#{$ionicons-prefix}more:before,\n.#{$ionicons-prefix}mouse:before,\n.#{$ionicons-prefix}music-note:before,\n.#{$ionicons-prefix}navicon:before,\n.#{$ionicons-prefix}navicon-round:before,\n.#{$ionicons-prefix}navigate:before,\n.#{$ionicons-prefix}network:before,\n.#{$ionicons-prefix}no-smoking:before,\n.#{$ionicons-prefix}nuclear:before,\n.#{$ionicons-prefix}outlet:before,\n.#{$ionicons-prefix}paintbrush:before,\n.#{$ionicons-prefix}paintbucket:before,\n.#{$ionicons-prefix}paper-airplane:before,\n.#{$ionicons-prefix}paperclip:before,\n.#{$ionicons-prefix}pause:before,\n.#{$ionicons-prefix}person:before,\n.#{$ionicons-prefix}person-add:before,\n.#{$ionicons-prefix}person-stalker:before,\n.#{$ionicons-prefix}pie-graph:before,\n.#{$ionicons-prefix}pin:before,\n.#{$ionicons-prefix}pinpoint:before,\n.#{$ionicons-prefix}pizza:before,\n.#{$ionicons-prefix}plane:before,\n.#{$ionicons-prefix}planet:before,\n.#{$ionicons-prefix}play:before,\n.#{$ionicons-prefix}playstation:before,\n.#{$ionicons-prefix}plus:before,\n.#{$ionicons-prefix}plus-circled:before,\n.#{$ionicons-prefix}plus-round:before,\n.#{$ionicons-prefix}podium:before,\n.#{$ionicons-prefix}pound:before,\n.#{$ionicons-prefix}power:before,\n.#{$ionicons-prefix}pricetag:before,\n.#{$ionicons-prefix}pricetags:before,\n.#{$ionicons-prefix}printer:before,\n.#{$ionicons-prefix}pull-request:before,\n.#{$ionicons-prefix}qr-scanner:before,\n.#{$ionicons-prefix}quote:before,\n.#{$ionicons-prefix}radio-waves:before,\n.#{$ionicons-prefix}record:before,\n.#{$ionicons-prefix}refresh:before,\n.#{$ionicons-prefix}reply:before,\n.#{$ionicons-prefix}reply-all:before,\n.#{$ionicons-prefix}ribbon-a:before,\n.#{$ionicons-prefix}ribbon-b:before,\n.#{$ionicons-prefix}sad:before,\n.#{$ionicons-prefix}sad-outline:before,\n.#{$ionicons-prefix}scissors:before,\n.#{$ionicons-prefix}search:before,\n.#{$ionicons-prefix}settings:before,\n.#{$ionicons-prefix}share:before,\n.#{$ionicons-prefix}shuffle:before,\n.#{$ionicons-prefix}skip-backward:before,\n.#{$ionicons-prefix}skip-forward:before,\n.#{$ionicons-prefix}social-android:before,\n.#{$ionicons-prefix}social-android-outline:before,\n.#{$ionicons-prefix}social-angular:before,\n.#{$ionicons-prefix}social-angular-outline:before,\n.#{$ionicons-prefix}social-apple:before,\n.#{$ionicons-prefix}social-apple-outline:before,\n.#{$ionicons-prefix}social-bitcoin:before,\n.#{$ionicons-prefix}social-bitcoin-outline:before,\n.#{$ionicons-prefix}social-buffer:before,\n.#{$ionicons-prefix}social-buffer-outline:before,\n.#{$ionicons-prefix}social-chrome:before,\n.#{$ionicons-prefix}social-chrome-outline:before,\n.#{$ionicons-prefix}social-codepen:before,\n.#{$ionicons-prefix}social-codepen-outline:before,\n.#{$ionicons-prefix}social-css3:before,\n.#{$ionicons-prefix}social-css3-outline:before,\n.#{$ionicons-prefix}social-designernews:before,\n.#{$ionicons-prefix}social-designernews-outline:before,\n.#{$ionicons-prefix}social-dribbble:before,\n.#{$ionicons-prefix}social-dribbble-outline:before,\n.#{$ionicons-prefix}social-dropbox:before,\n.#{$ionicons-prefix}social-dropbox-outline:before,\n.#{$ionicons-prefix}social-euro:before,\n.#{$ionicons-prefix}social-euro-outline:before,\n.#{$ionicons-prefix}social-facebook:before,\n.#{$ionicons-prefix}social-facebook-outline:before,\n.#{$ionicons-prefix}social-foursquare:before,\n.#{$ionicons-prefix}social-foursquare-outline:before,\n.#{$ionicons-prefix}social-freebsd-devil:before,\n.#{$ionicons-prefix}social-github:before,\n.#{$ionicons-prefix}social-github-outline:before,\n.#{$ionicons-prefix}social-google:before,\n.#{$ionicons-prefix}social-google-outline:before,\n.#{$ionicons-prefix}social-googleplus:before,\n.#{$ionicons-prefix}social-googleplus-outline:before,\n.#{$ionicons-prefix}social-hackernews:before,\n.#{$ionicons-prefix}social-hackernews-outline:before,\n.#{$ionicons-prefix}social-html5:before,\n.#{$ionicons-prefix}social-html5-outline:before,\n.#{$ionicons-prefix}social-instagram:before,\n.#{$ionicons-prefix}social-instagram-outline:before,\n.#{$ionicons-prefix}social-javascript:before,\n.#{$ionicons-prefix}social-javascript-outline:before,\n.#{$ionicons-prefix}social-linkedin:before,\n.#{$ionicons-prefix}social-linkedin-outline:before,\n.#{$ionicons-prefix}social-markdown:before,\n.#{$ionicons-prefix}social-nodejs:before,\n.#{$ionicons-prefix}social-octocat:before,\n.#{$ionicons-prefix}social-pinterest:before,\n.#{$ionicons-prefix}social-pinterest-outline:before,\n.#{$ionicons-prefix}social-python:before,\n.#{$ionicons-prefix}social-reddit:before,\n.#{$ionicons-prefix}social-reddit-outline:before,\n.#{$ionicons-prefix}social-rss:before,\n.#{$ionicons-prefix}social-rss-outline:before,\n.#{$ionicons-prefix}social-sass:before,\n.#{$ionicons-prefix}social-skype:before,\n.#{$ionicons-prefix}social-skype-outline:before,\n.#{$ionicons-prefix}social-snapchat:before,\n.#{$ionicons-prefix}social-snapchat-outline:before,\n.#{$ionicons-prefix}social-tumblr:before,\n.#{$ionicons-prefix}social-tumblr-outline:before,\n.#{$ionicons-prefix}social-tux:before,\n.#{$ionicons-prefix}social-twitch:before,\n.#{$ionicons-prefix}social-twitch-outline:before,\n.#{$ionicons-prefix}social-twitter:before,\n.#{$ionicons-prefix}social-twitter-outline:before,\n.#{$ionicons-prefix}social-usd:before,\n.#{$ionicons-prefix}social-usd-outline:before,\n.#{$ionicons-prefix}social-vimeo:before,\n.#{$ionicons-prefix}social-vimeo-outline:before,\n.#{$ionicons-prefix}social-whatsapp:before,\n.#{$ionicons-prefix}social-whatsapp-outline:before,\n.#{$ionicons-prefix}social-windows:before,\n.#{$ionicons-prefix}social-windows-outline:before,\n.#{$ionicons-prefix}social-wordpress:before,\n.#{$ionicons-prefix}social-wordpress-outline:before,\n.#{$ionicons-prefix}social-yahoo:before,\n.#{$ionicons-prefix}social-yahoo-outline:before,\n.#{$ionicons-prefix}social-yen:before,\n.#{$ionicons-prefix}social-yen-outline:before,\n.#{$ionicons-prefix}social-youtube:before,\n.#{$ionicons-prefix}social-youtube-outline:before,\n.#{$ionicons-prefix}soup-can:before,\n.#{$ionicons-prefix}soup-can-outline:before,\n.#{$ionicons-prefix}speakerphone:before,\n.#{$ionicons-prefix}speedometer:before,\n.#{$ionicons-prefix}spoon:before,\n.#{$ionicons-prefix}star:before,\n.#{$ionicons-prefix}stats-bars:before,\n.#{$ionicons-prefix}steam:before,\n.#{$ionicons-prefix}stop:before,\n.#{$ionicons-prefix}thermometer:before,\n.#{$ionicons-prefix}thumbsdown:before,\n.#{$ionicons-prefix}thumbsup:before,\n.#{$ionicons-prefix}toggle:before,\n.#{$ionicons-prefix}toggle-filled:before,\n.#{$ionicons-prefix}transgender:before,\n.#{$ionicons-prefix}trash-a:before,\n.#{$ionicons-prefix}trash-b:before,\n.#{$ionicons-prefix}trophy:before,\n.#{$ionicons-prefix}tshirt:before,\n.#{$ionicons-prefix}tshirt-outline:before,\n.#{$ionicons-prefix}umbrella:before,\n.#{$ionicons-prefix}university:before,\n.#{$ionicons-prefix}unlocked:before,\n.#{$ionicons-prefix}upload:before,\n.#{$ionicons-prefix}usb:before,\n.#{$ionicons-prefix}videocamera:before,\n.#{$ionicons-prefix}volume-high:before,\n.#{$ionicons-prefix}volume-low:before,\n.#{$ionicons-prefix}volume-medium:before,\n.#{$ionicons-prefix}volume-mute:before,\n.#{$ionicons-prefix}wand:before,\n.#{$ionicons-prefix}waterdrop:before,\n.#{$ionicons-prefix}wifi:before,\n.#{$ionicons-prefix}wineglass:before,\n.#{$ionicons-prefix}woman:before,\n.#{$ionicons-prefix}wrench:before,\n.#{$ionicons-prefix}xbox:before\n{\n @extend .ion;\n}\n.#{$ionicons-prefix}alert:before { content: $ionicon-var-alert; }\n.#{$ionicons-prefix}alert-circled:before { content: $ionicon-var-alert-circled; }\n.#{$ionicons-prefix}android-add:before { content: $ionicon-var-android-add; }\n.#{$ionicons-prefix}android-add-circle:before { content: $ionicon-var-android-add-circle; }\n.#{$ionicons-prefix}android-alarm-clock:before { content: $ionicon-var-android-alarm-clock; }\n.#{$ionicons-prefix}android-alert:before { content: $ionicon-var-android-alert; }\n.#{$ionicons-prefix}android-apps:before { content: $ionicon-var-android-apps; }\n.#{$ionicons-prefix}android-archive:before { content: $ionicon-var-android-archive; }\n.#{$ionicons-prefix}android-arrow-back:before { content: $ionicon-var-android-arrow-back; }\n.#{$ionicons-prefix}android-arrow-down:before { content: $ionicon-var-android-arrow-down; }\n.#{$ionicons-prefix}android-arrow-dropdown:before { content: $ionicon-var-android-arrow-dropdown; }\n.#{$ionicons-prefix}android-arrow-dropdown-circle:before { content: $ionicon-var-android-arrow-dropdown-circle; }\n.#{$ionicons-prefix}android-arrow-dropleft:before { content: $ionicon-var-android-arrow-dropleft; }\n.#{$ionicons-prefix}android-arrow-dropleft-circle:before { content: $ionicon-var-android-arrow-dropleft-circle; }\n.#{$ionicons-prefix}android-arrow-dropright:before { content: $ionicon-var-android-arrow-dropright; }\n.#{$ionicons-prefix}android-arrow-dropright-circle:before { content: $ionicon-var-android-arrow-dropright-circle; }\n.#{$ionicons-prefix}android-arrow-dropup:before { content: $ionicon-var-android-arrow-dropup; }\n.#{$ionicons-prefix}android-arrow-dropup-circle:before { content: $ionicon-var-android-arrow-dropup-circle; }\n.#{$ionicons-prefix}android-arrow-forward:before { content: $ionicon-var-android-arrow-forward; }\n.#{$ionicons-prefix}android-arrow-up:before { content: $ionicon-var-android-arrow-up; }\n.#{$ionicons-prefix}android-attach:before { content: $ionicon-var-android-attach; }\n.#{$ionicons-prefix}android-bar:before { content: $ionicon-var-android-bar; }\n.#{$ionicons-prefix}android-bicycle:before { content: $ionicon-var-android-bicycle; }\n.#{$ionicons-prefix}android-boat:before { content: $ionicon-var-android-boat; }\n.#{$ionicons-prefix}android-bookmark:before { content: $ionicon-var-android-bookmark; }\n.#{$ionicons-prefix}android-bulb:before { content: $ionicon-var-android-bulb; }\n.#{$ionicons-prefix}android-bus:before { content: $ionicon-var-android-bus; }\n.#{$ionicons-prefix}android-calendar:before { content: $ionicon-var-android-calendar; }\n.#{$ionicons-prefix}android-call:before { content: $ionicon-var-android-call; }\n.#{$ionicons-prefix}android-camera:before { content: $ionicon-var-android-camera; }\n.#{$ionicons-prefix}android-cancel:before { content: $ionicon-var-android-cancel; }\n.#{$ionicons-prefix}android-car:before { content: $ionicon-var-android-car; }\n.#{$ionicons-prefix}android-cart:before { content: $ionicon-var-android-cart; }\n.#{$ionicons-prefix}android-chat:before { content: $ionicon-var-android-chat; }\n.#{$ionicons-prefix}android-checkbox:before { content: $ionicon-var-android-checkbox; }\n.#{$ionicons-prefix}android-checkbox-blank:before { content: $ionicon-var-android-checkbox-blank; }\n.#{$ionicons-prefix}android-checkbox-outline:before { content: $ionicon-var-android-checkbox-outline; }\n.#{$ionicons-prefix}android-checkbox-outline-blank:before { content: $ionicon-var-android-checkbox-outline-blank; }\n.#{$ionicons-prefix}android-checkmark-circle:before { content: $ionicon-var-android-checkmark-circle; }\n.#{$ionicons-prefix}android-clipboard:before { content: $ionicon-var-android-clipboard; }\n.#{$ionicons-prefix}android-close:before { content: $ionicon-var-android-close; }\n.#{$ionicons-prefix}android-cloud:before { content: $ionicon-var-android-cloud; }\n.#{$ionicons-prefix}android-cloud-circle:before { content: $ionicon-var-android-cloud-circle; }\n.#{$ionicons-prefix}android-cloud-done:before { content: $ionicon-var-android-cloud-done; }\n.#{$ionicons-prefix}android-cloud-outline:before { content: $ionicon-var-android-cloud-outline; }\n.#{$ionicons-prefix}android-color-palette:before { content: $ionicon-var-android-color-palette; }\n.#{$ionicons-prefix}android-compass:before { content: $ionicon-var-android-compass; }\n.#{$ionicons-prefix}android-contact:before { content: $ionicon-var-android-contact; }\n.#{$ionicons-prefix}android-contacts:before { content: $ionicon-var-android-contacts; }\n.#{$ionicons-prefix}android-contract:before { content: $ionicon-var-android-contract; }\n.#{$ionicons-prefix}android-create:before { content: $ionicon-var-android-create; }\n.#{$ionicons-prefix}android-delete:before { content: $ionicon-var-android-delete; }\n.#{$ionicons-prefix}android-desktop:before { content: $ionicon-var-android-desktop; }\n.#{$ionicons-prefix}android-document:before { content: $ionicon-var-android-document; }\n.#{$ionicons-prefix}android-done:before { content: $ionicon-var-android-done; }\n.#{$ionicons-prefix}android-done-all:before { content: $ionicon-var-android-done-all; }\n.#{$ionicons-prefix}android-download:before { content: $ionicon-var-android-download; }\n.#{$ionicons-prefix}android-drafts:before { content: $ionicon-var-android-drafts; }\n.#{$ionicons-prefix}android-exit:before { content: $ionicon-var-android-exit; }\n.#{$ionicons-prefix}android-expand:before { content: $ionicon-var-android-expand; }\n.#{$ionicons-prefix}android-favorite:before { content: $ionicon-var-android-favorite; }\n.#{$ionicons-prefix}android-favorite-outline:before { content: $ionicon-var-android-favorite-outline; }\n.#{$ionicons-prefix}android-film:before { content: $ionicon-var-android-film; }\n.#{$ionicons-prefix}android-folder:before { content: $ionicon-var-android-folder; }\n.#{$ionicons-prefix}android-folder-open:before { content: $ionicon-var-android-folder-open; }\n.#{$ionicons-prefix}android-funnel:before { content: $ionicon-var-android-funnel; }\n.#{$ionicons-prefix}android-globe:before { content: $ionicon-var-android-globe; }\n.#{$ionicons-prefix}android-hand:before { content: $ionicon-var-android-hand; }\n.#{$ionicons-prefix}android-hangout:before { content: $ionicon-var-android-hangout; }\n.#{$ionicons-prefix}android-happy:before { content: $ionicon-var-android-happy; }\n.#{$ionicons-prefix}android-home:before { content: $ionicon-var-android-home; }\n.#{$ionicons-prefix}android-image:before { content: $ionicon-var-android-image; }\n.#{$ionicons-prefix}android-laptop:before { content: $ionicon-var-android-laptop; }\n.#{$ionicons-prefix}android-list:before { content: $ionicon-var-android-list; }\n.#{$ionicons-prefix}android-locate:before { content: $ionicon-var-android-locate; }\n.#{$ionicons-prefix}android-lock:before { content: $ionicon-var-android-lock; }\n.#{$ionicons-prefix}android-mail:before { content: $ionicon-var-android-mail; }\n.#{$ionicons-prefix}android-map:before { content: $ionicon-var-android-map; }\n.#{$ionicons-prefix}android-menu:before { content: $ionicon-var-android-menu; }\n.#{$ionicons-prefix}android-microphone:before { content: $ionicon-var-android-microphone; }\n.#{$ionicons-prefix}android-microphone-off:before { content: $ionicon-var-android-microphone-off; }\n.#{$ionicons-prefix}android-more-horizontal:before { content: $ionicon-var-android-more-horizontal; }\n.#{$ionicons-prefix}android-more-vertical:before { content: $ionicon-var-android-more-vertical; }\n.#{$ionicons-prefix}android-navigate:before { content: $ionicon-var-android-navigate; }\n.#{$ionicons-prefix}android-notifications:before { content: $ionicon-var-android-notifications; }\n.#{$ionicons-prefix}android-notifications-none:before { content: $ionicon-var-android-notifications-none; }\n.#{$ionicons-prefix}android-notifications-off:before { content: $ionicon-var-android-notifications-off; }\n.#{$ionicons-prefix}android-open:before { content: $ionicon-var-android-open; }\n.#{$ionicons-prefix}android-options:before { content: $ionicon-var-android-options; }\n.#{$ionicons-prefix}android-people:before { content: $ionicon-var-android-people; }\n.#{$ionicons-prefix}android-person:before { content: $ionicon-var-android-person; }\n.#{$ionicons-prefix}android-person-add:before { content: $ionicon-var-android-person-add; }\n.#{$ionicons-prefix}android-phone-landscape:before { content: $ionicon-var-android-phone-landscape; }\n.#{$ionicons-prefix}android-phone-portrait:before { content: $ionicon-var-android-phone-portrait; }\n.#{$ionicons-prefix}android-pin:before { content: $ionicon-var-android-pin; }\n.#{$ionicons-prefix}android-plane:before { content: $ionicon-var-android-plane; }\n.#{$ionicons-prefix}android-playstore:before { content: $ionicon-var-android-playstore; }\n.#{$ionicons-prefix}android-print:before { content: $ionicon-var-android-print; }\n.#{$ionicons-prefix}android-radio-button-off:before { content: $ionicon-var-android-radio-button-off; }\n.#{$ionicons-prefix}android-radio-button-on:before { content: $ionicon-var-android-radio-button-on; }\n.#{$ionicons-prefix}android-refresh:before { content: $ionicon-var-android-refresh; }\n.#{$ionicons-prefix}android-remove:before { content: $ionicon-var-android-remove; }\n.#{$ionicons-prefix}android-remove-circle:before { content: $ionicon-var-android-remove-circle; }\n.#{$ionicons-prefix}android-restaurant:before { content: $ionicon-var-android-restaurant; }\n.#{$ionicons-prefix}android-sad:before { content: $ionicon-var-android-sad; }\n.#{$ionicons-prefix}android-search:before { content: $ionicon-var-android-search; }\n.#{$ionicons-prefix}android-send:before { content: $ionicon-var-android-send; }\n.#{$ionicons-prefix}android-settings:before { content: $ionicon-var-android-settings; }\n.#{$ionicons-prefix}android-share:before { content: $ionicon-var-android-share; }\n.#{$ionicons-prefix}android-share-alt:before { content: $ionicon-var-android-share-alt; }\n.#{$ionicons-prefix}android-star:before { content: $ionicon-var-android-star; }\n.#{$ionicons-prefix}android-star-half:before { content: $ionicon-var-android-star-half; }\n.#{$ionicons-prefix}android-star-outline:before { content: $ionicon-var-android-star-outline; }\n.#{$ionicons-prefix}android-stopwatch:before { content: $ionicon-var-android-stopwatch; }\n.#{$ionicons-prefix}android-subway:before { content: $ionicon-var-android-subway; }\n.#{$ionicons-prefix}android-sunny:before { content: $ionicon-var-android-sunny; }\n.#{$ionicons-prefix}android-sync:before { content: $ionicon-var-android-sync; }\n.#{$ionicons-prefix}android-textsms:before { content: $ionicon-var-android-textsms; }\n.#{$ionicons-prefix}android-time:before { content: $ionicon-var-android-time; }\n.#{$ionicons-prefix}android-train:before { content: $ionicon-var-android-train; }\n.#{$ionicons-prefix}android-unlock:before { content: $ionicon-var-android-unlock; }\n.#{$ionicons-prefix}android-upload:before { content: $ionicon-var-android-upload; }\n.#{$ionicons-prefix}android-volume-down:before { content: $ionicon-var-android-volume-down; }\n.#{$ionicons-prefix}android-volume-mute:before { content: $ionicon-var-android-volume-mute; }\n.#{$ionicons-prefix}android-volume-off:before { content: $ionicon-var-android-volume-off; }\n.#{$ionicons-prefix}android-volume-up:before { content: $ionicon-var-android-volume-up; }\n.#{$ionicons-prefix}android-walk:before { content: $ionicon-var-android-walk; }\n.#{$ionicons-prefix}android-warning:before { content: $ionicon-var-android-warning; }\n.#{$ionicons-prefix}android-watch:before { content: $ionicon-var-android-watch; }\n.#{$ionicons-prefix}android-wifi:before { content: $ionicon-var-android-wifi; }\n.#{$ionicons-prefix}aperture:before { content: $ionicon-var-aperture; }\n.#{$ionicons-prefix}archive:before { content: $ionicon-var-archive; }\n.#{$ionicons-prefix}arrow-down-a:before { content: $ionicon-var-arrow-down-a; }\n.#{$ionicons-prefix}arrow-down-b:before { content: $ionicon-var-arrow-down-b; }\n.#{$ionicons-prefix}arrow-down-c:before { content: $ionicon-var-arrow-down-c; }\n.#{$ionicons-prefix}arrow-expand:before { content: $ionicon-var-arrow-expand; }\n.#{$ionicons-prefix}arrow-graph-down-left:before { content: $ionicon-var-arrow-graph-down-left; }\n.#{$ionicons-prefix}arrow-graph-down-right:before { content: $ionicon-var-arrow-graph-down-right; }\n.#{$ionicons-prefix}arrow-graph-up-left:before { content: $ionicon-var-arrow-graph-up-left; }\n.#{$ionicons-prefix}arrow-graph-up-right:before { content: $ionicon-var-arrow-graph-up-right; }\n.#{$ionicons-prefix}arrow-left-a:before { content: $ionicon-var-arrow-left-a; }\n.#{$ionicons-prefix}arrow-left-b:before { content: $ionicon-var-arrow-left-b; }\n.#{$ionicons-prefix}arrow-left-c:before { content: $ionicon-var-arrow-left-c; }\n.#{$ionicons-prefix}arrow-move:before { content: $ionicon-var-arrow-move; }\n.#{$ionicons-prefix}arrow-resize:before { content: $ionicon-var-arrow-resize; }\n.#{$ionicons-prefix}arrow-return-left:before { content: $ionicon-var-arrow-return-left; }\n.#{$ionicons-prefix}arrow-return-right:before { content: $ionicon-var-arrow-return-right; }\n.#{$ionicons-prefix}arrow-right-a:before { content: $ionicon-var-arrow-right-a; }\n.#{$ionicons-prefix}arrow-right-b:before { content: $ionicon-var-arrow-right-b; }\n.#{$ionicons-prefix}arrow-right-c:before { content: $ionicon-var-arrow-right-c; }\n.#{$ionicons-prefix}arrow-shrink:before { content: $ionicon-var-arrow-shrink; }\n.#{$ionicons-prefix}arrow-swap:before { content: $ionicon-var-arrow-swap; }\n.#{$ionicons-prefix}arrow-up-a:before { content: $ionicon-var-arrow-up-a; }\n.#{$ionicons-prefix}arrow-up-b:before { content: $ionicon-var-arrow-up-b; }\n.#{$ionicons-prefix}arrow-up-c:before { content: $ionicon-var-arrow-up-c; }\n.#{$ionicons-prefix}asterisk:before { content: $ionicon-var-asterisk; }\n.#{$ionicons-prefix}at:before { content: $ionicon-var-at; }\n.#{$ionicons-prefix}backspace:before { content: $ionicon-var-backspace; }\n.#{$ionicons-prefix}backspace-outline:before { content: $ionicon-var-backspace-outline; }\n.#{$ionicons-prefix}bag:before { content: $ionicon-var-bag; }\n.#{$ionicons-prefix}battery-charging:before { content: $ionicon-var-battery-charging; }\n.#{$ionicons-prefix}battery-empty:before { content: $ionicon-var-battery-empty; }\n.#{$ionicons-prefix}battery-full:before { content: $ionicon-var-battery-full; }\n.#{$ionicons-prefix}battery-half:before { content: $ionicon-var-battery-half; }\n.#{$ionicons-prefix}battery-low:before { content: $ionicon-var-battery-low; }\n.#{$ionicons-prefix}beaker:before { content: $ionicon-var-beaker; }\n.#{$ionicons-prefix}beer:before { content: $ionicon-var-beer; }\n.#{$ionicons-prefix}bluetooth:before { content: $ionicon-var-bluetooth; }\n.#{$ionicons-prefix}bonfire:before { content: $ionicon-var-bonfire; }\n.#{$ionicons-prefix}bookmark:before { content: $ionicon-var-bookmark; }\n.#{$ionicons-prefix}bowtie:before { content: $ionicon-var-bowtie; }\n.#{$ionicons-prefix}briefcase:before { content: $ionicon-var-briefcase; }\n.#{$ionicons-prefix}bug:before { content: $ionicon-var-bug; }\n.#{$ionicons-prefix}calculator:before { content: $ionicon-var-calculator; }\n.#{$ionicons-prefix}calendar:before { content: $ionicon-var-calendar; }\n.#{$ionicons-prefix}camera:before { content: $ionicon-var-camera; }\n.#{$ionicons-prefix}card:before { content: $ionicon-var-card; }\n.#{$ionicons-prefix}cash:before { content: $ionicon-var-cash; }\n.#{$ionicons-prefix}chatbox:before { content: $ionicon-var-chatbox; }\n.#{$ionicons-prefix}chatbox-working:before { content: $ionicon-var-chatbox-working; }\n.#{$ionicons-prefix}chatboxes:before { content: $ionicon-var-chatboxes; }\n.#{$ionicons-prefix}chatbubble:before { content: $ionicon-var-chatbubble; }\n.#{$ionicons-prefix}chatbubble-working:before { content: $ionicon-var-chatbubble-working; }\n.#{$ionicons-prefix}chatbubbles:before { content: $ionicon-var-chatbubbles; }\n.#{$ionicons-prefix}checkmark:before { content: $ionicon-var-checkmark; }\n.#{$ionicons-prefix}checkmark-circled:before { content: $ionicon-var-checkmark-circled; }\n.#{$ionicons-prefix}checkmark-round:before { content: $ionicon-var-checkmark-round; }\n.#{$ionicons-prefix}chevron-down:before { content: $ionicon-var-chevron-down; }\n.#{$ionicons-prefix}chevron-left:before { content: $ionicon-var-chevron-left; }\n.#{$ionicons-prefix}chevron-right:before { content: $ionicon-var-chevron-right; }\n.#{$ionicons-prefix}chevron-up:before { content: $ionicon-var-chevron-up; }\n.#{$ionicons-prefix}clipboard:before { content: $ionicon-var-clipboard; }\n.#{$ionicons-prefix}clock:before { content: $ionicon-var-clock; }\n.#{$ionicons-prefix}close:before { content: $ionicon-var-close; }\n.#{$ionicons-prefix}close-circled:before { content: $ionicon-var-close-circled; }\n.#{$ionicons-prefix}close-round:before { content: $ionicon-var-close-round; }\n.#{$ionicons-prefix}closed-captioning:before { content: $ionicon-var-closed-captioning; }\n.#{$ionicons-prefix}cloud:before { content: $ionicon-var-cloud; }\n.#{$ionicons-prefix}code:before { content: $ionicon-var-code; }\n.#{$ionicons-prefix}code-download:before { content: $ionicon-var-code-download; }\n.#{$ionicons-prefix}code-working:before { content: $ionicon-var-code-working; }\n.#{$ionicons-prefix}coffee:before { content: $ionicon-var-coffee; }\n.#{$ionicons-prefix}compass:before { content: $ionicon-var-compass; }\n.#{$ionicons-prefix}compose:before { content: $ionicon-var-compose; }\n.#{$ionicons-prefix}connection-bars:before { content: $ionicon-var-connection-bars; }\n.#{$ionicons-prefix}contrast:before { content: $ionicon-var-contrast; }\n.#{$ionicons-prefix}crop:before { content: $ionicon-var-crop; }\n.#{$ionicons-prefix}cube:before { content: $ionicon-var-cube; }\n.#{$ionicons-prefix}disc:before { content: $ionicon-var-disc; }\n.#{$ionicons-prefix}document:before { content: $ionicon-var-document; }\n.#{$ionicons-prefix}document-text:before { content: $ionicon-var-document-text; }\n.#{$ionicons-prefix}drag:before { content: $ionicon-var-drag; }\n.#{$ionicons-prefix}earth:before { content: $ionicon-var-earth; }\n.#{$ionicons-prefix}easel:before { content: $ionicon-var-easel; }\n.#{$ionicons-prefix}edit:before { content: $ionicon-var-edit; }\n.#{$ionicons-prefix}egg:before { content: $ionicon-var-egg; }\n.#{$ionicons-prefix}eject:before { content: $ionicon-var-eject; }\n.#{$ionicons-prefix}email:before { content: $ionicon-var-email; }\n.#{$ionicons-prefix}email-unread:before { content: $ionicon-var-email-unread; }\n.#{$ionicons-prefix}erlenmeyer-flask:before { content: $ionicon-var-erlenmeyer-flask; }\n.#{$ionicons-prefix}erlenmeyer-flask-bubbles:before { content: $ionicon-var-erlenmeyer-flask-bubbles; }\n.#{$ionicons-prefix}eye:before { content: $ionicon-var-eye; }\n.#{$ionicons-prefix}eye-disabled:before { content: $ionicon-var-eye-disabled; }\n.#{$ionicons-prefix}female:before { content: $ionicon-var-female; }\n.#{$ionicons-prefix}filing:before { content: $ionicon-var-filing; }\n.#{$ionicons-prefix}film-marker:before { content: $ionicon-var-film-marker; }\n.#{$ionicons-prefix}fireball:before { content: $ionicon-var-fireball; }\n.#{$ionicons-prefix}flag:before { content: $ionicon-var-flag; }\n.#{$ionicons-prefix}flame:before { content: $ionicon-var-flame; }\n.#{$ionicons-prefix}flash:before { content: $ionicon-var-flash; }\n.#{$ionicons-prefix}flash-off:before { content: $ionicon-var-flash-off; }\n.#{$ionicons-prefix}folder:before { content: $ionicon-var-folder; }\n.#{$ionicons-prefix}fork:before { content: $ionicon-var-fork; }\n.#{$ionicons-prefix}fork-repo:before { content: $ionicon-var-fork-repo; }\n.#{$ionicons-prefix}forward:before { content: $ionicon-var-forward; }\n.#{$ionicons-prefix}funnel:before { content: $ionicon-var-funnel; }\n.#{$ionicons-prefix}gear-a:before { content: $ionicon-var-gear-a; }\n.#{$ionicons-prefix}gear-b:before { content: $ionicon-var-gear-b; }\n.#{$ionicons-prefix}grid:before { content: $ionicon-var-grid; }\n.#{$ionicons-prefix}hammer:before { content: $ionicon-var-hammer; }\n.#{$ionicons-prefix}happy:before { content: $ionicon-var-happy; }\n.#{$ionicons-prefix}happy-outline:before { content: $ionicon-var-happy-outline; }\n.#{$ionicons-prefix}headphone:before { content: $ionicon-var-headphone; }\n.#{$ionicons-prefix}heart:before { content: $ionicon-var-heart; }\n.#{$ionicons-prefix}heart-broken:before { content: $ionicon-var-heart-broken; }\n.#{$ionicons-prefix}help:before { content: $ionicon-var-help; }\n.#{$ionicons-prefix}help-buoy:before { content: $ionicon-var-help-buoy; }\n.#{$ionicons-prefix}help-circled:before { content: $ionicon-var-help-circled; }\n.#{$ionicons-prefix}home:before { content: $ionicon-var-home; }\n.#{$ionicons-prefix}icecream:before { content: $ionicon-var-icecream; }\n.#{$ionicons-prefix}image:before { content: $ionicon-var-image; }\n.#{$ionicons-prefix}images:before { content: $ionicon-var-images; }\n.#{$ionicons-prefix}information:before { content: $ionicon-var-information; }\n.#{$ionicons-prefix}information-circled:before { content: $ionicon-var-information-circled; }\n.#{$ionicons-prefix}ionic:before { content: $ionicon-var-ionic; }\n.#{$ionicons-prefix}ios-alarm:before { content: $ionicon-var-ios-alarm; }\n.#{$ionicons-prefix}ios-alarm-outline:before { content: $ionicon-var-ios-alarm-outline; }\n.#{$ionicons-prefix}ios-albums:before { content: $ionicon-var-ios-albums; }\n.#{$ionicons-prefix}ios-albums-outline:before { content: $ionicon-var-ios-albums-outline; }\n.#{$ionicons-prefix}ios-americanfootball:before { content: $ionicon-var-ios-americanfootball; }\n.#{$ionicons-prefix}ios-americanfootball-outline:before { content: $ionicon-var-ios-americanfootball-outline; }\n.#{$ionicons-prefix}ios-analytics:before { content: $ionicon-var-ios-analytics; }\n.#{$ionicons-prefix}ios-analytics-outline:before { content: $ionicon-var-ios-analytics-outline; }\n.#{$ionicons-prefix}ios-arrow-back:before { content: $ionicon-var-ios-arrow-back; }\n.#{$ionicons-prefix}ios-arrow-down:before { content: $ionicon-var-ios-arrow-down; }\n.#{$ionicons-prefix}ios-arrow-forward:before { content: $ionicon-var-ios-arrow-forward; }\n.#{$ionicons-prefix}ios-arrow-left:before { content: $ionicon-var-ios-arrow-left; }\n.#{$ionicons-prefix}ios-arrow-right:before { content: $ionicon-var-ios-arrow-right; }\n.#{$ionicons-prefix}ios-arrow-thin-down:before { content: $ionicon-var-ios-arrow-thin-down; }\n.#{$ionicons-prefix}ios-arrow-thin-left:before { content: $ionicon-var-ios-arrow-thin-left; }\n.#{$ionicons-prefix}ios-arrow-thin-right:before { content: $ionicon-var-ios-arrow-thin-right; }\n.#{$ionicons-prefix}ios-arrow-thin-up:before { content: $ionicon-var-ios-arrow-thin-up; }\n.#{$ionicons-prefix}ios-arrow-up:before { content: $ionicon-var-ios-arrow-up; }\n.#{$ionicons-prefix}ios-at:before { content: $ionicon-var-ios-at; }\n.#{$ionicons-prefix}ios-at-outline:before { content: $ionicon-var-ios-at-outline; }\n.#{$ionicons-prefix}ios-barcode:before { content: $ionicon-var-ios-barcode; }\n.#{$ionicons-prefix}ios-barcode-outline:before { content: $ionicon-var-ios-barcode-outline; }\n.#{$ionicons-prefix}ios-baseball:before { content: $ionicon-var-ios-baseball; }\n.#{$ionicons-prefix}ios-baseball-outline:before { content: $ionicon-var-ios-baseball-outline; }\n.#{$ionicons-prefix}ios-basketball:before { content: $ionicon-var-ios-basketball; }\n.#{$ionicons-prefix}ios-basketball-outline:before { content: $ionicon-var-ios-basketball-outline; }\n.#{$ionicons-prefix}ios-bell:before { content: $ionicon-var-ios-bell; }\n.#{$ionicons-prefix}ios-bell-outline:before { content: $ionicon-var-ios-bell-outline; }\n.#{$ionicons-prefix}ios-body:before { content: $ionicon-var-ios-body; }\n.#{$ionicons-prefix}ios-body-outline:before { content: $ionicon-var-ios-body-outline; }\n.#{$ionicons-prefix}ios-bolt:before { content: $ionicon-var-ios-bolt; }\n.#{$ionicons-prefix}ios-bolt-outline:before { content: $ionicon-var-ios-bolt-outline; }\n.#{$ionicons-prefix}ios-book:before { content: $ionicon-var-ios-book; }\n.#{$ionicons-prefix}ios-book-outline:before { content: $ionicon-var-ios-book-outline; }\n.#{$ionicons-prefix}ios-bookmarks:before { content: $ionicon-var-ios-bookmarks; }\n.#{$ionicons-prefix}ios-bookmarks-outline:before { content: $ionicon-var-ios-bookmarks-outline; }\n.#{$ionicons-prefix}ios-box:before { content: $ionicon-var-ios-box; }\n.#{$ionicons-prefix}ios-box-outline:before { content: $ionicon-var-ios-box-outline; }\n.#{$ionicons-prefix}ios-briefcase:before { content: $ionicon-var-ios-briefcase; }\n.#{$ionicons-prefix}ios-briefcase-outline:before { content: $ionicon-var-ios-briefcase-outline; }\n.#{$ionicons-prefix}ios-browsers:before { content: $ionicon-var-ios-browsers; }\n.#{$ionicons-prefix}ios-browsers-outline:before { content: $ionicon-var-ios-browsers-outline; }\n.#{$ionicons-prefix}ios-calculator:before { content: $ionicon-var-ios-calculator; }\n.#{$ionicons-prefix}ios-calculator-outline:before { content: $ionicon-var-ios-calculator-outline; }\n.#{$ionicons-prefix}ios-calendar:before { content: $ionicon-var-ios-calendar; }\n.#{$ionicons-prefix}ios-calendar-outline:before { content: $ionicon-var-ios-calendar-outline; }\n.#{$ionicons-prefix}ios-camera:before { content: $ionicon-var-ios-camera; }\n.#{$ionicons-prefix}ios-camera-outline:before { content: $ionicon-var-ios-camera-outline; }\n.#{$ionicons-prefix}ios-cart:before { content: $ionicon-var-ios-cart; }\n.#{$ionicons-prefix}ios-cart-outline:before { content: $ionicon-var-ios-cart-outline; }\n.#{$ionicons-prefix}ios-chatboxes:before { content: $ionicon-var-ios-chatboxes; }\n.#{$ionicons-prefix}ios-chatboxes-outline:before { content: $ionicon-var-ios-chatboxes-outline; }\n.#{$ionicons-prefix}ios-chatbubble:before { content: $ionicon-var-ios-chatbubble; }\n.#{$ionicons-prefix}ios-chatbubble-outline:before { content: $ionicon-var-ios-chatbubble-outline; }\n.#{$ionicons-prefix}ios-checkmark:before { content: $ionicon-var-ios-checkmark; }\n.#{$ionicons-prefix}ios-checkmark-empty:before { content: $ionicon-var-ios-checkmark-empty; }\n.#{$ionicons-prefix}ios-checkmark-outline:before { content: $ionicon-var-ios-checkmark-outline; }\n.#{$ionicons-prefix}ios-circle-filled:before { content: $ionicon-var-ios-circle-filled; }\n.#{$ionicons-prefix}ios-circle-outline:before { content: $ionicon-var-ios-circle-outline; }\n.#{$ionicons-prefix}ios-clock:before { content: $ionicon-var-ios-clock; }\n.#{$ionicons-prefix}ios-clock-outline:before { content: $ionicon-var-ios-clock-outline; }\n.#{$ionicons-prefix}ios-close:before { content: $ionicon-var-ios-close; }\n.#{$ionicons-prefix}ios-close-empty:before { content: $ionicon-var-ios-close-empty; }\n.#{$ionicons-prefix}ios-close-outline:before { content: $ionicon-var-ios-close-outline; }\n.#{$ionicons-prefix}ios-cloud:before { content: $ionicon-var-ios-cloud; }\n.#{$ionicons-prefix}ios-cloud-download:before { content: $ionicon-var-ios-cloud-download; }\n.#{$ionicons-prefix}ios-cloud-download-outline:before { content: $ionicon-var-ios-cloud-download-outline; }\n.#{$ionicons-prefix}ios-cloud-outline:before { content: $ionicon-var-ios-cloud-outline; }\n.#{$ionicons-prefix}ios-cloud-upload:before { content: $ionicon-var-ios-cloud-upload; }\n.#{$ionicons-prefix}ios-cloud-upload-outline:before { content: $ionicon-var-ios-cloud-upload-outline; }\n.#{$ionicons-prefix}ios-cloudy:before { content: $ionicon-var-ios-cloudy; }\n.#{$ionicons-prefix}ios-cloudy-night:before { content: $ionicon-var-ios-cloudy-night; }\n.#{$ionicons-prefix}ios-cloudy-night-outline:before { content: $ionicon-var-ios-cloudy-night-outline; }\n.#{$ionicons-prefix}ios-cloudy-outline:before { content: $ionicon-var-ios-cloudy-outline; }\n.#{$ionicons-prefix}ios-cog:before { content: $ionicon-var-ios-cog; }\n.#{$ionicons-prefix}ios-cog-outline:before { content: $ionicon-var-ios-cog-outline; }\n.#{$ionicons-prefix}ios-color-filter:before { content: $ionicon-var-ios-color-filter; }\n.#{$ionicons-prefix}ios-color-filter-outline:before { content: $ionicon-var-ios-color-filter-outline; }\n.#{$ionicons-prefix}ios-color-wand:before { content: $ionicon-var-ios-color-wand; }\n.#{$ionicons-prefix}ios-color-wand-outline:before { content: $ionicon-var-ios-color-wand-outline; }\n.#{$ionicons-prefix}ios-compose:before { content: $ionicon-var-ios-compose; }\n.#{$ionicons-prefix}ios-compose-outline:before { content: $ionicon-var-ios-compose-outline; }\n.#{$ionicons-prefix}ios-contact:before { content: $ionicon-var-ios-contact; }\n.#{$ionicons-prefix}ios-contact-outline:before { content: $ionicon-var-ios-contact-outline; }\n.#{$ionicons-prefix}ios-copy:before { content: $ionicon-var-ios-copy; }\n.#{$ionicons-prefix}ios-copy-outline:before { content: $ionicon-var-ios-copy-outline; }\n.#{$ionicons-prefix}ios-crop:before { content: $ionicon-var-ios-crop; }\n.#{$ionicons-prefix}ios-crop-strong:before { content: $ionicon-var-ios-crop-strong; }\n.#{$ionicons-prefix}ios-download:before { content: $ionicon-var-ios-download; }\n.#{$ionicons-prefix}ios-download-outline:before { content: $ionicon-var-ios-download-outline; }\n.#{$ionicons-prefix}ios-drag:before { content: $ionicon-var-ios-drag; }\n.#{$ionicons-prefix}ios-email:before { content: $ionicon-var-ios-email; }\n.#{$ionicons-prefix}ios-email-outline:before { content: $ionicon-var-ios-email-outline; }\n.#{$ionicons-prefix}ios-eye:before { content: $ionicon-var-ios-eye; }\n.#{$ionicons-prefix}ios-eye-outline:before { content: $ionicon-var-ios-eye-outline; }\n.#{$ionicons-prefix}ios-fastforward:before { content: $ionicon-var-ios-fastforward; }\n.#{$ionicons-prefix}ios-fastforward-outline:before { content: $ionicon-var-ios-fastforward-outline; }\n.#{$ionicons-prefix}ios-filing:before { content: $ionicon-var-ios-filing; }\n.#{$ionicons-prefix}ios-filing-outline:before { content: $ionicon-var-ios-filing-outline; }\n.#{$ionicons-prefix}ios-film:before { content: $ionicon-var-ios-film; }\n.#{$ionicons-prefix}ios-film-outline:before { content: $ionicon-var-ios-film-outline; }\n.#{$ionicons-prefix}ios-flag:before { content: $ionicon-var-ios-flag; }\n.#{$ionicons-prefix}ios-flag-outline:before { content: $ionicon-var-ios-flag-outline; }\n.#{$ionicons-prefix}ios-flame:before { content: $ionicon-var-ios-flame; }\n.#{$ionicons-prefix}ios-flame-outline:before { content: $ionicon-var-ios-flame-outline; }\n.#{$ionicons-prefix}ios-flask:before { content: $ionicon-var-ios-flask; }\n.#{$ionicons-prefix}ios-flask-outline:before { content: $ionicon-var-ios-flask-outline; }\n.#{$ionicons-prefix}ios-flower:before { content: $ionicon-var-ios-flower; }\n.#{$ionicons-prefix}ios-flower-outline:before { content: $ionicon-var-ios-flower-outline; }\n.#{$ionicons-prefix}ios-folder:before { content: $ionicon-var-ios-folder; }\n.#{$ionicons-prefix}ios-folder-outline:before { content: $ionicon-var-ios-folder-outline; }\n.#{$ionicons-prefix}ios-football:before { content: $ionicon-var-ios-football; }\n.#{$ionicons-prefix}ios-football-outline:before { content: $ionicon-var-ios-football-outline; }\n.#{$ionicons-prefix}ios-game-controller-a:before { content: $ionicon-var-ios-game-controller-a; }\n.#{$ionicons-prefix}ios-game-controller-a-outline:before { content: $ionicon-var-ios-game-controller-a-outline; }\n.#{$ionicons-prefix}ios-game-controller-b:before { content: $ionicon-var-ios-game-controller-b; }\n.#{$ionicons-prefix}ios-game-controller-b-outline:before { content: $ionicon-var-ios-game-controller-b-outline; }\n.#{$ionicons-prefix}ios-gear:before { content: $ionicon-var-ios-gear; }\n.#{$ionicons-prefix}ios-gear-outline:before { content: $ionicon-var-ios-gear-outline; }\n.#{$ionicons-prefix}ios-glasses:before { content: $ionicon-var-ios-glasses; }\n.#{$ionicons-prefix}ios-glasses-outline:before { content: $ionicon-var-ios-glasses-outline; }\n.#{$ionicons-prefix}ios-grid-view:before { content: $ionicon-var-ios-grid-view; }\n.#{$ionicons-prefix}ios-grid-view-outline:before { content: $ionicon-var-ios-grid-view-outline; }\n.#{$ionicons-prefix}ios-heart:before { content: $ionicon-var-ios-heart; }\n.#{$ionicons-prefix}ios-heart-outline:before { content: $ionicon-var-ios-heart-outline; }\n.#{$ionicons-prefix}ios-help:before { content: $ionicon-var-ios-help; }\n.#{$ionicons-prefix}ios-help-empty:before { content: $ionicon-var-ios-help-empty; }\n.#{$ionicons-prefix}ios-help-outline:before { content: $ionicon-var-ios-help-outline; }\n.#{$ionicons-prefix}ios-home:before { content: $ionicon-var-ios-home; }\n.#{$ionicons-prefix}ios-home-outline:before { content: $ionicon-var-ios-home-outline; }\n.#{$ionicons-prefix}ios-infinite:before { content: $ionicon-var-ios-infinite; }\n.#{$ionicons-prefix}ios-infinite-outline:before { content: $ionicon-var-ios-infinite-outline; }\n.#{$ionicons-prefix}ios-information:before { content: $ionicon-var-ios-information; }\n.#{$ionicons-prefix}ios-information-empty:before { content: $ionicon-var-ios-information-empty; }\n.#{$ionicons-prefix}ios-information-outline:before { content: $ionicon-var-ios-information-outline; }\n.#{$ionicons-prefix}ios-ionic-outline:before { content: $ionicon-var-ios-ionic-outline; }\n.#{$ionicons-prefix}ios-keypad:before { content: $ionicon-var-ios-keypad; }\n.#{$ionicons-prefix}ios-keypad-outline:before { content: $ionicon-var-ios-keypad-outline; }\n.#{$ionicons-prefix}ios-lightbulb:before { content: $ionicon-var-ios-lightbulb; }\n.#{$ionicons-prefix}ios-lightbulb-outline:before { content: $ionicon-var-ios-lightbulb-outline; }\n.#{$ionicons-prefix}ios-list:before { content: $ionicon-var-ios-list; }\n.#{$ionicons-prefix}ios-list-outline:before { content: $ionicon-var-ios-list-outline; }\n.#{$ionicons-prefix}ios-location:before { content: $ionicon-var-ios-location; }\n.#{$ionicons-prefix}ios-location-outline:before { content: $ionicon-var-ios-location-outline; }\n.#{$ionicons-prefix}ios-locked:before { content: $ionicon-var-ios-locked; }\n.#{$ionicons-prefix}ios-locked-outline:before { content: $ionicon-var-ios-locked-outline; }\n.#{$ionicons-prefix}ios-loop:before { content: $ionicon-var-ios-loop; }\n.#{$ionicons-prefix}ios-loop-strong:before { content: $ionicon-var-ios-loop-strong; }\n.#{$ionicons-prefix}ios-medical:before { content: $ionicon-var-ios-medical; }\n.#{$ionicons-prefix}ios-medical-outline:before { content: $ionicon-var-ios-medical-outline; }\n.#{$ionicons-prefix}ios-medkit:before { content: $ionicon-var-ios-medkit; }\n.#{$ionicons-prefix}ios-medkit-outline:before { content: $ionicon-var-ios-medkit-outline; }\n.#{$ionicons-prefix}ios-mic:before { content: $ionicon-var-ios-mic; }\n.#{$ionicons-prefix}ios-mic-off:before { content: $ionicon-var-ios-mic-off; }\n.#{$ionicons-prefix}ios-mic-outline:before { content: $ionicon-var-ios-mic-outline; }\n.#{$ionicons-prefix}ios-minus:before { content: $ionicon-var-ios-minus; }\n.#{$ionicons-prefix}ios-minus-empty:before { content: $ionicon-var-ios-minus-empty; }\n.#{$ionicons-prefix}ios-minus-outline:before { content: $ionicon-var-ios-minus-outline; }\n.#{$ionicons-prefix}ios-monitor:before { content: $ionicon-var-ios-monitor; }\n.#{$ionicons-prefix}ios-monitor-outline:before { content: $ionicon-var-ios-monitor-outline; }\n.#{$ionicons-prefix}ios-moon:before { content: $ionicon-var-ios-moon; }\n.#{$ionicons-prefix}ios-moon-outline:before { content: $ionicon-var-ios-moon-outline; }\n.#{$ionicons-prefix}ios-more:before { content: $ionicon-var-ios-more; }\n.#{$ionicons-prefix}ios-more-outline:before { content: $ionicon-var-ios-more-outline; }\n.#{$ionicons-prefix}ios-musical-note:before { content: $ionicon-var-ios-musical-note; }\n.#{$ionicons-prefix}ios-musical-notes:before { content: $ionicon-var-ios-musical-notes; }\n.#{$ionicons-prefix}ios-navigate:before { content: $ionicon-var-ios-navigate; }\n.#{$ionicons-prefix}ios-navigate-outline:before { content: $ionicon-var-ios-navigate-outline; }\n.#{$ionicons-prefix}ios-nutrition:before { content: $ionicon-var-ios-nutrition; }\n.#{$ionicons-prefix}ios-nutrition-outline:before { content: $ionicon-var-ios-nutrition-outline; }\n.#{$ionicons-prefix}ios-paper:before { content: $ionicon-var-ios-paper; }\n.#{$ionicons-prefix}ios-paper-outline:before { content: $ionicon-var-ios-paper-outline; }\n.#{$ionicons-prefix}ios-paperplane:before { content: $ionicon-var-ios-paperplane; }\n.#{$ionicons-prefix}ios-paperplane-outline:before { content: $ionicon-var-ios-paperplane-outline; }\n.#{$ionicons-prefix}ios-partlysunny:before { content: $ionicon-var-ios-partlysunny; }\n.#{$ionicons-prefix}ios-partlysunny-outline:before { content: $ionicon-var-ios-partlysunny-outline; }\n.#{$ionicons-prefix}ios-pause:before { content: $ionicon-var-ios-pause; }\n.#{$ionicons-prefix}ios-pause-outline:before { content: $ionicon-var-ios-pause-outline; }\n.#{$ionicons-prefix}ios-paw:before { content: $ionicon-var-ios-paw; }\n.#{$ionicons-prefix}ios-paw-outline:before { content: $ionicon-var-ios-paw-outline; }\n.#{$ionicons-prefix}ios-people:before { content: $ionicon-var-ios-people; }\n.#{$ionicons-prefix}ios-people-outline:before { content: $ionicon-var-ios-people-outline; }\n.#{$ionicons-prefix}ios-person:before { content: $ionicon-var-ios-person; }\n.#{$ionicons-prefix}ios-person-outline:before { content: $ionicon-var-ios-person-outline; }\n.#{$ionicons-prefix}ios-personadd:before { content: $ionicon-var-ios-personadd; }\n.#{$ionicons-prefix}ios-personadd-outline:before { content: $ionicon-var-ios-personadd-outline; }\n.#{$ionicons-prefix}ios-photos:before { content: $ionicon-var-ios-photos; }\n.#{$ionicons-prefix}ios-photos-outline:before { content: $ionicon-var-ios-photos-outline; }\n.#{$ionicons-prefix}ios-pie:before { content: $ionicon-var-ios-pie; }\n.#{$ionicons-prefix}ios-pie-outline:before { content: $ionicon-var-ios-pie-outline; }\n.#{$ionicons-prefix}ios-pint:before { content: $ionicon-var-ios-pint; }\n.#{$ionicons-prefix}ios-pint-outline:before { content: $ionicon-var-ios-pint-outline; }\n.#{$ionicons-prefix}ios-play:before { content: $ionicon-var-ios-play; }\n.#{$ionicons-prefix}ios-play-outline:before { content: $ionicon-var-ios-play-outline; }\n.#{$ionicons-prefix}ios-plus:before { content: $ionicon-var-ios-plus; }\n.#{$ionicons-prefix}ios-plus-empty:before { content: $ionicon-var-ios-plus-empty; }\n.#{$ionicons-prefix}ios-plus-outline:before { content: $ionicon-var-ios-plus-outline; }\n.#{$ionicons-prefix}ios-pricetag:before { content: $ionicon-var-ios-pricetag; }\n.#{$ionicons-prefix}ios-pricetag-outline:before { content: $ionicon-var-ios-pricetag-outline; }\n.#{$ionicons-prefix}ios-pricetags:before { content: $ionicon-var-ios-pricetags; }\n.#{$ionicons-prefix}ios-pricetags-outline:before { content: $ionicon-var-ios-pricetags-outline; }\n.#{$ionicons-prefix}ios-printer:before { content: $ionicon-var-ios-printer; }\n.#{$ionicons-prefix}ios-printer-outline:before { content: $ionicon-var-ios-printer-outline; }\n.#{$ionicons-prefix}ios-pulse:before { content: $ionicon-var-ios-pulse; }\n.#{$ionicons-prefix}ios-pulse-strong:before { content: $ionicon-var-ios-pulse-strong; }\n.#{$ionicons-prefix}ios-rainy:before { content: $ionicon-var-ios-rainy; }\n.#{$ionicons-prefix}ios-rainy-outline:before { content: $ionicon-var-ios-rainy-outline; }\n.#{$ionicons-prefix}ios-recording:before { content: $ionicon-var-ios-recording; }\n.#{$ionicons-prefix}ios-recording-outline:before { content: $ionicon-var-ios-recording-outline; }\n.#{$ionicons-prefix}ios-redo:before { content: $ionicon-var-ios-redo; }\n.#{$ionicons-prefix}ios-redo-outline:before { content: $ionicon-var-ios-redo-outline; }\n.#{$ionicons-prefix}ios-refresh:before { content: $ionicon-var-ios-refresh; }\n.#{$ionicons-prefix}ios-refresh-empty:before { content: $ionicon-var-ios-refresh-empty; }\n.#{$ionicons-prefix}ios-refresh-outline:before { content: $ionicon-var-ios-refresh-outline; }\n.#{$ionicons-prefix}ios-reload:before { content: $ionicon-var-ios-reload; }\n.#{$ionicons-prefix}ios-reverse-camera:before { content: $ionicon-var-ios-reverse-camera; }\n.#{$ionicons-prefix}ios-reverse-camera-outline:before { content: $ionicon-var-ios-reverse-camera-outline; }\n.#{$ionicons-prefix}ios-rewind:before { content: $ionicon-var-ios-rewind; }\n.#{$ionicons-prefix}ios-rewind-outline:before { content: $ionicon-var-ios-rewind-outline; }\n.#{$ionicons-prefix}ios-rose:before { content: $ionicon-var-ios-rose; }\n.#{$ionicons-prefix}ios-rose-outline:before { content: $ionicon-var-ios-rose-outline; }\n.#{$ionicons-prefix}ios-search:before { content: $ionicon-var-ios-search; }\n.#{$ionicons-prefix}ios-search-strong:before { content: $ionicon-var-ios-search-strong; }\n.#{$ionicons-prefix}ios-settings:before { content: $ionicon-var-ios-settings; }\n.#{$ionicons-prefix}ios-settings-strong:before { content: $ionicon-var-ios-settings-strong; }\n.#{$ionicons-prefix}ios-shuffle:before { content: $ionicon-var-ios-shuffle; }\n.#{$ionicons-prefix}ios-shuffle-strong:before { content: $ionicon-var-ios-shuffle-strong; }\n.#{$ionicons-prefix}ios-skipbackward:before { content: $ionicon-var-ios-skipbackward; }\n.#{$ionicons-prefix}ios-skipbackward-outline:before { content: $ionicon-var-ios-skipbackward-outline; }\n.#{$ionicons-prefix}ios-skipforward:before { content: $ionicon-var-ios-skipforward; }\n.#{$ionicons-prefix}ios-skipforward-outline:before { content: $ionicon-var-ios-skipforward-outline; }\n.#{$ionicons-prefix}ios-snowy:before { content: $ionicon-var-ios-snowy; }\n.#{$ionicons-prefix}ios-speedometer:before { content: $ionicon-var-ios-speedometer; }\n.#{$ionicons-prefix}ios-speedometer-outline:before { content: $ionicon-var-ios-speedometer-outline; }\n.#{$ionicons-prefix}ios-star:before { content: $ionicon-var-ios-star; }\n.#{$ionicons-prefix}ios-star-half:before { content: $ionicon-var-ios-star-half; }\n.#{$ionicons-prefix}ios-star-outline:before { content: $ionicon-var-ios-star-outline; }\n.#{$ionicons-prefix}ios-stopwatch:before { content: $ionicon-var-ios-stopwatch; }\n.#{$ionicons-prefix}ios-stopwatch-outline:before { content: $ionicon-var-ios-stopwatch-outline; }\n.#{$ionicons-prefix}ios-sunny:before { content: $ionicon-var-ios-sunny; }\n.#{$ionicons-prefix}ios-sunny-outline:before { content: $ionicon-var-ios-sunny-outline; }\n.#{$ionicons-prefix}ios-telephone:before { content: $ionicon-var-ios-telephone; }\n.#{$ionicons-prefix}ios-telephone-outline:before { content: $ionicon-var-ios-telephone-outline; }\n.#{$ionicons-prefix}ios-tennisball:before { content: $ionicon-var-ios-tennisball; }\n.#{$ionicons-prefix}ios-tennisball-outline:before { content: $ionicon-var-ios-tennisball-outline; }\n.#{$ionicons-prefix}ios-thunderstorm:before { content: $ionicon-var-ios-thunderstorm; }\n.#{$ionicons-prefix}ios-thunderstorm-outline:before { content: $ionicon-var-ios-thunderstorm-outline; }\n.#{$ionicons-prefix}ios-time:before { content: $ionicon-var-ios-time; }\n.#{$ionicons-prefix}ios-time-outline:before { content: $ionicon-var-ios-time-outline; }\n.#{$ionicons-prefix}ios-timer:before { content: $ionicon-var-ios-timer; }\n.#{$ionicons-prefix}ios-timer-outline:before { content: $ionicon-var-ios-timer-outline; }\n.#{$ionicons-prefix}ios-toggle:before { content: $ionicon-var-ios-toggle; }\n.#{$ionicons-prefix}ios-toggle-outline:before { content: $ionicon-var-ios-toggle-outline; }\n.#{$ionicons-prefix}ios-trash:before { content: $ionicon-var-ios-trash; }\n.#{$ionicons-prefix}ios-trash-outline:before { content: $ionicon-var-ios-trash-outline; }\n.#{$ionicons-prefix}ios-undo:before { content: $ionicon-var-ios-undo; }\n.#{$ionicons-prefix}ios-undo-outline:before { content: $ionicon-var-ios-undo-outline; }\n.#{$ionicons-prefix}ios-unlocked:before { content: $ionicon-var-ios-unlocked; }\n.#{$ionicons-prefix}ios-unlocked-outline:before { content: $ionicon-var-ios-unlocked-outline; }\n.#{$ionicons-prefix}ios-upload:before { content: $ionicon-var-ios-upload; }\n.#{$ionicons-prefix}ios-upload-outline:before { content: $ionicon-var-ios-upload-outline; }\n.#{$ionicons-prefix}ios-videocam:before { content: $ionicon-var-ios-videocam; }\n.#{$ionicons-prefix}ios-videocam-outline:before { content: $ionicon-var-ios-videocam-outline; }\n.#{$ionicons-prefix}ios-volume-high:before { content: $ionicon-var-ios-volume-high; }\n.#{$ionicons-prefix}ios-volume-low:before { content: $ionicon-var-ios-volume-low; }\n.#{$ionicons-prefix}ios-wineglass:before { content: $ionicon-var-ios-wineglass; }\n.#{$ionicons-prefix}ios-wineglass-outline:before { content: $ionicon-var-ios-wineglass-outline; }\n.#{$ionicons-prefix}ios-world:before { content: $ionicon-var-ios-world; }\n.#{$ionicons-prefix}ios-world-outline:before { content: $ionicon-var-ios-world-outline; }\n.#{$ionicons-prefix}ipad:before { content: $ionicon-var-ipad; }\n.#{$ionicons-prefix}iphone:before { content: $ionicon-var-iphone; }\n.#{$ionicons-prefix}ipod:before { content: $ionicon-var-ipod; }\n.#{$ionicons-prefix}jet:before { content: $ionicon-var-jet; }\n.#{$ionicons-prefix}key:before { content: $ionicon-var-key; }\n.#{$ionicons-prefix}knife:before { content: $ionicon-var-knife; }\n.#{$ionicons-prefix}laptop:before { content: $ionicon-var-laptop; }\n.#{$ionicons-prefix}leaf:before { content: $ionicon-var-leaf; }\n.#{$ionicons-prefix}levels:before { content: $ionicon-var-levels; }\n.#{$ionicons-prefix}lightbulb:before { content: $ionicon-var-lightbulb; }\n.#{$ionicons-prefix}link:before { content: $ionicon-var-link; }\n.#{$ionicons-prefix}load-a:before { content: $ionicon-var-load-a; }\n.#{$ionicons-prefix}load-b:before { content: $ionicon-var-load-b; }\n.#{$ionicons-prefix}load-c:before { content: $ionicon-var-load-c; }\n.#{$ionicons-prefix}load-d:before { content: $ionicon-var-load-d; }\n.#{$ionicons-prefix}location:before { content: $ionicon-var-location; }\n.#{$ionicons-prefix}lock-combination:before { content: $ionicon-var-lock-combination; }\n.#{$ionicons-prefix}locked:before { content: $ionicon-var-locked; }\n.#{$ionicons-prefix}log-in:before { content: $ionicon-var-log-in; }\n.#{$ionicons-prefix}log-out:before { content: $ionicon-var-log-out; }\n.#{$ionicons-prefix}loop:before { content: $ionicon-var-loop; }\n.#{$ionicons-prefix}magnet:before { content: $ionicon-var-magnet; }\n.#{$ionicons-prefix}male:before { content: $ionicon-var-male; }\n.#{$ionicons-prefix}man:before { content: $ionicon-var-man; }\n.#{$ionicons-prefix}map:before { content: $ionicon-var-map; }\n.#{$ionicons-prefix}medkit:before { content: $ionicon-var-medkit; }\n.#{$ionicons-prefix}merge:before { content: $ionicon-var-merge; }\n.#{$ionicons-prefix}mic-a:before { content: $ionicon-var-mic-a; }\n.#{$ionicons-prefix}mic-b:before { content: $ionicon-var-mic-b; }\n.#{$ionicons-prefix}mic-c:before { content: $ionicon-var-mic-c; }\n.#{$ionicons-prefix}minus:before { content: $ionicon-var-minus; }\n.#{$ionicons-prefix}minus-circled:before { content: $ionicon-var-minus-circled; }\n.#{$ionicons-prefix}minus-round:before { content: $ionicon-var-minus-round; }\n.#{$ionicons-prefix}model-s:before { content: $ionicon-var-model-s; }\n.#{$ionicons-prefix}monitor:before { content: $ionicon-var-monitor; }\n.#{$ionicons-prefix}more:before { content: $ionicon-var-more; }\n.#{$ionicons-prefix}mouse:before { content: $ionicon-var-mouse; }\n.#{$ionicons-prefix}music-note:before { content: $ionicon-var-music-note; }\n.#{$ionicons-prefix}navicon:before { content: $ionicon-var-navicon; }\n.#{$ionicons-prefix}navicon-round:before { content: $ionicon-var-navicon-round; }\n.#{$ionicons-prefix}navigate:before { content: $ionicon-var-navigate; }\n.#{$ionicons-prefix}network:before { content: $ionicon-var-network; }\n.#{$ionicons-prefix}no-smoking:before { content: $ionicon-var-no-smoking; }\n.#{$ionicons-prefix}nuclear:before { content: $ionicon-var-nuclear; }\n.#{$ionicons-prefix}outlet:before { content: $ionicon-var-outlet; }\n.#{$ionicons-prefix}paintbrush:before { content: $ionicon-var-paintbrush; }\n.#{$ionicons-prefix}paintbucket:before { content: $ionicon-var-paintbucket; }\n.#{$ionicons-prefix}paper-airplane:before { content: $ionicon-var-paper-airplane; }\n.#{$ionicons-prefix}paperclip:before { content: $ionicon-var-paperclip; }\n.#{$ionicons-prefix}pause:before { content: $ionicon-var-pause; }\n.#{$ionicons-prefix}person:before { content: $ionicon-var-person; }\n.#{$ionicons-prefix}person-add:before { content: $ionicon-var-person-add; }\n.#{$ionicons-prefix}person-stalker:before { content: $ionicon-var-person-stalker; }\n.#{$ionicons-prefix}pie-graph:before { content: $ionicon-var-pie-graph; }\n.#{$ionicons-prefix}pin:before { content: $ionicon-var-pin; }\n.#{$ionicons-prefix}pinpoint:before { content: $ionicon-var-pinpoint; }\n.#{$ionicons-prefix}pizza:before { content: $ionicon-var-pizza; }\n.#{$ionicons-prefix}plane:before { content: $ionicon-var-plane; }\n.#{$ionicons-prefix}planet:before { content: $ionicon-var-planet; }\n.#{$ionicons-prefix}play:before { content: $ionicon-var-play; }\n.#{$ionicons-prefix}playstation:before { content: $ionicon-var-playstation; }\n.#{$ionicons-prefix}plus:before { content: $ionicon-var-plus; }\n.#{$ionicons-prefix}plus-circled:before { content: $ionicon-var-plus-circled; }\n.#{$ionicons-prefix}plus-round:before { content: $ionicon-var-plus-round; }\n.#{$ionicons-prefix}podium:before { content: $ionicon-var-podium; }\n.#{$ionicons-prefix}pound:before { content: $ionicon-var-pound; }\n.#{$ionicons-prefix}power:before { content: $ionicon-var-power; }\n.#{$ionicons-prefix}pricetag:before { content: $ionicon-var-pricetag; }\n.#{$ionicons-prefix}pricetags:before { content: $ionicon-var-pricetags; }\n.#{$ionicons-prefix}printer:before { content: $ionicon-var-printer; }\n.#{$ionicons-prefix}pull-request:before { content: $ionicon-var-pull-request; }\n.#{$ionicons-prefix}qr-scanner:before { content: $ionicon-var-qr-scanner; }\n.#{$ionicons-prefix}quote:before { content: $ionicon-var-quote; }\n.#{$ionicons-prefix}radio-waves:before { content: $ionicon-var-radio-waves; }\n.#{$ionicons-prefix}record:before { content: $ionicon-var-record; }\n.#{$ionicons-prefix}refresh:before { content: $ionicon-var-refresh; }\n.#{$ionicons-prefix}reply:before { content: $ionicon-var-reply; }\n.#{$ionicons-prefix}reply-all:before { content: $ionicon-var-reply-all; }\n.#{$ionicons-prefix}ribbon-a:before { content: $ionicon-var-ribbon-a; }\n.#{$ionicons-prefix}ribbon-b:before { content: $ionicon-var-ribbon-b; }\n.#{$ionicons-prefix}sad:before { content: $ionicon-var-sad; }\n.#{$ionicons-prefix}sad-outline:before { content: $ionicon-var-sad-outline; }\n.#{$ionicons-prefix}scissors:before { content: $ionicon-var-scissors; }\n.#{$ionicons-prefix}search:before { content: $ionicon-var-search; }\n.#{$ionicons-prefix}settings:before { content: $ionicon-var-settings; }\n.#{$ionicons-prefix}share:before { content: $ionicon-var-share; }\n.#{$ionicons-prefix}shuffle:before { content: $ionicon-var-shuffle; }\n.#{$ionicons-prefix}skip-backward:before { content: $ionicon-var-skip-backward; }\n.#{$ionicons-prefix}skip-forward:before { content: $ionicon-var-skip-forward; }\n.#{$ionicons-prefix}social-android:before { content: $ionicon-var-social-android; }\n.#{$ionicons-prefix}social-android-outline:before { content: $ionicon-var-social-android-outline; }\n.#{$ionicons-prefix}social-angular:before { content: $ionicon-var-social-angular; }\n.#{$ionicons-prefix}social-angular-outline:before { content: $ionicon-var-social-angular-outline; }\n.#{$ionicons-prefix}social-apple:before { content: $ionicon-var-social-apple; }\n.#{$ionicons-prefix}social-apple-outline:before { content: $ionicon-var-social-apple-outline; }\n.#{$ionicons-prefix}social-bitcoin:before { content: $ionicon-var-social-bitcoin; }\n.#{$ionicons-prefix}social-bitcoin-outline:before { content: $ionicon-var-social-bitcoin-outline; }\n.#{$ionicons-prefix}social-buffer:before { content: $ionicon-var-social-buffer; }\n.#{$ionicons-prefix}social-buffer-outline:before { content: $ionicon-var-social-buffer-outline; }\n.#{$ionicons-prefix}social-chrome:before { content: $ionicon-var-social-chrome; }\n.#{$ionicons-prefix}social-chrome-outline:before { content: $ionicon-var-social-chrome-outline; }\n.#{$ionicons-prefix}social-codepen:before { content: $ionicon-var-social-codepen; }\n.#{$ionicons-prefix}social-codepen-outline:before { content: $ionicon-var-social-codepen-outline; }\n.#{$ionicons-prefix}social-css3:before { content: $ionicon-var-social-css3; }\n.#{$ionicons-prefix}social-css3-outline:before { content: $ionicon-var-social-css3-outline; }\n.#{$ionicons-prefix}social-designernews:before { content: $ionicon-var-social-designernews; }\n.#{$ionicons-prefix}social-designernews-outline:before { content: $ionicon-var-social-designernews-outline; }\n.#{$ionicons-prefix}social-dribbble:before { content: $ionicon-var-social-dribbble; }\n.#{$ionicons-prefix}social-dribbble-outline:before { content: $ionicon-var-social-dribbble-outline; }\n.#{$ionicons-prefix}social-dropbox:before { content: $ionicon-var-social-dropbox; }\n.#{$ionicons-prefix}social-dropbox-outline:before { content: $ionicon-var-social-dropbox-outline; }\n.#{$ionicons-prefix}social-euro:before { content: $ionicon-var-social-euro; }\n.#{$ionicons-prefix}social-euro-outline:before { content: $ionicon-var-social-euro-outline; }\n.#{$ionicons-prefix}social-facebook:before { content: $ionicon-var-social-facebook; }\n.#{$ionicons-prefix}social-facebook-outline:before { content: $ionicon-var-social-facebook-outline; }\n.#{$ionicons-prefix}social-foursquare:before { content: $ionicon-var-social-foursquare; }\n.#{$ionicons-prefix}social-foursquare-outline:before { content: $ionicon-var-social-foursquare-outline; }\n.#{$ionicons-prefix}social-freebsd-devil:before { content: $ionicon-var-social-freebsd-devil; }\n.#{$ionicons-prefix}social-github:before { content: $ionicon-var-social-github; }\n.#{$ionicons-prefix}social-github-outline:before { content: $ionicon-var-social-github-outline; }\n.#{$ionicons-prefix}social-google:before { content: $ionicon-var-social-google; }\n.#{$ionicons-prefix}social-google-outline:before { content: $ionicon-var-social-google-outline; }\n.#{$ionicons-prefix}social-googleplus:before { content: $ionicon-var-social-googleplus; }\n.#{$ionicons-prefix}social-googleplus-outline:before { content: $ionicon-var-social-googleplus-outline; }\n.#{$ionicons-prefix}social-hackernews:before { content: $ionicon-var-social-hackernews; }\n.#{$ionicons-prefix}social-hackernews-outline:before { content: $ionicon-var-social-hackernews-outline; }\n.#{$ionicons-prefix}social-html5:before { content: $ionicon-var-social-html5; }\n.#{$ionicons-prefix}social-html5-outline:before { content: $ionicon-var-social-html5-outline; }\n.#{$ionicons-prefix}social-instagram:before { content: $ionicon-var-social-instagram; }\n.#{$ionicons-prefix}social-instagram-outline:before { content: $ionicon-var-social-instagram-outline; }\n.#{$ionicons-prefix}social-javascript:before { content: $ionicon-var-social-javascript; }\n.#{$ionicons-prefix}social-javascript-outline:before { content: $ionicon-var-social-javascript-outline; }\n.#{$ionicons-prefix}social-linkedin:before { content: $ionicon-var-social-linkedin; }\n.#{$ionicons-prefix}social-linkedin-outline:before { content: $ionicon-var-social-linkedin-outline; }\n.#{$ionicons-prefix}social-markdown:before { content: $ionicon-var-social-markdown; }\n.#{$ionicons-prefix}social-nodejs:before { content: $ionicon-var-social-nodejs; }\n.#{$ionicons-prefix}social-octocat:before { content: $ionicon-var-social-octocat; }\n.#{$ionicons-prefix}social-pinterest:before { content: $ionicon-var-social-pinterest; }\n.#{$ionicons-prefix}social-pinterest-outline:before { content: $ionicon-var-social-pinterest-outline; }\n.#{$ionicons-prefix}social-python:before { content: $ionicon-var-social-python; }\n.#{$ionicons-prefix}social-reddit:before { content: $ionicon-var-social-reddit; }\n.#{$ionicons-prefix}social-reddit-outline:before { content: $ionicon-var-social-reddit-outline; }\n.#{$ionicons-prefix}social-rss:before { content: $ionicon-var-social-rss; }\n.#{$ionicons-prefix}social-rss-outline:before { content: $ionicon-var-social-rss-outline; }\n.#{$ionicons-prefix}social-sass:before { content: $ionicon-var-social-sass; }\n.#{$ionicons-prefix}social-skype:before { content: $ionicon-var-social-skype; }\n.#{$ionicons-prefix}social-skype-outline:before { content: $ionicon-var-social-skype-outline; }\n.#{$ionicons-prefix}social-snapchat:before { content: $ionicon-var-social-snapchat; }\n.#{$ionicons-prefix}social-snapchat-outline:before { content: $ionicon-var-social-snapchat-outline; }\n.#{$ionicons-prefix}social-tumblr:before { content: $ionicon-var-social-tumblr; }\n.#{$ionicons-prefix}social-tumblr-outline:before { content: $ionicon-var-social-tumblr-outline; }\n.#{$ionicons-prefix}social-tux:before { content: $ionicon-var-social-tux; }\n.#{$ionicons-prefix}social-twitch:before { content: $ionicon-var-social-twitch; }\n.#{$ionicons-prefix}social-twitch-outline:before { content: $ionicon-var-social-twitch-outline; }\n.#{$ionicons-prefix}social-twitter:before { content: $ionicon-var-social-twitter; }\n.#{$ionicons-prefix}social-twitter-outline:before { content: $ionicon-var-social-twitter-outline; }\n.#{$ionicons-prefix}social-usd:before { content: $ionicon-var-social-usd; }\n.#{$ionicons-prefix}social-usd-outline:before { content: $ionicon-var-social-usd-outline; }\n.#{$ionicons-prefix}social-vimeo:before { content: $ionicon-var-social-vimeo; }\n.#{$ionicons-prefix}social-vimeo-outline:before { content: $ionicon-var-social-vimeo-outline; }\n.#{$ionicons-prefix}social-whatsapp:before { content: $ionicon-var-social-whatsapp; }\n.#{$ionicons-prefix}social-whatsapp-outline:before { content: $ionicon-var-social-whatsapp-outline; }\n.#{$ionicons-prefix}social-windows:before { content: $ionicon-var-social-windows; }\n.#{$ionicons-prefix}social-windows-outline:before { content: $ionicon-var-social-windows-outline; }\n.#{$ionicons-prefix}social-wordpress:before { content: $ionicon-var-social-wordpress; }\n.#{$ionicons-prefix}social-wordpress-outline:before { content: $ionicon-var-social-wordpress-outline; }\n.#{$ionicons-prefix}social-yahoo:before { content: $ionicon-var-social-yahoo; }\n.#{$ionicons-prefix}social-yahoo-outline:before { content: $ionicon-var-social-yahoo-outline; }\n.#{$ionicons-prefix}social-yen:before { content: $ionicon-var-social-yen; }\n.#{$ionicons-prefix}social-yen-outline:before { content: $ionicon-var-social-yen-outline; }\n.#{$ionicons-prefix}social-youtube:before { content: $ionicon-var-social-youtube; }\n.#{$ionicons-prefix}social-youtube-outline:before { content: $ionicon-var-social-youtube-outline; }\n.#{$ionicons-prefix}soup-can:before { content: $ionicon-var-soup-can; }\n.#{$ionicons-prefix}soup-can-outline:before { content: $ionicon-var-soup-can-outline; }\n.#{$ionicons-prefix}speakerphone:before { content: $ionicon-var-speakerphone; }\n.#{$ionicons-prefix}speedometer:before { content: $ionicon-var-speedometer; }\n.#{$ionicons-prefix}spoon:before { content: $ionicon-var-spoon; }\n.#{$ionicons-prefix}star:before { content: $ionicon-var-star; }\n.#{$ionicons-prefix}stats-bars:before { content: $ionicon-var-stats-bars; }\n.#{$ionicons-prefix}steam:before { content: $ionicon-var-steam; }\n.#{$ionicons-prefix}stop:before { content: $ionicon-var-stop; }\n.#{$ionicons-prefix}thermometer:before { content: $ionicon-var-thermometer; }\n.#{$ionicons-prefix}thumbsdown:before { content: $ionicon-var-thumbsdown; }\n.#{$ionicons-prefix}thumbsup:before { content: $ionicon-var-thumbsup; }\n.#{$ionicons-prefix}toggle:before { content: $ionicon-var-toggle; }\n.#{$ionicons-prefix}toggle-filled:before { content: $ionicon-var-toggle-filled; }\n.#{$ionicons-prefix}transgender:before { content: $ionicon-var-transgender; }\n.#{$ionicons-prefix}trash-a:before { content: $ionicon-var-trash-a; }\n.#{$ionicons-prefix}trash-b:before { content: $ionicon-var-trash-b; }\n.#{$ionicons-prefix}trophy:before { content: $ionicon-var-trophy; }\n.#{$ionicons-prefix}tshirt:before { content: $ionicon-var-tshirt; }\n.#{$ionicons-prefix}tshirt-outline:before { content: $ionicon-var-tshirt-outline; }\n.#{$ionicons-prefix}umbrella:before { content: $ionicon-var-umbrella; }\n.#{$ionicons-prefix}university:before { content: $ionicon-var-university; }\n.#{$ionicons-prefix}unlocked:before { content: $ionicon-var-unlocked; }\n.#{$ionicons-prefix}upload:before { content: $ionicon-var-upload; }\n.#{$ionicons-prefix}usb:before { content: $ionicon-var-usb; }\n.#{$ionicons-prefix}videocamera:before { content: $ionicon-var-videocamera; }\n.#{$ionicons-prefix}volume-high:before { content: $ionicon-var-volume-high; }\n.#{$ionicons-prefix}volume-low:before { content: $ionicon-var-volume-low; }\n.#{$ionicons-prefix}volume-medium:before { content: $ionicon-var-volume-medium; }\n.#{$ionicons-prefix}volume-mute:before { content: $ionicon-var-volume-mute; }\n.#{$ionicons-prefix}wand:before { content: $ionicon-var-wand; }\n.#{$ionicons-prefix}waterdrop:before { content: $ionicon-var-waterdrop; }\n.#{$ionicons-prefix}wifi:before { content: $ionicon-var-wifi; }\n.#{$ionicons-prefix}wineglass:before { content: $ionicon-var-wineglass; }\n.#{$ionicons-prefix}woman:before { content: $ionicon-var-woman; }\n.#{$ionicons-prefix}wrench:before { content: $ionicon-var-wrench; }\n.#{$ionicons-prefix}xbox:before { content: $ionicon-var-xbox; }","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n @include box-sizing(border-box);\n}\n*:before,\n*:after {\n @include box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: $font-family-base;\n font-size: $font-size-base;\n line-height: $line-height-base;\n color: $text-color;\n background-color: $body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus {\n @include tab-focus;\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n @include img-responsive;\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: $border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: $thumbnail-padding;\n line-height: $line-height-base;\n background-color: $thumbnail-bg;\n border: 1px solid $thumbnail-border;\n border-radius: $thumbnail-border-radius;\n @include transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n @include img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: $line-height-computed;\n margin-bottom: $line-height-computed;\n border: 0;\n border-top: 1px solid $hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n@mixin animation($animation) {\n -webkit-animation: $animation;\n -o-animation: $animation;\n animation: $animation;\n}\n@mixin animation-name($name) {\n -webkit-animation-name: $name;\n animation-name: $name;\n}\n@mixin animation-duration($duration) {\n -webkit-animation-duration: $duration;\n animation-duration: $duration;\n}\n@mixin animation-timing-function($timing-function) {\n -webkit-animation-timing-function: $timing-function;\n animation-timing-function: $timing-function;\n}\n@mixin animation-delay($delay) {\n -webkit-animation-delay: $delay;\n animation-delay: $delay;\n}\n@mixin animation-iteration-count($iteration-count) {\n -webkit-animation-iteration-count: $iteration-count;\n animation-iteration-count: $iteration-count;\n}\n@mixin animation-direction($direction) {\n -webkit-animation-direction: $direction;\n animation-direction: $direction;\n}\n@mixin animation-fill-mode($fill-mode) {\n -webkit-animation-fill-mode: $fill-mode;\n animation-fill-mode: $fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n@mixin backface-visibility($visibility) {\n -webkit-backface-visibility: $visibility;\n -moz-backface-visibility: $visibility;\n backface-visibility: $visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n@mixin box-shadow($shadow...) {\n -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1\n box-shadow: $shadow;\n}\n\n// Box sizing\n@mixin box-sizing($boxmodel) {\n -webkit-box-sizing: $boxmodel;\n -moz-box-sizing: $boxmodel;\n box-sizing: $boxmodel;\n}\n\n// CSS3 Content Columns\n@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {\n -webkit-column-count: $column-count;\n -moz-column-count: $column-count;\n column-count: $column-count;\n -webkit-column-gap: $column-gap;\n -moz-column-gap: $column-gap;\n column-gap: $column-gap;\n}\n\n// Optional hyphenation\n@mixin hyphens($mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: $mode;\n -moz-hyphens: $mode;\n -ms-hyphens: $mode; // IE10+\n -o-hyphens: $mode;\n hyphens: $mode;\n}\n\n// Placeholder text\n@mixin placeholder($color: $input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: $color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: $color; } // Safari and Chrome\n}\n\n// Transformations\n@mixin scale($ratio...) {\n -webkit-transform: scale($ratio);\n -ms-transform: scale($ratio); // IE9 only\n -o-transform: scale($ratio);\n transform: scale($ratio);\n}\n\n@mixin scaleX($ratio) {\n -webkit-transform: scaleX($ratio);\n -ms-transform: scaleX($ratio); // IE9 only\n -o-transform: scaleX($ratio);\n transform: scaleX($ratio);\n}\n@mixin scaleY($ratio) {\n -webkit-transform: scaleY($ratio);\n -ms-transform: scaleY($ratio); // IE9 only\n -o-transform: scaleY($ratio);\n transform: scaleY($ratio);\n}\n@mixin skew($x, $y) {\n -webkit-transform: skewX($x) skewY($y);\n -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX($x) skewY($y);\n transform: skewX($x) skewY($y);\n}\n@mixin translate($x, $y) {\n -webkit-transform: translate($x, $y);\n -ms-transform: translate($x, $y); // IE9 only\n -o-transform: translate($x, $y);\n transform: translate($x, $y);\n}\n@mixin translate3d($x, $y, $z) {\n -webkit-transform: translate3d($x, $y, $z);\n transform: translate3d($x, $y, $z);\n}\n@mixin rotate($degrees) {\n -webkit-transform: rotate($degrees);\n -ms-transform: rotate($degrees); // IE9 only\n -o-transform: rotate($degrees);\n transform: rotate($degrees);\n}\n@mixin rotateX($degrees) {\n -webkit-transform: rotateX($degrees);\n -ms-transform: rotateX($degrees); // IE9 only\n -o-transform: rotateX($degrees);\n transform: rotateX($degrees);\n}\n@mixin rotateY($degrees) {\n -webkit-transform: rotateY($degrees);\n -ms-transform: rotateY($degrees); // IE9 only\n -o-transform: rotateY($degrees);\n transform: rotateY($degrees);\n}\n@mixin perspective($perspective) {\n -webkit-perspective: $perspective;\n -moz-perspective: $perspective;\n perspective: $perspective;\n}\n@mixin perspective-origin($perspective) {\n -webkit-perspective-origin: $perspective;\n -moz-perspective-origin: $perspective;\n perspective-origin: $perspective;\n}\n@mixin transform-origin($origin) {\n -webkit-transform-origin: $origin;\n -moz-transform-origin: $origin;\n -ms-transform-origin: $origin; // IE9 only\n transform-origin: $origin;\n}\n\n\n// Transitions\n\n@mixin transition($transition...) {\n -webkit-transition: $transition;\n -o-transition: $transition;\n transition: $transition;\n}\n@mixin transition-property($transition-property...) {\n -webkit-transition-property: $transition-property;\n transition-property: $transition-property;\n}\n@mixin transition-delay($transition-delay) {\n -webkit-transition-delay: $transition-delay;\n transition-delay: $transition-delay;\n}\n@mixin transition-duration($transition-duration...) {\n -webkit-transition-duration: $transition-duration;\n transition-duration: $transition-duration;\n}\n@mixin transition-timing-function($timing-function) {\n -webkit-transition-timing-function: $timing-function;\n transition-timing-function: $timing-function;\n}\n@mixin transition-transform($transition...) {\n -webkit-transition: -webkit-transform $transition;\n -moz-transition: -moz-transform $transition;\n -o-transition: -o-transform $transition;\n transition: transform $transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n@mixin user-select($select) {\n -webkit-user-select: $select;\n -moz-user-select: $select;\n -ms-user-select: $select; // IE10+\n user-select: $select;\n}\n","$bootstrap-sass-asset-helper: false !default;\n//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n$gray-base: #000 !default;\n$gray-darker: lighten($gray-base, 13.5%) !default; // #222\n$gray-dark: lighten($gray-base, 20%) !default; // #333\n$gray: lighten($gray-base, 33.5%) !default; // #555\n$gray-light: lighten($gray-base, 46.7%) !default; // #777\n$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee\n\n$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7\n$brand-success: #5cb85c !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-danger: #d9534f !default;\n\n\n//== Scaffolding\n//\n//## Settings for some of the most global styles.\n\n//** Background color for ``.\n$body-bg: #fff !default;\n//** Global text color on ``.\n$text-color: $gray-dark !default;\n\n//** Global textual link color.\n$link-color: $brand-primary !default;\n//** Link hover color set via `darken()` function.\n$link-hover-color: darken($link-color, 15%) !default;\n//** Link hover decoration.\n$link-hover-decoration: underline !default;\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n$font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif !default;\n$font-family-serif: Georgia, \"Times New Roman\", Times, serif !default;\n//** Default monospace fonts for ``, ``, and `
      `.\n$font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace !default;\n$font-family-base:        $font-family-sans-serif !default;\n\n$font-size-base:          14px !default;\n$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px\n\n$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px\n$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px\n$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px\n$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-h5:            $font-size-base !default;\n$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n$line-height-base:        1.428571429 !default; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px\n\n//** By default, this inherits from the ``.\n$headings-font-family:    inherit !default;\n$headings-font-weight:    500 !default;\n$headings-line-height:    1.1 !default;\n$headings-color:          inherit !default;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n\n// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.\n// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.\n$icon-font-path: if($bootstrap-sass-asset-helper, \"bootstrap/\", \"../fonts/bootstrap/\") !default;\n\n//** File name for all font files.\n$icon-font-name:          \"glyphicons-halflings-regular\" !default;\n//** Element ID within SVG icon file.\n$icon-font-svg-id:        \"glyphicons_halflingsregular\" !default;\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n$padding-base-vertical:     6px !default;\n$padding-base-horizontal:   12px !default;\n\n$padding-large-vertical:    10px !default;\n$padding-large-horizontal:  16px !default;\n\n$padding-small-vertical:    5px !default;\n$padding-small-horizontal:  10px !default;\n\n$padding-xs-vertical:       1px !default;\n$padding-xs-horizontal:     5px !default;\n\n$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome\n$line-height-small:         1.5 !default;\n\n$border-radius-base:        4px !default;\n$border-radius-large:       6px !default;\n$border-radius-small:       3px !default;\n\n//** Global color for active items (e.g., navs or dropdowns).\n$component-active-color:    #fff !default;\n//** Global background color for active items (e.g., navs or dropdowns).\n$component-active-bg:       $brand-primary !default;\n\n//** Width of the `border` for generating carets that indicate dropdowns.\n$caret-width-base:          4px !default;\n//** Carets increase slightly in size for larger components.\n$caret-width-large:         5px !default;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n$table-cell-padding:            8px !default;\n//** Padding for cells in `.table-condensed`.\n$table-condensed-cell-padding:  5px !default;\n\n//** Default background color used for all tables.\n$table-bg:                      transparent !default;\n//** Background color used for `.table-striped`.\n$table-bg-accent:               #f9f9f9 !default;\n//** Background color used for `.table-hover`.\n$table-bg-hover:                #f5f5f5 !default;\n$table-bg-active:               $table-bg-hover !default;\n\n//** Border color for table and cell borders.\n$table-border-color:            #ddd !default;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n$btn-font-weight:                normal !default;\n\n$btn-default-color:              #333 !default;\n$btn-default-bg:                 #fff !default;\n$btn-default-border:             #ccc !default;\n\n$btn-primary-color:              #fff !default;\n$btn-primary-bg:                 $brand-primary !default;\n$btn-primary-border:             darken($btn-primary-bg, 5%) !default;\n\n$btn-success-color:              #fff !default;\n$btn-success-bg:                 $brand-success !default;\n$btn-success-border:             darken($btn-success-bg, 5%) !default;\n\n$btn-info-color:                 #fff !default;\n$btn-info-bg:                    $brand-info !default;\n$btn-info-border:                darken($btn-info-bg, 5%) !default;\n\n$btn-warning-color:              #fff !default;\n$btn-warning-bg:                 $brand-warning !default;\n$btn-warning-border:             darken($btn-warning-bg, 5%) !default;\n\n$btn-danger-color:               #fff !default;\n$btn-danger-bg:                  $brand-danger !default;\n$btn-danger-border:              darken($btn-danger-bg, 5%) !default;\n\n$btn-link-disabled-color:        $gray-light !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius-base:         $border-radius-base !default;\n$btn-border-radius-large:        $border-radius-large !default;\n$btn-border-radius-small:        $border-radius-small !default;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n$input-bg:                       #fff !default;\n//** `` background color\n$input-bg-disabled:              $gray-lighter !default;\n\n//** Text color for ``s\n$input-color:                    $gray !default;\n//** `` border color\n$input-border:                   #ccc !default;\n\n// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4\n//** Default `.form-control` border radius\n// This has no effect on ``s in CSS.\n$input-border-radius:            $border-radius-base !default;\n//** Large `.form-control` border radius\n$input-border-radius-large:      $border-radius-large !default;\n//** Small `.form-control` border radius\n$input-border-radius-small:      $border-radius-small !default;\n\n//** Border color for inputs on focus\n$input-border-focus:             #66afe9 !default;\n\n//** Placeholder text color\n$input-color-placeholder:        #999 !default;\n\n//** Default `.form-control` height\n$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;\n//** Large `.form-control` height\n$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;\n//** Small `.form-control` height\n$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;\n\n//** `.form-group` margin\n$form-group-margin-bottom:       15px !default;\n\n$legend-color:                   $gray-dark !default;\n$legend-border-color:            #e5e5e5 !default;\n\n//** Background color for textual input addons\n$input-group-addon-bg:           $gray-lighter !default;\n//** Border color for textual input addons\n$input-group-addon-border-color: $input-border !default;\n\n//** Disabled cursor for form controls and buttons.\n$cursor-disabled:                not-allowed !default;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n$dropdown-bg:                    #fff !default;\n//** Dropdown menu `border-color`.\n$dropdown-border:                rgba(0,0,0,.15) !default;\n//** Dropdown menu `border-color` **for IE8**.\n$dropdown-fallback-border:       #ccc !default;\n//** Divider color for between dropdown items.\n$dropdown-divider-bg:            #e5e5e5 !default;\n\n//** Dropdown link text color.\n$dropdown-link-color:            $gray-dark !default;\n//** Hover color for dropdown links.\n$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;\n//** Hover background for dropdown links.\n$dropdown-link-hover-bg:         #f5f5f5 !default;\n\n//** Active dropdown menu item text color.\n$dropdown-link-active-color:     $component-active-color !default;\n//** Active dropdown menu item background color.\n$dropdown-link-active-bg:        $component-active-bg !default;\n\n//** Disabled dropdown menu item background color.\n$dropdown-link-disabled-color:   $gray-light !default;\n\n//** Text color for headers within dropdown menus.\n$dropdown-header-color:          $gray-light !default;\n\n//** Deprecated `$dropdown-caret-color` as of v3.1.0\n$dropdown-caret-color:           #000 !default;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n$zindex-navbar:            1000 !default;\n$zindex-dropdown:          1000 !default;\n$zindex-popover:           1060 !default;\n$zindex-tooltip:           1070 !default;\n$zindex-navbar-fixed:      1030 !default;\n$zindex-modal-background:  1040 !default;\n$zindex-modal:             1050 !default;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `$screen-xs` as of v3.0.1\n$screen-xs:                  480px !default;\n//** Deprecated `$screen-xs-min` as of v3.2.0\n$screen-xs-min:              $screen-xs !default;\n//** Deprecated `$screen-phone` as of v3.0.1\n$screen-phone:               $screen-xs-min !default;\n\n// Small screen / tablet\n//** Deprecated `$screen-sm` as of v3.0.1\n$screen-sm:                  768px !default;\n$screen-sm-min:              $screen-sm !default;\n//** Deprecated `$screen-tablet` as of v3.0.1\n$screen-tablet:              $screen-sm-min !default;\n\n// Medium screen / desktop\n//** Deprecated `$screen-md` as of v3.0.1\n$screen-md:                  992px !default;\n$screen-md-min:              $screen-md !default;\n//** Deprecated `$screen-desktop` as of v3.0.1\n$screen-desktop:             $screen-md-min !default;\n\n// Large screen / wide desktop\n//** Deprecated `$screen-lg` as of v3.0.1\n$screen-lg:                  1200px !default;\n$screen-lg-min:              $screen-lg !default;\n//** Deprecated `$screen-lg-desktop` as of v3.0.1\n$screen-lg-desktop:          $screen-lg-min !default;\n\n// So media queries don't overlap when required, provide a maximum\n$screen-xs-max:              ($screen-sm-min - 1) !default;\n$screen-sm-max:              ($screen-md-min - 1) !default;\n$screen-md-max:              ($screen-lg-min - 1) !default;\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n$grid-columns:              12 !default;\n//** Padding between columns. Gets divided in half for the left and right.\n$grid-gutter-width:         30px !default;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n$grid-float-breakpoint:     $screen-sm-min !default;\n//** Point at which the navbar begins collapsing.\n$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n$container-tablet:             (720px + $grid-gutter-width) !default;\n//** For `$screen-sm-min` and up.\n$container-sm:                 $container-tablet !default;\n\n// Medium screen / desktop\n$container-desktop:            (940px + $grid-gutter-width) !default;\n//** For `$screen-md-min` and up.\n$container-md:                 $container-desktop !default;\n\n// Large screen / wide desktop\n$container-large-desktop:      (1140px + $grid-gutter-width) !default;\n//** For `$screen-lg-min` and up.\n$container-lg:                 $container-large-desktop !default;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n$navbar-height:                    50px !default;\n$navbar-margin-bottom:             $line-height-computed !default;\n$navbar-border-radius:             $border-radius-base !default;\n$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;\n$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;\n$navbar-collapse-max-height:       340px !default;\n\n$navbar-default-color:             #777 !default;\n$navbar-default-bg:                #f8f8f8 !default;\n$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;\n\n// Navbar links\n$navbar-default-link-color:                #777 !default;\n$navbar-default-link-hover-color:          #333 !default;\n$navbar-default-link-hover-bg:             transparent !default;\n$navbar-default-link-active-color:         #555 !default;\n$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;\n$navbar-default-link-disabled-color:       #ccc !default;\n$navbar-default-link-disabled-bg:          transparent !default;\n\n// Navbar brand label\n$navbar-default-brand-color:               $navbar-default-link-color !default;\n$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;\n$navbar-default-brand-hover-bg:            transparent !default;\n\n// Navbar toggle\n$navbar-default-toggle-hover-bg:           #ddd !default;\n$navbar-default-toggle-icon-bar-bg:        #888 !default;\n$navbar-default-toggle-border-color:       #ddd !default;\n\n\n//=== Inverted navbar\n// Reset inverted navbar basics\n$navbar-inverse-color:                      lighten($gray-light, 15%) !default;\n$navbar-inverse-bg:                         #222 !default;\n$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;\n\n// Inverted navbar links\n$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;\n$navbar-inverse-link-hover-color:           #fff !default;\n$navbar-inverse-link-hover-bg:              transparent !default;\n$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;\n$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;\n$navbar-inverse-link-disabled-color:        #444 !default;\n$navbar-inverse-link-disabled-bg:           transparent !default;\n\n// Inverted navbar brand label\n$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;\n$navbar-inverse-brand-hover-color:          #fff !default;\n$navbar-inverse-brand-hover-bg:             transparent !default;\n\n// Inverted navbar toggle\n$navbar-inverse-toggle-hover-bg:            #333 !default;\n$navbar-inverse-toggle-icon-bar-bg:         #fff !default;\n$navbar-inverse-toggle-border-color:        #333 !default;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n$nav-link-padding:                          10px 15px !default;\n$nav-link-hover-bg:                         $gray-lighter !default;\n\n$nav-disabled-link-color:                   $gray-light !default;\n$nav-disabled-link-hover-color:             $gray-light !default;\n\n//== Tabs\n$nav-tabs-border-color:                     #ddd !default;\n\n$nav-tabs-link-hover-border-color:          $gray-lighter !default;\n\n$nav-tabs-active-link-hover-bg:             $body-bg !default;\n$nav-tabs-active-link-hover-color:          $gray !default;\n$nav-tabs-active-link-hover-border-color:   #ddd !default;\n\n$nav-tabs-justified-link-border-color:            #ddd !default;\n$nav-tabs-justified-active-link-border-color:     $body-bg !default;\n\n//== Pills\n$nav-pills-border-radius:                   $border-radius-base !default;\n$nav-pills-active-link-hover-bg:            $component-active-bg !default;\n$nav-pills-active-link-hover-color:         $component-active-color !default;\n\n\n//== Pagination\n//\n//##\n\n$pagination-color:                     $link-color !default;\n$pagination-bg:                        #fff !default;\n$pagination-border:                    #ddd !default;\n\n$pagination-hover-color:               $link-hover-color !default;\n$pagination-hover-bg:                  $gray-lighter !default;\n$pagination-hover-border:              #ddd !default;\n\n$pagination-active-color:              #fff !default;\n$pagination-active-bg:                 $brand-primary !default;\n$pagination-active-border:             $brand-primary !default;\n\n$pagination-disabled-color:            $gray-light !default;\n$pagination-disabled-bg:               #fff !default;\n$pagination-disabled-border:           #ddd !default;\n\n\n//== Pager\n//\n//##\n\n$pager-bg:                             $pagination-bg !default;\n$pager-border:                         $pagination-border !default;\n$pager-border-radius:                  15px !default;\n\n$pager-hover-bg:                       $pagination-hover-bg !default;\n\n$pager-active-bg:                      $pagination-active-bg !default;\n$pager-active-color:                   $pagination-active-color !default;\n\n$pager-disabled-color:                 $pagination-disabled-color !default;\n\n\n//== Jumbotron\n//\n//##\n\n$jumbotron-padding:              30px !default;\n$jumbotron-color:                inherit !default;\n$jumbotron-bg:                   $gray-lighter !default;\n$jumbotron-heading-color:        inherit !default;\n$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;\n$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n$state-success-text:             #3c763d !default;\n$state-success-bg:               #dff0d8 !default;\n$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;\n\n$state-info-text:                #31708f !default;\n$state-info-bg:                  #d9edf7 !default;\n$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;\n\n$state-warning-text:             #8a6d3b !default;\n$state-warning-bg:               #fcf8e3 !default;\n$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;\n\n$state-danger-text:              #a94442 !default;\n$state-danger-bg:                #f2dede !default;\n$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n$tooltip-max-width:           200px !default;\n//** Tooltip text color\n$tooltip-color:               #fff !default;\n//** Tooltip background color\n$tooltip-bg:                  #000 !default;\n$tooltip-opacity:             .9 !default;\n\n//** Tooltip arrow width\n$tooltip-arrow-width:         5px !default;\n//** Tooltip arrow color\n$tooltip-arrow-color:         $tooltip-bg !default;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n$popover-bg:                          #fff !default;\n//** Popover maximum width\n$popover-max-width:                   276px !default;\n//** Popover border color\n$popover-border-color:                rgba(0,0,0,.2) !default;\n//** Popover fallback border color\n$popover-fallback-border-color:       #ccc !default;\n\n//** Popover title background color\n$popover-title-bg:                    darken($popover-bg, 3%) !default;\n\n//** Popover arrow width\n$popover-arrow-width:                 10px !default;\n//** Popover arrow color\n$popover-arrow-color:                 $popover-bg !default;\n\n//** Popover outer arrow width\n$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;\n//** Popover outer arrow color\n$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;\n//** Popover outer arrow fallback color\n$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n$label-default-bg:            $gray-light !default;\n//** Primary label background color\n$label-primary-bg:            $brand-primary !default;\n//** Success label background color\n$label-success-bg:            $brand-success !default;\n//** Info label background color\n$label-info-bg:               $brand-info !default;\n//** Warning label background color\n$label-warning-bg:            $brand-warning !default;\n//** Danger label background color\n$label-danger-bg:             $brand-danger !default;\n\n//** Default label text color\n$label-color:                 #fff !default;\n//** Default text color of a linked label\n$label-link-hover-color:      #fff !default;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n$modal-inner-padding:         15px !default;\n\n//** Padding applied to the modal title\n$modal-title-padding:         15px !default;\n//** Modal title line-height\n$modal-title-line-height:     $line-height-base !default;\n\n//** Background color of modal content area\n$modal-content-bg:                             #fff !default;\n//** Modal content border color\n$modal-content-border-color:                   rgba(0,0,0,.2) !default;\n//** Modal content border color **for IE8**\n$modal-content-fallback-border-color:          #999 !default;\n\n//** Modal backdrop background color\n$modal-backdrop-bg:           #000 !default;\n//** Modal backdrop opacity\n$modal-backdrop-opacity:      .5 !default;\n//** Modal header border color\n$modal-header-border-color:   #e5e5e5 !default;\n//** Modal footer border color\n$modal-footer-border-color:   $modal-header-border-color !default;\n\n$modal-lg:                    900px !default;\n$modal-md:                    600px !default;\n$modal-sm:                    300px !default;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n$alert-padding:               15px !default;\n$alert-border-radius:         $border-radius-base !default;\n$alert-link-font-weight:      bold !default;\n\n$alert-success-bg:            $state-success-bg !default;\n$alert-success-text:          $state-success-text !default;\n$alert-success-border:        $state-success-border !default;\n\n$alert-info-bg:               $state-info-bg !default;\n$alert-info-text:             $state-info-text !default;\n$alert-info-border:           $state-info-border !default;\n\n$alert-warning-bg:            $state-warning-bg !default;\n$alert-warning-text:          $state-warning-text !default;\n$alert-warning-border:        $state-warning-border !default;\n\n$alert-danger-bg:             $state-danger-bg !default;\n$alert-danger-text:           $state-danger-text !default;\n$alert-danger-border:         $state-danger-border !default;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n$progress-bg:                 #f5f5f5 !default;\n//** Progress bar text color\n$progress-bar-color:          #fff !default;\n//** Variable for setting rounded corners on progress bar.\n$progress-border-radius:      $border-radius-base !default;\n\n//** Default progress bar color\n$progress-bar-bg:             $brand-primary !default;\n//** Success progress bar color\n$progress-bar-success-bg:     $brand-success !default;\n//** Warning progress bar color\n$progress-bar-warning-bg:     $brand-warning !default;\n//** Danger progress bar color\n$progress-bar-danger-bg:      $brand-danger !default;\n//** Info progress bar color\n$progress-bar-info-bg:        $brand-info !default;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n$list-group-bg:                 #fff !default;\n//** `.list-group-item` border color\n$list-group-border:             #ddd !default;\n//** List group border radius\n$list-group-border-radius:      $border-radius-base !default;\n\n//** Background color of single list items on hover\n$list-group-hover-bg:           #f5f5f5 !default;\n//** Text color of active list items\n$list-group-active-color:       $component-active-color !default;\n//** Background color of active list items\n$list-group-active-bg:          $component-active-bg !default;\n//** Border color of active list elements\n$list-group-active-border:      $list-group-active-bg !default;\n//** Text color for content within active list items\n$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;\n\n//** Text color of disabled list items\n$list-group-disabled-color:      $gray-light !default;\n//** Background color of disabled list items\n$list-group-disabled-bg:         $gray-lighter !default;\n//** Text color for content within disabled list items\n$list-group-disabled-text-color: $list-group-disabled-color !default;\n\n$list-group-link-color:         #555 !default;\n$list-group-link-hover-color:   $list-group-link-color !default;\n$list-group-link-heading-color: #333 !default;\n\n\n//== Panels\n//\n//##\n\n$panel-bg:                    #fff !default;\n$panel-body-padding:          15px !default;\n$panel-heading-padding:       10px 15px !default;\n$panel-footer-padding:        $panel-heading-padding !default;\n$panel-border-radius:         $border-radius-base !default;\n\n//** Border color for elements within panels\n$panel-inner-border:          #ddd !default;\n$panel-footer-bg:             #f5f5f5 !default;\n\n$panel-default-text:          $gray-dark !default;\n$panel-default-border:        #ddd !default;\n$panel-default-heading-bg:    #f5f5f5 !default;\n\n$panel-primary-text:          #fff !default;\n$panel-primary-border:        $brand-primary !default;\n$panel-primary-heading-bg:    $brand-primary !default;\n\n$panel-success-text:          $state-success-text !default;\n$panel-success-border:        $state-success-border !default;\n$panel-success-heading-bg:    $state-success-bg !default;\n\n$panel-info-text:             $state-info-text !default;\n$panel-info-border:           $state-info-border !default;\n$panel-info-heading-bg:       $state-info-bg !default;\n\n$panel-warning-text:          $state-warning-text !default;\n$panel-warning-border:        $state-warning-border !default;\n$panel-warning-heading-bg:    $state-warning-bg !default;\n\n$panel-danger-text:           $state-danger-text !default;\n$panel-danger-border:         $state-danger-border !default;\n$panel-danger-heading-bg:     $state-danger-bg !default;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n$thumbnail-padding:           4px !default;\n//** Thumbnail background color\n$thumbnail-bg:                $body-bg !default;\n//** Thumbnail border color\n$thumbnail-border:            #ddd !default;\n//** Thumbnail border radius\n$thumbnail-border-radius:     $border-radius-base !default;\n\n//** Custom text color for thumbnail captions\n$thumbnail-caption-color:     $text-color !default;\n//** Padding around the thumbnail caption\n$thumbnail-caption-padding:   9px !default;\n\n\n//== Wells\n//\n//##\n\n$well-bg:                     #f5f5f5 !default;\n$well-border:                 darken($well-bg, 7%) !default;\n\n\n//== Badges\n//\n//##\n\n$badge-color:                 #fff !default;\n//** Linked badge text color on hover\n$badge-link-hover-color:      #fff !default;\n$badge-bg:                    $gray-light !default;\n\n//** Badge text color in active nav link\n$badge-active-color:          $link-color !default;\n//** Badge background color in active nav link\n$badge-active-bg:             #fff !default;\n\n$badge-font-weight:           bold !default;\n$badge-line-height:           1 !default;\n$badge-border-radius:         10px !default;\n\n\n//== Breadcrumbs\n//\n//##\n\n$breadcrumb-padding-vertical:   8px !default;\n$breadcrumb-padding-horizontal: 15px !default;\n//** Breadcrumb background color\n$breadcrumb-bg:                 #f5f5f5 !default;\n//** Breadcrumb text color\n$breadcrumb-color:              #ccc !default;\n//** Text color of current page in the breadcrumb\n$breadcrumb-active-color:       $gray-light !default;\n//** Textual separator for between breadcrumb elements\n$breadcrumb-separator:          \"/\" !default;\n\n\n//== Carousel\n//\n//##\n\n$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;\n\n$carousel-control-color:                      #fff !default;\n$carousel-control-width:                      15% !default;\n$carousel-control-opacity:                    .5 !default;\n$carousel-control-font-size:                  20px !default;\n\n$carousel-indicator-active-bg:                #fff !default;\n$carousel-indicator-border-color:             #fff !default;\n\n$carousel-caption-color:                      #fff !default;\n\n\n//== Close\n//\n//##\n\n$close-font-weight:           bold !default;\n$close-color:                 #000 !default;\n$close-text-shadow:           0 1px 0 #fff !default;\n\n\n//== Code\n//\n//##\n\n$code-color:                  #c7254e !default;\n$code-bg:                     #f9f2f4 !default;\n\n$kbd-color:                   #fff !default;\n$kbd-bg:                      #333 !default;\n\n$pre-bg:                      #f5f5f5 !default;\n$pre-color:                   $gray-dark !default;\n$pre-border-color:            #ccc !default;\n$pre-scrollable-max-height:   340px !default;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n$component-offset-horizontal: 180px !default;\n//** Text muted color\n$text-muted:                  $gray-light !default;\n//** Abbreviations and acronyms border color\n$abbr-border-color:           $gray-light !default;\n//** Headings small color\n$headings-small-color:        $gray-light !default;\n//** Blockquote small color\n$blockquote-small-color:      $gray-light !default;\n//** Blockquote font size\n$blockquote-font-size:        ($font-size-base * 1.25) !default;\n//** Blockquote border color\n$blockquote-border-color:     $gray-lighter !default;\n//** Page header border color\n$page-header-border-color:    $gray-lighter !default;\n//** Width of horizontal description list titles\n$dl-horizontal-offset:        $component-offset-horizontal !default;\n//** Point at which .dl-horizontal becomes horizontal\n$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;\n//** Horizontal line color.\n$hr-border:                   $gray-lighter !default;\n","// Brand colours.\n$brand-primary:             darken(#78909c, 6.5%) !default;\n$brand-success:             $cachet-primary !default;\n$brand-info:                $cachet-blue !default;\n$brand-warning:             $cachet-orange !default;\n$brand-danger:              $cachet-red !default;\n\n// Default border radius\n$border-radius-base:        3px !default;\n$border-radius-large:       4px !default;\n$border-radius-small:       2px !default;\n\n//** Tooltip background color\n$tooltip-bg:                #333 !default;\n$tooltip-opacity:           .9 !default;\n$base-background-color:     #f1f1f1;\n\n$base-font-family:          -apple-system, BlinkMacSystemFont, \"Open Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n$base-font-weight:          400;\n$base-letter-spacing:       0.08em;\n$base-font-size:            15px;\n$base-line-height:          1.42857143;\n\n$base-link-color:           #ffffff;\n$base-link-hover-color:     #e9e9e9;\n\n$header-background-color:   lighten(#00695C, 10%);\n$header-border-color:       1px solid darken($header-background-color, 10%);\n\n$sidebar-transition-speed:  .2s;\n$sidebar-background-color:  #78909c;\n$sidebar-border-color:      1px solid #6c818c;\n$sidebar-border-shadow:     inset 0px -2px 3px rgba(0,0,0,0.25);\n$sidebar-text-size:         0.9em;\n$sidebar-text-color:        #ffffff;\n$sidebar-text-active-color: #ffffff;\n$sidebar-normal-width:      230px;\n$sidebar-phone-width:       75%;\n$sidebar-active-color:      #00695C;\n","// WebKit-style focus\n\n@mixin tab-focus() {\n  // WebKit-specific. Other browsers will keep their default outline style.\n  // (Initially tried to also force default via `outline: initial`,\n  // but that seems to erroneously remove the outline in Firefox altogether.)\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n@mixin img-responsive($display: block) {\n  display: $display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n  background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-1x}\"), \"#{$file-1x}\"));\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-2x}\"), \"#{$file-2x}\"));\n    background-size: $width-1x $height-1x;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: $headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: $headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: $line-height-computed;\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: ($line-height-computed / 2);\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: $font-size-h1; }\nh2, .h2 { font-size: $font-size-h2; }\nh3, .h3 { font-size: $font-size-h3; }\nh4, .h4 { font-size: $font-size-h4; }\nh5, .h5 { font-size: $font-size-h5; }\nh6, .h6 { font-size: $font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 ($line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: $line-height-computed;\n  font-size: floor(($font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: ($font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * $font-size-small / $font-size-base));\n}\n\nmark,\n.mark {\n  background-color: $state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: $text-muted;\n}\n\n@include text-emphasis-variant('.text-primary', $brand-primary);\n\n@include text-emphasis-variant('.text-success', $state-success-text);\n\n@include text-emphasis-variant('.text-info', $state-info-text);\n\n@include text-emphasis-variant('.text-warning', $state-warning-text);\n\n@include text-emphasis-variant('.text-danger', $state-danger-text);\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n}\n@include bg-variant('.bg-primary', $brand-primary);\n\n@include bg-variant('.bg-success', $state-success-bg);\n\n@include bg-variant('.bg-info', $state-info-bg);\n\n@include bg-variant('.bg-warning', $state-warning-bg);\n\n@include bg-variant('.bg-danger', $state-danger-bg);\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: (($line-height-computed / 2) - 1);\n  margin: ($line-height-computed * 2) 0 $line-height-computed;\n  border-bottom: 1px solid $page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: ($line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// [converter] extracted from `.list-unstyled` for libsass compatibility\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n// [converter] extracted as `@mixin list-unstyled` for libsass compatibility\n.list-unstyled {\n  @include list-unstyled;\n}\n\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled;\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: $line-height-computed;\n}\ndt,\ndd {\n  line-height: $line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    @include clearfix; // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: $dl-horizontal-breakpoint) {\n    dt {\n      float: left;\n      width: ($dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      @include text-overflow;\n    }\n    dd {\n      margin-left: $dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted $abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  @extend .text-uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: ($line-height-computed / 2) $line-height-computed;\n  margin: 0 0 $line-height-computed;\n  font-size: $blockquote-font-size;\n  border-left: 5px solid $blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: $line-height-base;\n    color: $blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid $blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Addresses\naddress {\n  margin-bottom: $line-height-computed;\n  font-style: normal;\n  line-height: $line-height-base;\n}\n","// Typography\n\n// [converter] $parent hack\n@mixin text-emphasis-variant($parent, $color) {\n  #{$parent} {\n    color: $color;\n  }\n  a#{$parent}:hover,\n  a#{$parent}:focus {\n    color: darken($color, 10%);\n  }\n}\n","// Contextual backgrounds\n\n// [converter] $parent hack\n@mixin bg-variant($parent, $color) {\n  #{$parent} {\n    background-color: $color;\n  }\n  a#{$parent}:hover,\n  a#{$parent}:focus {\n    background-color: darken($color, 10%);\n  }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n@mixin text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $code-color;\n  background-color: $code-bg;\n  border-radius: $border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  border-radius: $border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: bold;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: (($line-height-computed - 1) / 2);\n  margin: 0 0 ($line-height-computed / 2);\n  font-size: ($font-size-base - 1); // 14px to 13px\n  line-height: $line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: $pre-color;\n  background-color: $pre-bg;\n  border: 1px solid $pre-border-color;\n  border-radius: $border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: $pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  @include container-fixed;\n\n  @media (min-width: $screen-sm-min) {\n    width: $container-sm;\n  }\n  @media (min-width: $screen-md-min) {\n    width: $container-md;\n  }\n  @media (min-width: $screen-lg-min) {\n    width: $container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  @include container-fixed;\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  @include make-row;\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@include make-grid-columns;\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n@include make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: $screen-sm-min) {\n  @include make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: $screen-md-min) {\n  @include make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: $screen-lg-min) {\n  @include make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n@mixin container-fixed($gutter: $grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  floor(($gutter / 2));\n  padding-right: ceil(($gutter / 2));\n  @include clearfix;\n}\n\n// Creates a wrapper for a series of columns\n@mixin make-row($gutter: $grid-gutter-width) {\n  margin-left:  ceil(($gutter / -2));\n  margin-right: floor(($gutter / -2));\n  @include clearfix;\n}\n\n// Generate the extra small columns\n@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage(($columns / $grid-columns));\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n}\n@mixin make-xs-column-offset($columns) {\n  margin-left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-push($columns) {\n  left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-pull($columns) {\n  right: percentage(($columns / $grid-columns));\n}\n\n// Generate the small columns\n@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-sm-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-offset($columns) {\n  @media (min-width: $screen-sm-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-push($columns) {\n  @media (min-width: $screen-sm-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-pull($columns) {\n  @media (min-width: $screen-sm-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the medium columns\n@mixin make-md-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-md-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-offset($columns) {\n  @media (min-width: $screen-md-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-push($columns) {\n  @media (min-width: $screen-md-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-pull($columns) {\n  @media (min-width: $screen-md-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large columns\n@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-lg-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-offset($columns) {\n  @media (min-width: $screen-lg-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-push($columns) {\n  @media (min-width: $screen-lg-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-pull($columns) {\n  @media (min-width: $screen-lg-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin make-grid-columns($i: 1, $list: \".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \"#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\";\n  }\n  #{$list} {\n    position: relative;\n    // Prevent columns from collapsing when empty\n    min-height: 1px;\n    // Inner gutter via padding\n    padding-left:  ceil(($grid-gutter-width / 2));\n    padding-right: floor(($grid-gutter-width / 2));\n  }\n}\n\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin float-grid-columns($class, $i: 1, $list: \".col-#{$class}-#{$i}\") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \"#{$list}, .col-#{$class}-#{$i}\";\n  }\n  #{$list} {\n    float: left;\n  }\n}\n\n\n@mixin calc-grid-column($index, $class, $type) {\n  @if ($type == width) and ($index > 0) {\n    .col-#{$class}-#{$index} {\n      width: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index > 0) {\n    .col-#{$class}-push-#{$index} {\n      left: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index == 0) {\n    .col-#{$class}-push-0 {\n      left: auto;\n    }\n  }\n  @if ($type == pull) and ($index > 0) {\n    .col-#{$class}-pull-#{$index} {\n      right: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == pull) and ($index == 0) {\n    .col-#{$class}-pull-0 {\n      right: auto;\n    }\n  }\n  @if ($type == offset) {\n    .col-#{$class}-offset-#{$index} {\n      margin-left: percentage(($index / $grid-columns));\n    }\n  }\n}\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin loop-grid-columns($columns, $class, $type) {\n  @for $i from 0 through $columns {\n    @include calc-grid-column($i, $class, $type);\n  }\n}\n\n\n// Create grid for specific class\n@mixin make-grid($class) {\n  @include float-grid-columns($class);\n  @include loop-grid-columns($grid-columns, $class, width);\n  @include loop-grid-columns($grid-columns, $class, pull);\n  @include loop-grid-columns($grid-columns, $class, push);\n  @include loop-grid-columns($grid-columns, $class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: $table-bg;\n}\ncaption {\n  padding-top: $table-cell-padding;\n  padding-bottom: $table-cell-padding;\n  color: $text-muted;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: $line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-cell-padding;\n        line-height: $line-height-base;\n        vertical-align: top;\n        border-top: 1px solid $table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid $table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid $table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: $body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid $table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid $table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-of-type(odd) {\n    background-color: $table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    background-color: $table-bg-hover;\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n@include table-row-variant('active', $table-bg-active);\n@include table-row-variant('success', $state-success-bg);\n@include table-row-variant('info', $state-info-bg);\n@include table-row-variant('warning', $state-warning-bg);\n@include table-row-variant('danger', $state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n  @media screen and (max-width: $screen-xs-max) {\n    width: 100%;\n    margin-bottom: ($line-height-computed * 0.75);\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid $table-border-color;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.#{$state},\n    > th.#{$state},\n    &.#{$state} > td,\n    &.#{$state} > th {\n      background-color: $background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.#{$state}:hover,\n    > th.#{$state}:hover,\n    &.#{$state}:hover > td,\n    &:hover > .#{$state},\n    &.#{$state}:hover > th {\n      background-color: darken($background, 5%);\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: $line-height-computed;\n  font-size: ($font-size-base * 1.5);\n  line-height: inherit;\n  color: $legend-color;\n  border: 0;\n  border-bottom: 1px solid $legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  @include box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  @include tab-focus;\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: ($padding-base-vertical + 1);\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n  background-color: $input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid $input-border;\n  border-radius: $input-border-radius; // Note: This has no effect on s in CSS.\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  @include form-control-focus;\n\n  // Placeholder\n  @include placeholder;\n\n  // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n// [converter] $parent hack\n@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  #{$parent} {\n    height: $input-height;\n    padding: $padding-vertical $padding-horizontal;\n    font-size: $font-size;\n    line-height: $line-height;\n    border-radius: $border-radius;\n  }\n\n  select#{$parent} {\n    height: $input-height;\n    line-height: $input-height;\n  }\n\n  textarea#{$parent},\n  select[multiple]#{$parent} {\n    height: auto;\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: $btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);\n  @include user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      @include tab-focus;\n    }\n  }\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: $btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n    @include opacity(.65);\n    @include box-shadow(none);\n  }\n\n  // [converter] extracted a& to a.btn\n}\n\na.btn {\n  &.disabled,\n  fieldset[disabled] & {\n    pointer-events: none; // Future-proof disabling of clicks on `` elements\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);\n}\n.btn-primary {\n  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: $link-color;\n  font-weight: normal;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    @include box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: $btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n.btn-xs {\n  @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($color, $background, $border) {\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n\n  &:focus,\n  &.focus {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 25%);\n  }\n  &:hover {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: $color;\n      background-color: darken($background, 17%);\n          border-color: darken($border, 25%);\n    }\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus,\n    &.focus {\n      background-color: $background;\n          border-color: $border;\n    }\n  }\n\n  .badge {\n    color: $background;\n    background-color: $color;\n  }\n}\n\n// Button sizes\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius;\n}\n","// Opacity\n\n@mixin opacity($opacity) {\n  opacity: $opacity;\n  // IE8 filter\n  $opacity-ie: ($opacity * 100);\n  filter: alpha(opacity=$opacity-ie);\n}\n","// Theme colours.\n$cachet-base-light: #fff;\n$cachet-base-medium: #f0f3f4;\n$cachet-base-dark: #333;\n\n$cachet-primary: #7ED321;\n$cachet-secondary: #6DB81C;\n\n$cachet-link: #7ed321;\n$cachet-link-hover: #01579b;\n\n$cachet-gray-light: #e8e8e8;\n$cachet-gray: #999;\n$cachet-gray-darker: #666;\n\n$cachet-icons: #5e5e5e;\n\n// Statuses\n$cachet-green: $cachet-primary;\n$cachet-dark-green: darken($cachet-green, 10%);\n\n$cachet-blue: #3498db;\n$cachet-dark-blue: darken($cachet-blue, 10%);\n\n$cachet-red: #ff6f6f;\n$cachet-dark-red: darken($cachet-red, 10%);\n\n$cachet-teal: #0dccc0;\n$cachet-dark-teal: darken($cachet-teal, 10%);\n\n$cachet-yellow: #F7CA18;\n$cachet-dark-yellow: darken($cachet-yellow, 10%);\n\n$cachet-pink: #b23f73;\n$cachet-dark-pink: darken($cachet-pink, 10%);\n\n$cachet-grey: #ecf0f1;\n$cachet-dark-grey: darken($cachet-grey, 10%);\n\n$cachet-orange: #FF8800;\n$dark-orange: darken($cachet-orange, 10%);\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  @include transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  // [converter] extracted tr&.in to tr.collapse.in\n  // [converter] extracted tbody&.in to tbody.collapse.in\n}\n\ntr.collapse.in    { display: table-row; }\n\ntbody.collapse.in { display: table-row-group; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  @include transition-property(height, visibility);\n  @include transition-duration(.35s);\n  @include transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   $caret-width-base dashed;\n  border-top:   $caret-width-base solid \\9; // IE8\n  border-right: $caret-width-base solid transparent;\n  border-left:  $caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: $zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: $font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: $dropdown-bg;\n  border: 1px solid $dropdown-fallback-border; // IE8 fallback\n  border: 1px solid $dropdown-border;\n  border-radius: $border-radius-base;\n  @include box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    @include nav-divider($dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: $line-height-base;\n    color: $dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: $dropdown-link-hover-color;\n    background-color: $dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: $dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-disabled-color;\n  }\n\n  // Nuke hover/focus effects\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    @include reset-filter;\n    cursor: $cursor-disabled;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: $font-size-small;\n  line-height: $line-height-base;\n  color: $dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: ($zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: $caret-width-base dashed;\n    border-bottom: $caret-width-base solid \\9; // IE8\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      right: 0; left: auto;\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      left: 0; right: auto;\n    }\n  }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5e5) {\n  height: 1px;\n  margin: (($line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: $color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n@mixin reset-filter() {\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  @include clearfix;\n\n  .btn,\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    @include border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { @extend .btn-xs; }\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: $caret-width-large $caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 $caret-width-large $caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    @include clearfix;\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    @include border-top-radius($btn-border-radius-base);\n    @include border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    @include border-top-radius(0);\n    @include border-bottom-radius($btn-border-radius-base);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\"radio\"],\n    input[type=\"checkbox\"] {\n      position: absolute;\n      clip: rect(0,0,0,0);\n      pointer-events: none;\n    }\n  }\n}\n","// Single side border-radius\n\n@mixin border-top-radius($radius) {\n  border-top-right-radius: $radius;\n   border-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius) {\n  border-bottom-right-radius: $radius;\n     border-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius) {\n  border-bottom-right-radius: $radius;\n   border-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius) {\n  border-bottom-left-radius: $radius;\n     border-top-left-radius: $radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n\n    &:focus {\n      z-index: 3;\n    }\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  @extend .input-lg;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  @extend .input-sm;\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: $input-color;\n  text-align: center;\n  background-color: $input-group-addon-bg;\n  border: 1px solid $input-group-addon-border-color;\n  border-radius: $input-border-radius;\n\n  // Sizing\n  &.input-sm {\n    padding: $padding-small-vertical $padding-small-horizontal;\n    font-size: $font-size-small;\n    border-radius: $input-border-radius-small;\n  }\n  &.input-lg {\n    padding: $padding-large-vertical $padding-large-horizontal;\n    font-size: $font-size-large;\n    border-radius: $input-border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  @include border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  @include border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      z-index: 2;\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  @include clearfix;\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: $nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: $nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: $nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: $nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: $cursor-disabled;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: $nav-link-hover-bg;\n      border-color: $link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    @include nav-divider;\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid $nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: $line-height-base;\n      border: 1px solid transparent;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n      &:hover {\n        border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-tabs-active-link-hover-color;\n        background-color: $nav-tabs-active-link-hover-bg;\n        border: 1px solid $nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    @extend .nav-justified;\n    @extend .nav-tabs-justified;\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: $nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-pills-active-link-hover-color;\n        background-color: $nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: $border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid $nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid $nav-tabs-justified-link-border-color;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: $nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  @include border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: $navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: $navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: $navbar-padding-horizontal;\n  padding-left:  $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  @include clearfix;\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: $navbar-collapse-max-height;\n\n    @media (max-device-width: $screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -$navbar-padding-horizontal;\n    margin-left:  -$navbar-padding-horizontal;\n\n    @media (min-width: $grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: $zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: $zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: $navbar-padding-vertical $navbar-padding-horizontal;\n  font-size: $font-size-large;\n  line-height: $line-height-computed;\n  height: $navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  > img {\n    display: block;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -$navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: $navbar-padding-horizontal;\n  padding: 9px 10px;\n  @include navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: $border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: $line-height-computed;\n  }\n\n  @media (max-width: $grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: $line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    $navbar-padding-vertical;\n        padding-bottom: $navbar-padding-vertical;\n      }\n    }\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -$navbar-padding-horizontal;\n  margin-right: -$navbar-padding-horizontal;\n  padding: 10px $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  @include box-shadow($shadow);\n\n  // Mixin behavior for optimum display\n  @include form-inline;\n\n  .form-group {\n    @media (max-width: $grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  @include navbar-vertical-align($input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    @include box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  @include border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  @include border-top-radius($navbar-border-radius);\n  @include border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  @include navbar-vertical-align($input-height-base);\n\n  &.btn-sm {\n    @include navbar-vertical-align($input-height-small);\n  }\n  &.btn-xs {\n    @include navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  @include navbar-vertical-align($line-height-computed);\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin-left: $navbar-padding-horizontal;\n    margin-right: $navbar-padding-horizontal;\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  margin-right: -$navbar-padding-horizontal;\n\n    ~ .navbar-right {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;\n\n  .navbar-brand {\n    color: $navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-brand-hover-color;\n      background-color: $navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-hover-color;\n        background-color: $navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-active-color;\n        background-color: $navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n        background-color: $navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: $navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: $navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-default-link-active-bg;\n        color: $navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: $navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-hover-color;\n            background-color: $navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-active-color;\n            background-color: $navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-disabled-color;\n            background-color: $navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: $navbar-default-link-color;\n    &:hover {\n      color: $navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: $navbar-inverse-bg;\n  border-color: $navbar-inverse-border;\n\n  .navbar-brand {\n    color: $navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-brand-hover-color;\n      background-color: $navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-hover-color;\n        background-color: $navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-active-color;\n        background-color: $navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n        background-color: $navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: $navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken($navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-inverse-link-active-bg;\n        color: $navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: $navbar-inverse-border;\n        }\n        .divider {\n          background-color: $navbar-inverse-border;\n        }\n        > li > a {\n          color: $navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-hover-color;\n            background-color: $navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-active-color;\n            background-color: $navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-disabled-color;\n            background-color: $navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: $navbar-inverse-link-color;\n    &:hover {\n      color: $navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n@mixin navbar-vertical-align($element-height) {\n  margin-top: (($navbar-height - $element-height) / 2);\n  margin-bottom: (($navbar-height - $element-height) / 2);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;\n  margin-bottom: $line-height-computed;\n  list-style: none;\n  background-color: $breadcrumb-bg;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      // [converter] Workaround for https://github.com/sass/libsass/issues/1115\n      $nbsp: \"\\00a0\";\n      content: \"#{$breadcrumb-separator}#{$nbsp}\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: $breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: $breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: $padding-base-vertical $padding-base-horizontal;\n      line-height: $line-height-base;\n      text-decoration: none;\n      color: $pagination-color;\n      background-color: $pagination-bg;\n      border: 1px solid $pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        @include border-left-radius($border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: $pagination-hover-color;\n      background-color: $pagination-hover-bg;\n      border-color: $pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 3;\n      color: $pagination-active-color;\n      background-color: $pagination-active-bg;\n      border-color: $pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: $pagination-disabled-color;\n      background-color: $pagination-disabled-bg;\n      border-color: $pagination-disabled-border;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n","// Pagination\n\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: $padding-vertical $padding-horizontal;\n      font-size: $font-size;\n      line-height: $line-height;\n    }\n    &:first-child {\n      > a,\n      > span {\n        @include border-left-radius($border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius);\n      }\n    }\n  }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  @include clearfix;\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: $pager-bg;\n      border: 1px solid $pager-border;\n      border-radius: $pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: $pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: $pager-disabled-color;\n      background-color: $pager-bg;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: $label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // [converter] extracted a& to a.label\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Add hover effects, but only for links\na.label {\n  &:hover,\n  &:focus {\n    color: $label-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  @include label-variant($label-default-bg);\n}\n\n.label-primary {\n  @include label-variant($label-primary-bg);\n}\n\n.label-success {\n  @include label-variant($label-success-bg);\n}\n\n.label-info {\n  @include label-variant($label-info-bg);\n}\n\n.label-warning {\n  @include label-variant($label-warning-bg);\n}\n\n.label-danger {\n  @include label-variant($label-danger-bg);\n}\n","// Labels\n\n@mixin label-variant($color) {\n  background-color: $color;\n\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken($color, 10%);\n    }\n  }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: $font-size-small;\n  font-weight: $badge-font-weight;\n  color: $badge-color;\n  line-height: $badge-line-height;\n  vertical-align: middle;\n  white-space: nowrap;\n  text-align: center;\n  background-color: $badge-bg;\n  border-radius: $badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n\n  .btn-xs &,\n  .btn-group-xs > .btn & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // [converter] extracted a& to a.badge\n\n  // Account for badges in navs\n  .list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: $badge-active-color;\n    background-color: $badge-active-bg;\n  }\n\n  .list-group-item > & {\n    float: right;\n  }\n\n  .list-group-item > & + & {\n    margin-right: 5px;\n  }\n\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: $badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding-top:    $jumbotron-padding;\n  padding-bottom: $jumbotron-padding;\n  margin-bottom: $jumbotron-padding;\n  color: $jumbotron-color;\n  background-color: $jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: $jumbotron-heading-color;\n  }\n\n  p {\n    margin-bottom: ($jumbotron-padding / 2);\n    font-size: $jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken($jumbotron-bg, 10%);\n  }\n\n  .container &,\n  .container-fluid & {\n    border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container\n    padding-left:  ($grid-gutter-width / 2);\n    padding-right: ($grid-gutter-width / 2);\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: $screen-sm-min) {\n    padding-top:    ($jumbotron-padding * 1.6);\n    padding-bottom: ($jumbotron-padding * 1.6);\n\n    .container &,\n    .container-fluid & {\n      padding-left:  ($jumbotron-padding * 2);\n      padding-right: ($jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: $jumbotron-heading-font-size;\n    }\n  }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: $thumbnail-padding;\n  margin-bottom: $line-height-computed;\n  line-height: $line-height-base;\n  background-color: $thumbnail-bg;\n  border: 1px solid $thumbnail-border;\n  border-radius: $thumbnail-border-radius;\n  @include transition(border .2s ease-in-out);\n\n  > img,\n  a > img {\n    @include img-responsive;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active\n\n  // Image captions\n  .caption {\n    padding: $thumbnail-caption-padding;\n    color: $thumbnail-caption-color;\n  }\n}\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: $link-color;\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: $alert-padding;\n  margin-bottom: $line-height-computed;\n  border: 1px solid transparent;\n  border-radius: $alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing $headings-color\n    color: inherit;\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: $alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: ($alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n\n.alert-info {\n  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n\n.alert-warning {\n  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n\n.alert-danger {\n  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n","// Alerts\n\n@mixin alert-variant($background, $border, $text-color) {\n  background-color: $background;\n  border-color: $border;\n  color: $text-color;\n\n  hr {\n    border-top-color: darken($border, 5%);\n  }\n  .alert-link {\n    color: darken($text-color, 10%);\n  }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: $line-height-computed;\n  margin-bottom: $line-height-computed;\n  background-color: $progress-bg;\n  border-radius: $progress-border-radius;\n  @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: $font-size-small;\n  line-height: $line-height-computed;\n  color: $progress-bar-color;\n  text-align: center;\n  background-color: $progress-bar-bg;\n  @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  @include transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  @include gradient-striped;\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  @include animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  @include progress-bar-variant($progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  @include progress-bar-variant($progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  @include progress-bar-variant($progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  @include progress-bar-variant($progress-bar-danger-bg);\n}\n","// Gradients\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Opera 12\n  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n  background-repeat: repeat-x;\n  background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12\n  background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n}\n@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n  background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n  background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {\n  background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// Progress bars\n\n@mixin progress-bar-variant($color) {\n  background-color: $color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    @include gradient-striped;\n  }\n}\n",".media {\n  // Proper spacing between instances of .media\n  margin-top: 15px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n}\n\n.media,\n.media-body {\n  zoom: 1;\n  overflow: hidden;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-object {\n  display: block;\n\n  // Fix collapse in webkit from max-width: 100% and display: table-cell.\n  &.img-thumbnail {\n    max-width: none;\n  }\n}\n\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
        ,
          , or
          .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: $list-group-bg;\n border: 1px solid $list-group-border;\n\n // Round the first and last items\n &:first-child {\n @include border-top-radius($list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n @include border-bottom-radius($list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: $list-group-link-color;\n\n .list-group-item-heading {\n color: $list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: $list-group-link-hover-color;\n background-color: $list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: $list-group-disabled-bg;\n color: $list-group-disabled-color;\n cursor: $cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: $list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: $list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@include list-group-item-variant(success, $state-success-bg, $state-success-text);\n@include list-group-item-variant(info, $state-info-bg, $state-info-text);\n@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);\n@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n // [converter] extracted a&, button& to a.list-group-item-#{$state}, button.list-group-item-#{$state}\n }\n\n a.list-group-item-#{$state},\n button.list-group-item-#{$state} {\n color: $color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: $color;\n background-color: darken($background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: $color;\n border-color: $color;\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: $line-height-computed;\n background-color: $panel-bg;\n border: 1px solid transparent;\n border-radius: $panel-border-radius;\n @include box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: $panel-body-padding;\n @include clearfix;\n}\n\n// Optional heading\n.panel-heading {\n padding: $panel-heading-padding;\n border-bottom: 1px solid transparent;\n @include border-top-radius(($panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil(($font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: $panel-footer-padding;\n background-color: $panel-footer-bg;\n border-top: 1px solid $panel-inner-border;\n @include border-bottom-radius(($panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n @include border-top-radius(($panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n @include border-bottom-radius(($panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n @include border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: $panel-body-padding;\n padding-right: $panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n @include border-top-radius(($panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: ($panel-border-radius - 1);\n border-top-right-radius: ($panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: ($panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: ($panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n @include border-bottom-radius(($panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: ($panel-border-radius - 1);\n border-bottom-right-radius: ($panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: ($panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: ($panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid $table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: $line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: $panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid $panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid $panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);\n}\n.panel-primary {\n @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);\n}\n.panel-success {\n @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);\n}\n.panel-info {\n @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);\n}\n.panel-warning {\n @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);\n}\n.panel-danger {\n @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);\n}\n","// Panels\n\n@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {\n border-color: $border;\n\n & > .panel-heading {\n color: $heading-text-color;\n background-color: $heading-bg-color;\n border-color: $heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: $border;\n }\n .badge {\n color: $heading-bg-color;\n background-color: $heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: $border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: $well-bg;\n border: 1px solid $well-border;\n border-radius: $border-radius-base;\n @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: $border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: $border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: ($font-size-base * 1.5);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n @include opacity(.2);\n\n &:hover,\n &:focus {\n color: $close-color;\n text-decoration: none;\n cursor: pointer;\n @include opacity(.5);\n }\n\n // [converter] extracted button& to button.close\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n @include translate(0, -25%);\n @include transition-transform(0.3s ease-out);\n }\n &.in .modal-dialog { @include translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: $modal-content-bg;\n border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid $modal-content-border-color;\n border-radius: $border-radius-large;\n @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-modal-background;\n background-color: $modal-backdrop-bg;\n // Fade for backdrop\n &.fade { @include opacity(0); }\n &.in { @include opacity($modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: $modal-title-padding;\n border-bottom: 1px solid $modal-header-border-color;\n @include clearfix;\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: $modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid $modal-footer-border-color;\n @include clearfix; // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: $screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: $modal-md;\n margin: 30px auto;\n }\n .modal-content {\n @include box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: $modal-sm; }\n}\n\n@media (min-width: $screen-md-min) {\n .modal-lg { width: $modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text;\n font-size: $font-size-small;\n\n @include opacity(0);\n\n &.in { @include opacity($tooltip-opacity); }\n &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: 3px 8px;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n border-radius: $border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: $tooltip-arrow-width;\n margin-bottom: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: $tooltip-arrow-width;\n margin-bottom: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n border-top-color: $tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n border-right-color: $tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -$tooltip-arrow-width;\n border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-left-color: $tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: $tooltip-arrow-width;\n margin-top: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: $tooltip-arrow-width;\n margin-top: -$tooltip-arrow-width;\n border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n border-bottom-color: $tooltip-arrow-color;\n }\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: none;\n max-width: $popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text;\n font-size: $font-size-base;\n\n background-color: $popover-bg;\n background-clip: padding-box;\n border: 1px solid $popover-fallback-border-color;\n border: 1px solid $popover-border-color;\n border-radius: $border-radius-large;\n @include box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -$popover-arrow-width; }\n &.right { margin-left: $popover-arrow-width; }\n &.bottom { margin-top: $popover-arrow-width; }\n &.left { margin-left: -$popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: $font-size-base;\n background-color: $popover-title-bg;\n border-bottom: 1px solid darken($popover-title-bg, 5%);\n border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: $popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: $popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -$popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: $popover-arrow-outer-color;\n bottom: -$popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -$popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: $popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -$popover-arrow-outer-width;\n margin-top: -$popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: $popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -$popover-arrow-width;\n border-left-width: 0;\n border-right-color: $popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -$popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: $popover-arrow-outer-color;\n top: -$popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -$popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -$popover-arrow-outer-width;\n margin-top: -$popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: $popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: $popover-arrow-color;\n bottom: -$popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n @include transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n @include img-responsive;\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n @include transition-transform(0.6s ease-in-out);\n @include backface-visibility(hidden);\n @include perspective(1000px);\n\n &.next,\n &.active.right {\n @include translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n @include translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n @include translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: $carousel-control-width;\n @include opacity($carousel-control-opacity);\n font-size: $carousel-control-font-size;\n color: $carousel-control-color;\n text-align: center;\n text-shadow: $carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: $carousel-control-color;\n text-decoration: none;\n @include opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid $carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: $carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n text-shadow: $carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: $screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: ($carousel-control-font-size * 1.5);\n height: ($carousel-control-font-size * 1.5);\n margin-top: ($carousel-control-font-size / -2);\n font-size: ($carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: ($carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: ($carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n @include clearfix;\n}\n.center-block {\n @include center-block;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n @include text-hide;\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","// Center-align a block level element\n\n@mixin center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n@mixin hide-text() {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n@mixin text-hide() {\n @include hide-text;\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n\n@include responsive-invisibility('.visible-xs');\n@include responsive-invisibility('.visible-sm');\n@include responsive-invisibility('.visible-md');\n@include responsive-invisibility('.visible-lg');\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n@media (max-width: $screen-xs-max) {\n @include responsive-visibility('.visible-xs');\n}\n.visible-xs-block {\n @media (max-width: $screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: $screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: $screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n @include responsive-visibility('.visible-sm');\n}\n.visible-sm-block {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n @include responsive-visibility('.visible-md');\n}\n.visible-md-block {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n display: inline-block !important;\n }\n}\n\n@media (min-width: $screen-lg-min) {\n @include responsive-visibility('.visible-lg');\n}\n.visible-lg-block {\n @media (min-width: $screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: $screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: $screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n@media (max-width: $screen-xs-max) {\n @include responsive-invisibility('.hidden-xs');\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n @include responsive-invisibility('.hidden-sm');\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n @include responsive-invisibility('.hidden-md');\n}\n\n@media (min-width: $screen-lg-min) {\n @include responsive-invisibility('.hidden-lg');\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n\n@include responsive-invisibility('.visible-print');\n\n@media print {\n @include responsive-visibility('.visible-print');\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n@media print {\n @include responsive-invisibility('.hidden-print');\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n// [converter] $parent hack\n@mixin responsive-visibility($parent) {\n #{$parent} {\n display: block !important;\n }\n table#{$parent} { display: table !important; }\n tr#{$parent} { display: table-row !important; }\n th#{$parent},\n td#{$parent} { display: table-cell !important; }\n}\n\n// [converter] $parent hack\n@mixin responsive-invisibility($parent) {\n #{$parent} {\n display: none !important;\n }\n}\n","@import \"palette\";\n\n$ionicons-font-path: \"../../../fonts\" !default;\n@import \"./node_modules/ionicons/scss/ionicons\";\n\n@import \"modules/bootstrap\";\n\nhtml {\n position: relative;\n min-height: 100%;\n -webkit-font-smoothing: antialiased;\n // always show up-down scrollbar to prevent content from jumping left/right\n // depending on whether the page is taller than 100% of viewport height\n overflow-y: scroll;\n}\n\nbody {\n margin-bottom: 60px;\n padding-bottom: 60px;\n}\n\n@import \"helpers\";\n\n// Module overrides\n@import \"modules/tabs\";\n@import \"modules/forms\";\n@import \"modules/well\";\n@import \"modules/alerts\";\n@import \"modules/panels\";\n@import \"modules/btns\";\n@import \"modules/pager\";\n\n// Error pages can have their own overrides.\n@import \"errors\";\n",".uppercase {\n text-transform: uppercase;\n}\n\n.margin-top {\n margin-top: 20px;\n}\n\n.margin-bottom {\n margin-bottom: 20px;\n}\n\n.no-select {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n","div[role=tabpanel] {\n ul.nav-tabs {\n border-bottom: 1px solid #d5d8d7;\n li {\n a {\n font-weight: 400;\n display: inline-block;\n padding: 10px 25px;\n border-radius: 0;\n font-size: 0.9em;\n letter-spacing: 0.01em;\n }\n }\n }\n\n .tab-content {\n border: {\n left: 1px solid #d5d8d7;\n bottom: 1px solid #d5d8d7;\n right: 1px solid #d5d8d7;\n }\n background-color: white;\n .tab-pane {\n padding: 10px;\n }\n }\n}\n","label {\n font-size: 14px;\n}\n\ntextarea {\n resize: none;\n overflow: auto;\n}\n\n.markdown-control {\n position: relative;\n\n &:before {\n position:absolute;\n display:block;\n right:0%;\n bottom:0%;\n width:40px;\n height:40px;\n font-size: 2em;\n font-family: \"Ionicons\";\n content: \"\\f4e6\";\n }\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: 45px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n @include box-shadow(none !important);\n @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n &:focus {\n border-color: #66afe9;\n }\n}\n\n.component-inline {\n @media (max-width: $screen-xs-max) {\n .radio-items {\n text-align: left;\n .radio-inline {\n margin-left: 0;\n width: 100%;\n }\n }\n }\n}\n\n.minicolors-theme-bootstrap .minicolors-swatch {\n top: 9px;\n left: 9px;\n}\n",".well {\n border-radius: 0;\n}\n",".alert {\n border-radius: 4px;\n background: $cachet_yellow;\n border: solid 2px $cachet_dark-yellow;\n\n &.alert-success {\n background-color: $cachet_green;\n border: solid 2px $cachet_dark-green;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n\n &.alert-info {\n background: $cachet_blue;\n border: solid 2px $cachet_dark-blue;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n\n &.alert-danger {\n background: $cachet_red;\n border: solid 2px $cachet_dark-red;\n color: white;\n\n a {\n color: white;\n font-weight: bold;\n }\n }\n}\n",".panel-danger {\n @include panel-variant($cachet_dark-red, white, $cachet-red, $cachet_dark-red);\n}\n\n.panel-success {\n @include panel-variant($cachet_dark-green, white, $cachet-green, $cachet_dark-green);\n}\n\n.panel-info {\n @include panel-variant($cachet_dark-blue, white, $cachet-blue, $cachet_dark-blue);\n}\n\n.panel-warning {\n @include panel-variant($cachet_dark-yellow, $panel-warning-text, $cachet-yellow, $cachet_dark-yellow);\n}\n","@mixin pretty-buttons($color, $background, $text-shadow: none) {\n color: $color;\n background: $background;\n border: solid 1px darken($background, 10%);\n\n &:hover,\n &:focus,\n &:active,\n &.active {\n background: darken($background, 5%);\n border-color: darken($background, 10%);\n color: $color;\n outline: none;\n outline-offset: 0;\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: lighten($background, 5%);\n border-color: darken($background, 10%);\n }\n }\n}\n\n.btn {\n &.btn-default {\n @include pretty-buttons($btn-default-color, $btn-default-bg);\n }\n &.btn-primary {\n @include pretty-buttons($btn-primary-color, $btn-primary-bg);\n }\n &.btn-success {\n @include pretty-buttons($btn-success-color, $btn-success-bg);\n }\n &.btn-info {\n @include pretty-buttons($btn-info-color, $btn-info-bg);\n }\n &.btn-warning {\n @include pretty-buttons($btn-warning-color, $btn-warning-bg);\n }\n &.btn-danger {\n @include pretty-buttons($btn-danger-color, $btn-danger-bg);\n }\n &.btn-inverse {\n @include pretty-buttons(white, #474949);\n }\n}\n\n.btn-outline {\n background-color: transparent;\n background-image: none !important;\n color: inherit;\n transition: all .5s;\n}\n\n.btn-default.btn-outline {\n color: #999;\n}\n\n.btn-primary.btn-outline {\n color: #428bca;\n}\n\n.btn-success.btn-outline {\n color: #5cb85c;\n}\n\n.btn-info.btn-outline {\n color: #5bc0de;\n}\n\n.btn-warning.btn-outline {\n color: #f0ad4e;\n}\n\n.btn-danger.btn-outline {\n color: #d9534f;\n}\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff;\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n li {\n > a, > span {\n border-radius: 3px;\n }\n }\n}\n","body.error-page {\n background-color: #f3f3f4;\n\n .middle-box {\n height: 400px;\n width: 400px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -200px;\n z-index: 100;\n\n h1 {\n font-size: 9em;\n }\n }\n\n h3 {\n &.font-bold {\n font-weight: 600;\n }\n }\n}\n","body.dashboard {\n font-family: $base-font-family;\n font-weight: $base-font-weight;\n font-size: $base-font-size;\n // letter-spacing: $base-letter-spacing;\n display: table;\n width: 100%;\n height: 100%;\n table-layout: fixed;\n line-height: $base-line-height;\n -webkit-font-smoothing: antialiased;\n\n .wrapper {\n padding-left: 0;\n -webkit-transition: all 0.5s ease;\n -moz-transition: all 0.5s ease;\n -o-transition: all 0.5s ease;\n transition: all 0.5s ease;\n }\n\n .wrapper.toggled {\n padding-left: $sidebar-normal-width;;\n }\n\n .wrapper.toggled .sidebar {\n width: $sidebar-normal-width;;\n }\n\n .wrapper.toggled .page-content {\n position: absolute;\n margin-right: -$sidebar-normal-width;;\n }\n\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n .wrapper {\n padding-left: 80px;\n }\n }\n\n @media (min-width: $screen-sm-max) {\n .wrapper {\n padding-left: $sidebar-normal-width;\n }\n\n .wrapper.toggled {\n padding-left: 0;\n }\n\n .wrapper.toggled .page-content {\n position: relative;\n margin-right: 0;\n }\n }\n\n .alerts {\n .alert h5 {\n margin-top: 5px;\n }\n }\n}\n","body.dashboard {\n .wrapper {\n width: 100%;\n display: table;\n height: 100%;\n table-layout: fixed;\n }\n}\n","body.dashboard {\n .navbar {\n z-index: 999;\n border-radius: 0px;\n border: none;\n border-bottom: $header-border-color;\n background: $header-background-color;\n margin: 0;\n a, a:active, a:visited {\n color: $base-link-color;\n &:hover {\n color: $base-link-hover-color;\n }\n }\n .navbar-toggle {\n margin-top: 15px;\n background: transparent;\n border-color: transparent;\n &.collapsed span {\n background-color: $base-link-color;\n }\n }\n .navbar-collapse {\n background: $header-background-color;\n }\n a.navbar-brand {\n padding: 34px 21px;\n line-height: 0em;\n font-size: 1.1em;\n letter-spacing: 0.04em;\n font-weight: 600;\n text-transform: uppercase;\n @media (min-width: $screen-sm-max) {\n span {\n padding-right: 10px;\n &:before {\n font-family: FontAwesome;\n content: \"\\f060\";\n }\n }\n }\n }\n .nav li a {\n height: 68px;\n line-height: 35px;\n }\n }\n}\n","body.dashboard {\n .sidebar {\n position: fixed;\n left: $sidebar-normal-width;\n width: 0;\n height: 100%;\n margin-left: -$sidebar-normal-width;\n overflow-y: auto;\n background: $cachet-base-dark;\n @include box-shadow($sidebar-border-shadow);\n z-index: 1000;\n -webkit-transition: all 0.5s ease;\n -moz-transition: all 0.5s ease;\n -o-transition: all 0.5s ease;\n transition: all 0.5s ease;\n\n .sidebar-inner {\n position: absolute;\n top: 0;\n width: $sidebar-normal-width;\n margin: 0;\n padding: 0;\n list-style: none;\n\n .profile {\n text-align: center;\n padding: 20px 10px;\n margin-bottom: 0;\n .dropdown-toggle {\n text-decoration: none;\n }\n .dropdown-menu {\n top: 108%;\n }\n .avatar {\n width: 60px;\n img {\n border-radius: 50%;\n width: 50px;\n }\n }\n .username {\n word-break: break-all;\n margin-bottom: 0;\n }\n a {\n color: $sidebar-text-color;\n text-decoration: none;\n }\n }\n .quick-add-incident {\n @extend .text-center;\n padding: 10px;\n i {\n @extend .visible-sm;\n }\n span {\n @extend .hidden-sm;\n }\n }\n ul {\n clear: both;\n margin: 0;\n padding: 0;\n list-style: none;\n\n li {\n font-size: $sidebar-text-size;\n &:focus,\n &:hover {\n background: lighten($cachet-base-dark, 5%) !important;\n }\n &.active {\n background: lighten($cachet-base-dark, 10%);\n &:hover {\n background: lighten($cachet-base-dark, 15%) !important;\n }\n a {\n padding-top: 14px;\n padding-bottom: 14px;\n border-top: 1px solid $cachet-gray-darker;\n border-bottom: 1px solid $cachet-gray-darker;\n color: $sidebar-text-active-color;\n &:focus,\n &:hover {\n text-decoration: none;\n }\n }\n }\n a {\n display: block;\n padding: 15px;\n color: $sidebar-text-color;\n i {\n font-size: 18px;\n min-width: 17px;\n text-align: center;\n position: relative;\n top: 1px;\n margin-right: 5px;\n }\n &:focus,\n &:hover {\n text-decoration: none;\n }\n\n span {\n &.label {\n float: right;\n margin: 3px 0;\n &.label-info {\n background-color: $cachet-secondary;\n }\n }\n }\n }\n\n &.sub-nav-item {\n a {\n padding-left: 40px;\n }\n }\n }\n }\n & > ul > li > a {\n & > span {\n @extend .hidden-sm;\n }\n }\n }\n .bottom-menu-sidebar {\n @extend .hidden-sm;\n position: fixed;\n bottom: 0;\n width: 230px;\n z-index: 999;\n ul > li {\n float: left;\n display: block;\n width: 33.333%;\n border-right: 1px solid #ddd;\n border-top: 1px solid #ddd;\n a {\n color: #333333;\n display: block;\n position: relative;\n text-align: center;\n padding: 6px 0;\n background: #fff;\n }\n }\n }\n }\n\n // Sidebar media queries\n @media (min-width: $screen-xs-max) {\n .sidebar {\n width: $sidebar-normal-width;\n }\n\n .wrapper.toggled .sidebar {\n width: 0;\n }\n }\n\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n .sidebar {\n width: 80px;\n left: 150px;\n margin-left: -150px;\n .sidebar-inner {\n width: 80px;\n .profile .avatar img {\n width: 40px;\n }\n .quick-add-incident {\n .btn {\n padding: 3px 6px;\n }\n i {\n font-size: 20px;\n }\n }\n & > ul > li > a {\n text-align: center;\n & > i {\n font-size: 25px;\n }\n }\n }\n }\n }\n\n .sidebar-toggler {\n float: left;\n padding: 10px;\n position: relative;\n top: -15px;\n left: -5px;\n margin-right: 10px;\n cursor: pointer;\n i {\n font-size: 25px;\n }\n }\n\n .sub-sidebar {\n left: 0;\n top: 0;\n bottom: 0;\n position: fixed;\n margin-left: 228px;\n width: 22%;\n background: #F0F3F4;\n border-right: 1px solid #E8ECF1;\n\n h3 {\n margin: 0;\n text-align: center;\n font-size: 19px;\n padding: 30px 15px 15px 15px;\n }\n\n hr {\n margin-top: 5px;\n margin-bottom: 5px;\n }\n\n ul.menu {\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n a {\n color: #666;\n display: block;\n padding: 13px 30px;\n font-size: 15px;\n transition: all 0.2s linear;\n text-decoration: none;\n\n &.active {\n color: $cachet-secondary;\n }\n\n &:hover {\n color: $cachet-secondary;\n }\n }\n i {\n margin-right: 5px;\n }\n }\n }\n\n .sidebar-toggler {\n position: absolute;\n top: 3px;\n left: 20px;\n font-size: 36px;\n cursor: pointer;\n }\n\n + .content-wrapper {\n top: 0;\n position: relative;\n margin-left: 26%;\n padding-right: 40px !important;\n }\n\n }\n\n // Sub-sidebar media queries\n @media (max-width: $screen-xs-max) {\n .sub-sidebar {\n position: relative;\n margin-left: 0;\n width: 100%;\n + .content-wrapper {\n margin-left: 0;\n padding-left: 40px !important;\n width: 100%;\n }\n }\n\n }\n\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n .sub-sidebar {\n margin-left: 80px;\n width: 25%;\n + .content-wrapper {\n padding-left: 45px !important;\n }\n }\n }\n}\n","body.dashboard {\n .page-content {\n width: 100%;\n .content-wrapper {\n padding-top: 20px;\n padding-left: 40px;\n padding-right: 40px;\n &.header-fixed {\n margin-top: 60px;\n }\n }\n .header {\n position: relative;\n top: 0;\n left: 0;\n color: #333;\n background-color: #fff;\n padding: 22px 40px;\n width: 100%;\n height: 70px;\n font-size: 1.2em;\n border-bottom: 1px solid #eee;\n z-index: 99;\n &.sub-header {\n padding: 8px 2px;\n height: 50px;\n }\n &.fixed {\n position: fixed;\n padding-left: 270px;\n }\n input, button, .btn {\n position: relative;\n top: -4px;\n }\n input {\n width: 20%;\n }\n\n + .row {\n margin-top: 23px;\n }\n\n h3 {\n color: #444;\n margin-top: 0;\n text-transform: uppercase;\n }\n .ion {\n margin-right: 2px;\n }\n }\n\n .sub-header {\n font-weight: 300;\n text-transform: uppercase;\n a {\n text-transform: none;\n }\n }\n\n .striped-list {\n .striped-list-item {\n border-bottom: 1px solid #f0f0f0;\n padding: 8px 0;\n }\n }\n\n .drag-handle {\n cursor: move;\n }\n\n .user-grid {\n .user {\n img {\n border-radius: 5px;\n margin-bottom: 15px;\n border: 0;\n }\n\n .name {\n font-weight: 600;\n }\n\n .email {\n color: #444;\n margin-top: 4px;\n }\n }\n }\n }\n\n // Header media queries\n @media (max-width: $screen-xs-max) {\n .page-content {\n .content-wrapper {\n padding-left: 20px;\n padding-right: 20px;\n }\n .header {\n padding-left: 20px;\n padding-right: 20px;\n &.fixed {\n padding-left: 20px;\n padding-right: 20px;\n }\n }\n }\n }\n\n @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n .page-content {\n .header.fixed {\n padding-left: 120px;\n }\n }\n }\n\n}\n","#welcome-modal {\n .modal-dialog {\n margin-top: 65px;\n }\n\n .modal-content {\n .modal-header {\n border-bottom: 0;\n }\n\n .modal-body {\n padding-bottom: 50px;\n\n header {\n text-align: center;\n font-weight: 600;\n font-size: 22px;\n color: #444;\n margin-bottom: 23px;\n }\n\n p {\n font-size: 13px;\n color: #555;\n margin: 0 auto;\n width: 80%;\n text-align: center;\n line-height: 20px;\n }\n\n .go-dashboard {\n text-align: center;\n display: block;\n margin-top: 10px;\n }\n\n .get-started {\n margin-top: 40px;\n\n .col-md-4 {\n text-align: center;\n padding-bottom: 50px;\n a {\n i {\n font-size: 38px;\n color: $cachet-secondary;\n display: block;\n }\n\n color: $cachet-gray-darker;\n display: block;\n margin-top: 12px;\n font-size: 13px;\n\n &:hover {\n text-decoration: none;\n color: $cachet-gray;\n }\n }\n }\n }\n }\n }\n}\n","body.login {\n .form-bg {\n border-radius: 10px;\n margin: auto;\n margin-top: 60px;\n padding: 30px;\n width: 320px;\n border: 1px solid rgba(0,0,0,.1);\n box-shadow: 0 20px 30px rgba(0,0,0,.2);\n background-color: white;\n }\n\n .logo {\n margin-bottom: 30px;\n\n img {\n margin: 0 auto;\n }\n }\n\n .login-input {\n height: 45px;\n }\n\n i {\n font-size: 22px;\n }\n\n .btn {\n &.btn-white {\n background-color: white;\n transition: background-color 0.5s ease;\n\n &.btn-trans {\n background-color: transparent;\n border: 1px solid white;\n border-radius: 4px;\n color: white;\n\n &:hover {\n background-color: white;\n color: $cachet-green;\n }\n }\n }\n }\n}\n",".setup-page {\n padding-top: 60px;\n .logo {\n display: block;\n margin: 0 auto 30px;\n }\n .steps {\n @extend .row;\n margin: 0 auto;\n border-radius: 2px 2px 0 0;\n margin-bottom: 20px;\n .step {\n @extend .col-xs-3;\n padding: 20px 0;\n text-align: center;\n position: relative;\n font-size: 13px;\n &:not(:last-child):after {\n content: '';\n position: absolute;\n bottom: 31px;\n left: 55%;\n display: block;\n height: 1px;\n background: #94A1B8;\n width: 100%;\n }\n span {\n width: 23px;\n height: 23px;\n display: block;\n position: relative;\n margin: 0 auto;\n margin-top: 13px;\n border-radius: 25px;\n background: $cachet-base-medium;\n border: 1px solid #94A1B8;\n -webkit-transition: all 0.2s linear;\n -moz-transition: all 0.2s linear;\n -ms-transition: all 0.2s linear;\n -o-transition: all 0.2s linear;\n transition: all 0.2s linear;\n }\n\n &.active {\n span {\n background: $cachet-primary;\n }\n }\n }\n }\n .setup-success {\n text-align: center;\n i {\n font-size: 47px;\n }\n h3 {\n margin-top: 25px;\n font-size: 21px;\n color: #556579;\n }\n .btn {\n margin-top: 40px;\n }\n }\n}\n",".component-inline-update {\n @extend .text-right;\n padding-top: 8px;\n label {\n display: initial;\n font-weight: normal;\n }\n}\n\n.component-group-name{\n font-size: 18px;\n padding-left: 10px;\n}\n\n.component-group-other{\n font-size: 18px;\n}\n\n@import \"modules/stats\";\n",".stats-widget {\n text-align: center;\n margin-bottom: 30px;\n background-color: #fff;\n border: #eee 1px solid;\n\n &.full-stats-block {\n .stats-bottom {\n border-top: 0 !important;\n color: #fff;\n position: relative;\n margin-top: -1px;\n z-index: 1000;\n }\n }\n\n .stats-top {\n padding: 20px;\n\n > span {\n display: block;\n text-align: center;\n\n &.stats-value {\n font-size: 24px;\n font-weight: 400;\n }\n\n &.stats-label {\n padding-top: 5px;\n font-size: 14px;\n font-weight: 300;\n color: #777;\n }\n }\n }\n\n .stats-chart {\n margin-top: -20px;\n padding-top: 10px;\n }\n\n .stats-body {\n margin-top: -20px;\n padding-top: 10px;\n\n .list-group {\n border: none;\n padding-bottom: 0;\n margin-bottom: 0;\n\n .list-group-item {\n border-right: none;\n border-left: none;\n\n border-color: #eee;\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n }\n\n .stats-bottom {\n border-top: #eee 1px solid;\n color: #777;\n padding: 12px 10px;\n text-align: center;\n background-color: #f9f9f9;\n\n &.bg-green {\n background-color: $cachet-green;\n color: white;\n }\n\n &.bg-blue {\n background-color: $cachet-blue;\n color: white;\n }\n\n &.bg-red {\n background-color: $cachet-red;\n color: white;\n }\n\n &.bg-teal {\n background-color: $cachet-teal;\n color: white;\n }\n }\n}\n",".minicolors {\n position: relative;\n}\n\n.minicolors-sprite {\n background-image: url(data:image/png;base64,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);\n}\n\n.minicolors-no-data-uris .minicolors-sprite {\n background-image: url(jquery.minicolors.png);\n}\n\n.minicolors-swatch {\n position: absolute;\n vertical-align: middle;\n background-position: -80px 0;\n border: solid 1px #ccc;\n cursor: text;\n padding: 0;\n margin: 0;\n display: inline-block;\n}\n\n.minicolors-swatch-color {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n.minicolors input[type=hidden] + .minicolors-swatch {\n width: 28px;\n position: static;\n cursor: pointer;\n}\n\n.minicolors input[type=hidden][disabled] + .minicolors-swatch {\n cursor: default;\n}\n\n/* Panel */\n.minicolors-panel {\n position: absolute;\n width: 173px;\n height: 152px;\n background: white;\n border: solid 1px #CCC;\n box-shadow: 0 0 20px rgba(0, 0, 0, .2);\n z-index: 99999;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n display: none;\n}\n\n.minicolors-panel.minicolors-visible {\n display: block;\n}\n\n/* Panel positioning */\n.minicolors-position-top .minicolors-panel {\n top: -154px;\n}\n\n.minicolors-position-right .minicolors-panel {\n right: 0;\n}\n\n.minicolors-position-bottom .minicolors-panel {\n top: auto;\n}\n\n.minicolors-position-left .minicolors-panel {\n left: 0;\n}\n\n.minicolors-with-opacity .minicolors-panel {\n width: 194px;\n}\n\n.minicolors .minicolors-grid {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 150px;\n height: 150px;\n background-position: -120px 0;\n cursor: crosshair;\n}\n\n.minicolors .minicolors-grid-inner {\n position: absolute;\n top: 0;\n left: 0;\n width: 150px;\n height: 150px;\n}\n\n.minicolors-slider-saturation .minicolors-grid {\n background-position: -420px 0;\n}\n\n.minicolors-slider-saturation .minicolors-grid-inner {\n background-position: -270px 0;\n background-image: inherit;\n}\n\n.minicolors-slider-brightness .minicolors-grid {\n background-position: -570px 0;\n}\n\n.minicolors-slider-brightness .minicolors-grid-inner {\n background-color: black;\n}\n\n.minicolors-slider-wheel .minicolors-grid {\n background-position: -720px 0;\n}\n\n.minicolors-slider,\n.minicolors-opacity-slider {\n position: absolute;\n top: 1px;\n left: 152px;\n width: 20px;\n height: 150px;\n background-color: white;\n background-position: 0 0;\n cursor: row-resize;\n}\n\n.minicolors-slider-saturation .minicolors-slider {\n background-position: -60px 0;\n}\n\n.minicolors-slider-brightness .minicolors-slider {\n background-position: -20px 0;\n}\n\n.minicolors-slider-wheel .minicolors-slider {\n background-position: -20px 0;\n}\n\n.minicolors-opacity-slider {\n left: 173px;\n background-position: -40px 0;\n display: none;\n}\n\n.minicolors-with-opacity .minicolors-opacity-slider {\n display: block;\n}\n\n/* Pickers */\n.minicolors-grid .minicolors-picker {\n position: absolute;\n top: 70px;\n left: 70px;\n width: 12px;\n height: 12px;\n border: solid 1px black;\n border-radius: 10px;\n margin-top: -6px;\n margin-left: -6px;\n background: none;\n}\n\n.minicolors-grid .minicolors-picker > div {\n position: absolute;\n top: 0;\n left: 0;\n width: 8px;\n height: 8px;\n border-radius: 8px;\n border: solid 2px white;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.minicolors-picker {\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 2px;\n background: white;\n border: solid 1px black;\n margin-top: -2px;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n/* Inline controls */\n.minicolors-inline {\n display: inline-block;\n}\n\n.minicolors-inline .minicolors-input {\n display: none !important;\n}\n\n.minicolors-inline .minicolors-panel {\n position: relative;\n top: auto;\n left: auto;\n box-shadow: none;\n z-index: auto;\n display: inline-block;\n}\n\n/* Default theme */\n.minicolors-theme-default .minicolors-swatch {\n top: 5px;\n left: 5px;\n width: 18px;\n height: 18px;\n}\n.minicolors-theme-default.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 5px;\n}\n.minicolors-theme-default.minicolors {\n width: auto;\n display: inline-block;\n}\n.minicolors-theme-default .minicolors-input {\n height: 20px;\n width: auto;\n display: inline-block;\n padding-left: 26px;\n}\n.minicolors-theme-default.minicolors-position-right .minicolors-input {\n padding-right: 26px;\n padding-left: inherit;\n}\n\n/* Bootstrap theme */\n.minicolors-theme-bootstrap .minicolors-swatch {\n z-index: 2;\n top: 3px;\n left: 3px;\n width: 28px;\n height: 28px;\n border-radius: 3px;\n}\n.minicolors-theme-bootstrap .minicolors-swatch-color {\n border-radius: inherit;\n}\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-swatch {\n left: auto;\n right: 3px;\n}\n.minicolors-theme-bootstrap .minicolors-input {\n float: none;\n padding-left: 44px;\n}\n.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {\n padding-right: 44px;\n padding-left: 12px;\n}\n.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {\n top: 4px;\n left: 4px;\n width: 37px;\n height: 37px;\n border-radius: 5px;\n}\n.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {\n width: 24px;\n height: 24px;\n}\n.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n","@font-face {\n font-family: octicons-link;\n src: url(data:font/woff;charset=utf-8;base64,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) format('woff');\n}\n\n.markdown-body {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n line-height: 1.5;\n color: #333;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 16px;\n line-height: 1.5;\n word-wrap: break-word;\n}\n\n.markdown-body .pl-c {\n color: #969896;\n}\n\n.markdown-body .pl-c1,\n.markdown-body .pl-s .pl-v {\n color: #0086b3;\n}\n\n.markdown-body .pl-e,\n.markdown-body .pl-en {\n color: #795da3;\n}\n\n.markdown-body .pl-smi,\n.markdown-body .pl-s .pl-s1 {\n color: #333;\n}\n\n.markdown-body .pl-ent {\n color: #63a35c;\n}\n\n.markdown-body .pl-k {\n color: #a71d5d;\n}\n\n.markdown-body .pl-s,\n.markdown-body .pl-pds,\n.markdown-body .pl-s .pl-pse .pl-s1,\n.markdown-body .pl-sr,\n.markdown-body .pl-sr .pl-cce,\n.markdown-body .pl-sr .pl-sre,\n.markdown-body .pl-sr .pl-sra {\n color: #183691;\n}\n\n.markdown-body .pl-v {\n color: #ed6a43;\n}\n\n.markdown-body .pl-id {\n color: #b52a1d;\n}\n\n.markdown-body .pl-ii {\n color: #f8f8f8;\n background-color: #b52a1d;\n}\n\n.markdown-body .pl-sr .pl-cce {\n font-weight: bold;\n color: #63a35c;\n}\n\n.markdown-body .pl-ml {\n color: #693a17;\n}\n\n.markdown-body .pl-mh,\n.markdown-body .pl-mh .pl-en,\n.markdown-body .pl-ms {\n font-weight: bold;\n color: #1d3e81;\n}\n\n.markdown-body .pl-mq {\n color: #008080;\n}\n\n.markdown-body .pl-mi {\n font-style: italic;\n color: #333;\n}\n\n.markdown-body .pl-mb {\n font-weight: bold;\n color: #333;\n}\n\n.markdown-body .pl-md {\n color: #bd2c00;\n background-color: #ffecec;\n}\n\n.markdown-body .pl-mi1 {\n color: #55a532;\n background-color: #eaffea;\n}\n\n.markdown-body .pl-mdr {\n font-weight: bold;\n color: #795da3;\n}\n\n.markdown-body .pl-mo {\n color: #1d3e81;\n}\n\n.markdown-body .octicon {\n display: inline-block;\n vertical-align: text-top;\n fill: currentColor;\n}\n\n.markdown-body a {\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\n.markdown-body a:active,\n.markdown-body a:hover {\n outline-width: 0;\n}\n\n.markdown-body strong {\n font-weight: inherit;\n}\n\n.markdown-body strong {\n font-weight: bolder;\n}\n\n.markdown-body h1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n.markdown-body img {\n border-style: none;\n}\n\n.markdown-body svg:not(:root) {\n overflow: hidden;\n}\n\n.markdown-body code,\n.markdown-body kbd,\n.markdown-body pre {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n.markdown-body hr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\n.markdown-body input {\n font: inherit;\n margin: 0;\n}\n\n.markdown-body input {\n overflow: visible;\n}\n\n.markdown-body [type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\n.markdown-body * {\n box-sizing: border-box;\n}\n\n.markdown-body input {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.markdown-body a {\n color: #4078c0;\n text-decoration: none;\n}\n\n.markdown-body a:hover,\n.markdown-body a:active {\n text-decoration: underline;\n}\n\n.markdown-body strong {\n font-weight: 600;\n}\n\n.markdown-body hr {\n height: 0;\n margin: 15px 0;\n overflow: hidden;\n background: transparent;\n border: 0;\n border-bottom: 1px solid #ddd;\n}\n\n.markdown-body hr::before {\n display: table;\n content: \"\";\n}\n\n.markdown-body hr::after {\n display: table;\n clear: both;\n content: \"\";\n}\n\n.markdown-body table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n.markdown-body td,\n.markdown-body th {\n padding: 0;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.markdown-body h1 {\n font-size: 32px;\n font-weight: 600;\n}\n\n.markdown-body h2 {\n font-size: 24px;\n font-weight: 600;\n}\n\n.markdown-body h3 {\n font-size: 20px;\n font-weight: 600;\n}\n\n.markdown-body h4 {\n font-size: 16px;\n font-weight: 600;\n}\n\n.markdown-body h5 {\n font-size: 14px;\n font-weight: 600;\n}\n\n.markdown-body h6 {\n font-size: 12px;\n font-weight: 600;\n}\n\n.markdown-body p {\n margin-top: 0;\n margin-bottom: 10px;\n}\n\n.markdown-body blockquote {\n margin: 0;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.markdown-body ol ol,\n.markdown-body ul ol {\n list-style-type: lower-roman;\n}\n\n.markdown-body ul ul ol,\n.markdown-body ul ol ol,\n.markdown-body ol ul ol,\n.markdown-body ol ol ol {\n list-style-type: lower-alpha;\n}\n\n.markdown-body dd {\n margin-left: 0;\n}\n\n.markdown-body code {\n font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n font-size: 12px;\n}\n\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 0;\n font: 12px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n}\n\n.markdown-body .octicon {\n vertical-align: text-bottom;\n}\n\n.markdown-body input {\n -webkit-font-feature-settings: \"liga\" 0;\n font-feature-settings: \"liga\" 0;\n}\n\n.markdown-body::before {\n display: table;\n content: \"\";\n}\n\n.markdown-body::after {\n display: table;\n clear: both;\n content: \"\";\n}\n\n.markdown-body>*:first-child {\n margin-top: 0 !important;\n}\n\n.markdown-body>*:last-child {\n margin-bottom: 0 !important;\n}\n\n.markdown-body a:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\n.markdown-body .anchor {\n float: left;\n padding-right: 4px;\n margin-left: -20px;\n line-height: 1;\n}\n\n.markdown-body .anchor:focus {\n outline: none;\n}\n\n.markdown-body p,\n.markdown-body blockquote,\n.markdown-body ul,\n.markdown-body ol,\n.markdown-body dl,\n.markdown-body table,\n.markdown-body pre {\n margin-top: 0;\n margin-bottom: 16px;\n}\n\n.markdown-body hr {\n height: 0.25em;\n padding: 0;\n margin: 24px 0;\n background-color: #e7e7e7;\n border: 0;\n}\n\n.markdown-body blockquote {\n padding: 0 1em;\n color: #777;\n border-left: 0.25em solid #ddd;\n}\n\n.markdown-body blockquote>:first-child {\n margin-top: 0;\n}\n\n.markdown-body blockquote>:last-child {\n margin-bottom: 0;\n}\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font-size: 11px;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n margin-top: 24px;\n margin-bottom: 16px;\n font-weight: 600;\n line-height: 1.25;\n}\n\n.markdown-body h1 .octicon-link,\n.markdown-body h2 .octicon-link,\n.markdown-body h3 .octicon-link,\n.markdown-body h4 .octicon-link,\n.markdown-body h5 .octicon-link,\n.markdown-body h6 .octicon-link {\n color: #000;\n vertical-align: middle;\n visibility: hidden;\n}\n\n.markdown-body h1:hover .anchor,\n.markdown-body h2:hover .anchor,\n.markdown-body h3:hover .anchor,\n.markdown-body h4:hover .anchor,\n.markdown-body h5:hover .anchor,\n.markdown-body h6:hover .anchor {\n text-decoration: none;\n}\n\n.markdown-body h1:hover .anchor .octicon-link,\n.markdown-body h2:hover .anchor .octicon-link,\n.markdown-body h3:hover .anchor .octicon-link,\n.markdown-body h4:hover .anchor .octicon-link,\n.markdown-body h5:hover .anchor .octicon-link,\n.markdown-body h6:hover .anchor .octicon-link {\n visibility: visible;\n}\n\n.markdown-body h1 {\n padding-bottom: 0.3em;\n font-size: 2em;\n border-bottom: 1px solid #eee;\n}\n\n.markdown-body h2 {\n padding-bottom: 0.3em;\n font-size: 1.5em;\n border-bottom: 1px solid #eee;\n}\n\n.markdown-body h3 {\n font-size: 1.25em;\n}\n\n.markdown-body h4 {\n font-size: 1em;\n}\n\n.markdown-body h5 {\n font-size: 0.875em;\n}\n\n.markdown-body h6 {\n font-size: 0.85em;\n color: #777;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n padding-left: 2em;\n}\n\n.markdown-body ul ul,\n.markdown-body ul ol,\n.markdown-body ol ol,\n.markdown-body ol ul {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.markdown-body li>p {\n margin-top: 16px;\n}\n\n.markdown-body li+li {\n margin-top: 0.25em;\n}\n\n.markdown-body dl {\n padding: 0;\n}\n\n.markdown-body dl dt {\n padding: 0;\n margin-top: 16px;\n font-size: 1em;\n font-style: italic;\n font-weight: bold;\n}\n\n.markdown-body dl dd {\n padding: 0 16px;\n margin-bottom: 16px;\n}\n\n.markdown-body table {\n display: block;\n width: 100%;\n overflow: auto;\n}\n\n.markdown-body table th {\n font-weight: bold;\n}\n\n.markdown-body table th,\n.markdown-body table td {\n padding: 6px 13px;\n border: 1px solid #ddd;\n}\n\n.markdown-body table tr {\n background-color: #fff;\n border-top: 1px solid #ccc;\n}\n\n.markdown-body table tr:nth-child(2n) {\n background-color: #f8f8f8;\n}\n\n.markdown-body img {\n max-width: 100%;\n box-sizing: content-box;\n background-color: #fff;\n}\n\n.markdown-body code {\n padding: 0;\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(0,0,0,0.04);\n border-radius: 3px;\n}\n\n.markdown-body code::before,\n.markdown-body code::after {\n letter-spacing: -0.2em;\n content: \"\\00a0\";\n}\n\n.markdown-body pre {\n word-wrap: normal;\n}\n\n.markdown-body pre>code {\n padding: 0;\n margin: 0;\n font-size: 100%;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n}\n\n.markdown-body .highlight {\n margin-bottom: 16px;\n}\n\n.markdown-body .highlight pre {\n margin-bottom: 0;\n word-break: normal;\n}\n\n.markdown-body .highlight pre,\n.markdown-body pre {\n padding: 16px;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: #f7f7f7;\n border-radius: 3px;\n}\n\n.markdown-body pre code {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0;\n}\n\n.markdown-body pre code::before,\n.markdown-body pre code::after {\n content: normal;\n}\n\n.markdown-body .pl-0 {\n padding-left: 0 !important;\n}\n\n.markdown-body .pl-1 {\n padding-left: 3px !important;\n}\n\n.markdown-body .pl-2 {\n padding-left: 6px !important;\n}\n\n.markdown-body .pl-3 {\n padding-left: 12px !important;\n}\n\n.markdown-body .pl-4 {\n padding-left: 24px !important;\n}\n\n.markdown-body .pl-5 {\n padding-left: 36px !important;\n}\n\n.markdown-body .pl-6 {\n padding-left: 48px !important;\n}\n\n.markdown-body .full-commit .btn-outline:not(:disabled):hover {\n color: #4078c0;\n border: 1px solid #4078c0;\n}\n\n.markdown-body kbd {\n display: inline-block;\n padding: 3px 5px;\n font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n line-height: 10px;\n color: #555;\n vertical-align: middle;\n background-color: #fcfcfc;\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #bbb;\n}\n\n.markdown-body :checked+.radio-label {\n position: relative;\n z-index: 1;\n border-color: #4078c0;\n}\n\n.markdown-body .task-list-item {\n list-style-type: none;\n}\n\n.markdown-body .task-list-item+.task-list-item {\n margin-top: 3px;\n}\n\n.markdown-body .task-list-item input {\n margin: 0 0.2em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.markdown-body hr {\n border-bottom-color: #eee;\n}\n","// SweetAlert2\n// github.com/limonte/sweetalert2\n\n$white: #fff;\n\n.swal2-overlay {\n background-color: rgba(#000, .4);\n\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n\n display: none;\n z-index: 1000;\n}\n\n.swal2-modal {\n background-color: $white;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n border-radius: 5px;\n box-sizing: border-box;\n text-align: center;\n\n position: fixed;\n left: 50%;\n top: 50%;\n margin-top: -200px;\n\n max-height: 90%;\n overflow-x: hidden;\n overflow-y: auto;\n display: none;\n z-index: 2000;\n\n &:focus {\n outline: none;\n }\n\n &.loading {\n overflow-y: hidden;\n }\n\n h2 {\n color: #575757;\n font-size: 30px;\n text-align: center;\n font-weight: 600;\n text-transform: none;\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 60px;\n display: block;\n }\n\n .swal2-spacer {\n height: 10px;\n color: transparent;\n border: 0;\n }\n\n button.styled {\n border: 0;\n border-radius: 3px;\n box-shadow: none;\n color: $white;\n cursor: pointer;\n font-size: 17px;\n font-weight: 500;\n margin: 0 5px;\n padding: 10px 32px;\n\n &:not(.loading)[disabled] {\n opacity: .4;\n cursor: no-drop;\n }\n\n &.loading {\n box-sizing: border-box;\n border: 4px solid transparent;\n border-color: transparent;\n width: 40px;\n height: 40px;\n padding: 0;\n margin: -2px 30px;\n vertical-align: top;\n background-color: transparent !important;\n color: transparent;\n cursor: default;\n border-radius: 100%;\n animation: rotate-loading 1.5s linear 0s infinite normal;\n }\n }\n\n button:not(.styled) {\n &.loading:after {\n display: inline-block;\n content: \"\";\n margin-left: 5px;\n vertical-align: -1px;\n height: 6px;\n width: 6px;\n border: 3px solid #999;\n border-right-color: transparent;\n border-radius: 50%;\n animation: rotate-loading 1.5s linear 0s infinite normal;\n }\n }\n\n .swal2-image {\n margin: 20px auto;\n max-width: 100%;\n }\n\n .swal2-close {\n font-size: 36px;\n line-height: 36px;\n font-family: serif;\n position: absolute;\n top: 5px;\n right: 13px;\n cursor: pointer;\n color: #cfcfcf;\n transition: all 0.1s ease;\n\n &:hover {\n color: #d55;\n }\n }\n\n > .swal2-input,\n > .swal2-textarea,\n > .swal2-select,\n > .swal2-radio,\n > .swal2-checkbox {\n display: none;\n }\n\n .swal2-content {\n font-size: 18px;\n text-align: center;\n font-weight: 300;\n position: relative;\n float: none;\n margin: 0;\n padding: 0;\n line-height: normal;\n color: #555;\n }\n\n .swal2-input,\n .swal2-textarea,\n .swal2-select,\n .swal2-radio,\n .swal2-checkbox,\n .swal2-range input,\n .swal2-range output {\n margin: 20px auto;\n }\n\n .swal2-input:not([type=\"file\"]), .swal2-textarea {\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n border: 1px solid rgb(215, 215, 215);\n font-size: 18px;\n box-shadow: inset 0px 1px 1px rgba(black, 0.06);\n transition: all 0.3s;\n &.error {\n border-color: #f06e57 !important;\n }\n &:focus {\n outline: none;\n box-shadow: 0px 0px 3px rgb(196, 230, 245);\n border: 1px solid rgb(180, 219, 237);\n &::-moz-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n &:-ms-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n &::-webkit-input-placeholder {\n transition: opacity 0.3s 0.03s ease;\n opacity: 0.8;\n }\n }\n &::-moz-placeholder {\n color: lighten(#575757, 40);\n }\n &:-ms-input-placeholder {\n color: lighten(#575757, 40);\n }\n &::-webkit-input-placeholder {\n color: lighten(#575757, 40);\n }\n }\n\n .swal2-range {\n input {\n float: left;\n padding: 0 !important;\n width: 80% !important;\n }\n\n output {\n float: right;\n font-size: 20px;\n font-weight: 600;\n }\n }\n\n .swal2-input:not([type=\"file\"]),\n .swal2-range input,\n .swal2-range output {\n height: 43px;\n line-height: 43px;\n vertical-align: middle;\n padding: 0 12px;\n }\n\n .swal2-input[type=\"file\"] {\n font-size: 20px;\n }\n\n .swal2-input[type=\"number\"] {\n max-width: 150px;\n }\n\n .swal2-textarea {\n height: 108px;\n padding: 12px;\n }\n\n .swal2-select {\n color: #555;\n font-size: inherit;\n padding: 5px 10px;\n min-width: 40%;\n max-width: 100%;\n }\n\n .swal2-radio {\n border: 0;\n\n label:not(:first-child) {\n margin-left: 20px;\n }\n\n input, span {\n vertical-align: middle;\n }\n\n input {\n margin: 0 3px 0 0;\n }\n }\n\n .swal2-checkbox {\n color: #555;\n input, span {\n vertical-align: middle;\n }\n }\n\n .swal2-validationerror {\n background-color: #f1f1f1;\n margin: 0 -20px;\n overflow: hidden;\n padding: 10px;\n color: #797979;\n font-size: 16px;\n font-weight: 300;\n display: none;\n\n &::before {\n content: \"!\";\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: rgb(234, 125, 125);\n color: white;\n line-height: 24px;\n text-align: center;\n margin-right: 10px;\n }\n }\n}\n\n.swal2-icon {\n $red: #f27474;\n $orange: #f8bb86;\n $cyan: #3fc3ee;\n $blue: #c9dae1;\n $green: #a5dc86;\n\n width: 80px;\n height: 80px;\n border: 4px solid #808080;\n border-radius: 50%;\n margin: 20px auto 30px;\n padding: 0;\n position: relative;\n box-sizing: content-box;\n cursor: default;\n\n /* http://stackoverflow.com/a/4407335/1331425 */\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &.swal2-error {\n border-color: $red;\n\n .x-mark {\n position: relative;\n display: block;\n }\n\n .line {\n position: absolute;\n height: 5px;\n width: 47px;\n background-color: $red;\n display: block;\n top: 37px;\n border-radius: 2px;\n\n &.left {\n transform: rotate(45deg);\n left: 17px;\n }\n\n &.right {\n transform: rotate(-45deg);\n right: 16px;\n }\n }\n }\n\n &.swal2-warning {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: $orange;\n border-color: $orange;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-info {\n font-family: \"Open Sans\", sans-serif;\n color: $cyan;\n border-color: $cyan;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-question {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: $blue;\n border-color: $blue;\n font-size: 60px;\n line-height: 80px;\n text-align: center;\n }\n\n &.swal2-success {\n border-color: $green;\n\n &::before,\n &::after { // Emulate moving circular line\n content: '';\n border-radius: 50%;\n position: absolute;\n width: 60px;\n height: 120px;\n background: $white;\n transform: rotate(45deg);\n }\n\n &::before {\n border-radius: 120px 0 0 120px;\n top: -7px;\n left: -33px;\n\n transform: rotate(-45deg);\n transform-origin: 60px 60px;\n }\n\n &::after {\n border-radius: 0 120px 120px 0;\n top: -11px;\n left: 30px;\n\n transform: rotate(-45deg);\n transform-origin: 0 60px;\n }\n\n .placeholder { // Ring\n width: 80px;\n height: 80px;\n border: 4px solid rgba($green, .2);\n border-radius: 50%;\n box-sizing: content-box;\n\n position: absolute;\n left: -4px;\n top: -4px;\n z-index: 2;\n }\n\n .fix { // Hide corners left from animation\n width: 7px;\n height: 90px;\n background-color: $white;\n\n position: absolute;\n left: 28px;\n top: 8px;\n z-index: 1;\n\n transform: rotate(-45deg);\n }\n\n .line {\n height: 5px;\n background-color: $green;\n display: block;\n border-radius: 2px;\n\n position: absolute;\n z-index: 2;\n\n &.tip {\n width: 25px;\n\n left: 14px;\n top: 46px;\n\n transform: rotate(45deg);\n }\n\n &.long {\n width: 47px;\n\n right: 8px;\n top: 38px;\n\n transform: rotate(-45deg);\n }\n }\n }\n}\n\n.swal2-progresssteps {\n $lightblue: #add8e6;\n $blue: #3085d6;\n\n font-weight: 600;\n margin: 0 0 20px;\n padding: 0;\n\n li {\n display: inline-block;\n position: relative;\n }\n\n .swal2-progresscircle {\n background: $blue;\n border-radius: 2em;\n color: $white;\n height: 2em;\n line-height: 2em;\n text-align: center;\n width: 2em;\n z-index: 20;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:last-child {\n margin-right: 0;\n }\n\n &.swal2-activeprogressstep {\n background: $blue;\n\n ~ .swal2-progresscircle {\n background: $lightblue;\n }\n\n ~ .swal2-progressline {\n background: $lightblue;\n }\n }\n }\n\n .swal2-progressline {\n background: $blue;\n height: 0.4em;\n margin: 0 -1px;\n z-index: 10;\n }\n}\n\n\n/* github.com/limonte/sweetalert2/issues/268 */\n[class^=swal2] {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n// Animations\n\n@mixin keyframes($animation-name) {\n @keyframes #{$animation-name} {\n @content;\n }\n}\n\n@mixin animation($str) {\n animation: #{$str};\n}\n\n\n// Modal animation\n\n@include keyframes(showSweetAlert) {\n 0% {\n transform: scale(.7);\n }\n\n 45% {\n transform: scale(1.05);\n }\n\n 80% {\n transform: scale(.95);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n@include keyframes(hideSweetAlert) {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n\n 100% {\n transform: scale(.5);\n opacity: 0;\n }\n}\n\n.show-swal2 {\n @include animation('showSweetAlert 0.3s');\n\n &.no-animation {\n @include animation('none');\n }\n}\n\n.hide-swal2 {\n @include animation('hideSweetAlert 0.15s forwards');\n\n &.no-animation {\n @include animation('none');\n }\n}\n\n\n\n// Success icon animation\n\n@include keyframes(animate-success-tip) {\n 0% {\n width: 0;\n left: 1px;\n top: 19px;\n }\n\n 54% {\n width: 0;\n left: 1px;\n top: 19px;\n }\n\n 70% {\n width: 50px;\n left: -8px;\n top: 37px;\n }\n\n 84% {\n width: 17px;\n left: 21px;\n top: 48px;\n }\n\n 100% {\n width: 25px;\n left: 14px;\n top: 45px;\n }\n}\n\n@include keyframes(animate-success-long) {\n 0% {\n width: 0;\n right: 46px;\n top: 54px;\n }\n\n 65% {\n width: 0;\n right: 46px;\n top: 54px;\n }\n\n 84% {\n width: 55px;\n right: 0;\n top: 35px;\n }\n\n 100% {\n width: 47px;\n right: 8px;\n top: 38px;\n }\n}\n\n@include keyframes(rotatePlaceholder) {\n 0% {\n transform: rotate(-45deg);\n }\n\n 5% {\n transform: rotate(-45deg);\n }\n\n 12% {\n transform: rotate(-405deg);\n }\n\n 100% {\n transform: rotate(-405deg);\n }\n}\n\n.animate-success-tip {\n @include animation('animate-success-tip 0.75s');\n}\n\n.animate-success-long {\n @include animation('animate-success-long 0.75s');\n}\n\n.swal2-icon.swal2-success.animate::after {\n @include animation('rotatePlaceholder 4.25s ease-in');\n}\n\n\n// Error icon animation\n\n@include keyframes(animate-error-icon) {\n 0% {\n transform: rotateX(100deg);\n opacity: 0;\n }\n\n 100% {\n transform: rotateX(0deg);\n opacity: 1;\n }\n}\n\n.animate-error-icon {\n @include animation('animate-error-icon 0.5s');\n}\n\n@include keyframes(animate-x-mark) {\n 0% {\n transform: scale(.4);\n margin-top: 26px;\n opacity: 0;\n }\n\n 50% {\n transform: scale(.4);\n margin-top: 26px;\n opacity: 0;\n }\n\n 80% {\n transform: scale(1.15);\n margin-top: -6px;\n }\n\n 100% {\n transform: scale(1);\n margin-top: 0;\n opacity: 1;\n }\n}\n\n.animate-x-mark {\n @include animation('animate-x-mark 0.5s');\n}\n\n@include keyframes(pulse-warning) {\n 0% {\n border-color: #f8d486;\n }\n\n 100% {\n border-color: #f8bb86;\n }\n}\n\n.pulse-warning {\n @include animation('pulse-warning 0.75s infinite alternate');\n}\n\n@include keyframes(rotate-loading) {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n","@import \"./node_modules/sweetalert2/src/sweetalert2\";\n\n.swal2-modal button {\n margin-right: 8px;\n}\n","ul.messenger {\n margin: 0;\n padding: 0;\n}\nul.messenger > li {\n list-style: none;\n margin: 0;\n padding: 0;\n}\nul.messenger.messenger-empty {\n display: none;\n}\nul.messenger .messenger-message {\n overflow: hidden;\n *zoom: 1;\n}\nul.messenger .messenger-message.messenger-hidden {\n display: none;\n}\nul.messenger .messenger-message .messenger-phrase, ul.messenger .messenger-message .messenger-actions a {\n padding-right: 5px;\n}\nul.messenger .messenger-message .messenger-actions {\n float: right;\n}\nul.messenger .messenger-message .messenger-actions a {\n cursor: pointer;\n text-decoration: underline;\n}\nul.messenger .messenger-message ul, ul.messenger .messenger-message ol {\n margin: 10px 18px 0;\n}\nul.messenger.messenger-fixed {\n position: fixed;\n z-index: 10000;\n}\nul.messenger.messenger-fixed .messenger-message {\n min-width: 0;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nul.messenger.messenger-fixed .message .messenger-actions {\n float: left;\n}\nul.messenger.messenger-fixed.messenger-on-top {\n top: 20px;\n}\nul.messenger.messenger-fixed.messenger-on-bottom {\n bottom: 20px;\n}\nul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 50%;\n width: 600px;\n margin-left: -300px;\n}\n@media (max-width: 960px) {\n ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {\n left: 10%;\n width: 80%;\n margin-left: 0px;\n }\n}\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right {\n right: 20px;\n left: auto;\n}\nul.messenger.messenger-fixed.messenger-on-top.messenger-on-left, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left {\n left: 20px;\n margin-left: 0px;\n}\nul.messenger.messenger-fixed.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-left {\n width: 350px;\n}\nul.messenger.messenger-fixed.messenger-on-right .messenger-actions, ul.messenger.messenger-fixed.messenger-on-left .messenger-actions {\n float: left;\n}\nul.messenger .messenger-spinner {\n display: none;\n}\n\n@-webkit-keyframes ui-spinner-rotate-right {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n\n 25% {\n -webkit-transform: rotate(180deg);\n }\n\n 50% {\n -webkit-transform: rotate(180deg);\n }\n\n 75% {\n -webkit-transform: rotate(360deg);\n }\n\n 100% {\n -webkit-transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes ui-spinner-rotate-left {\n 0% {\n -webkit-transform: rotate(0deg);\n }\n\n 25% {\n -webkit-transform: rotate(0deg);\n }\n\n 50% {\n -webkit-transform: rotate(180deg);\n }\n\n 75% {\n -webkit-transform: rotate(180deg);\n }\n\n 100% {\n -webkit-transform: rotate(360deg);\n }\n}\n\n@-moz-keyframes ui-spinner-rotate-right {\n 0% {\n -moz-transform: rotate(0deg);\n }\n\n 25% {\n -moz-transform: rotate(180deg);\n }\n\n 50% {\n -moz-transform: rotate(180deg);\n }\n\n 75% {\n -moz-transform: rotate(360deg);\n }\n\n 100% {\n -moz-transform: rotate(360deg);\n }\n}\n\n@-moz-keyframes ui-spinner-rotate-left {\n 0% {\n -moz-transform: rotate(0deg);\n }\n\n 25% {\n -moz-transform: rotate(0deg);\n }\n\n 50% {\n -moz-transform: rotate(180deg);\n }\n\n 75% {\n -moz-transform: rotate(180deg);\n }\n\n 100% {\n -moz-transform: rotate(360deg);\n }\n}\n\n@keyframes ui-spinner-rotate-right {\n 0% {\n transform: rotate(0deg);\n }\n\n 25% {\n transform: rotate(180deg);\n }\n\n 50% {\n transform: rotate(180deg);\n }\n\n 75% {\n transform: rotate(360deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes ui-spinner-rotate-left {\n 0% {\n transform: rotate(0deg);\n }\n\n 25% {\n transform: rotate(0deg);\n }\n\n 50% {\n transform: rotate(180deg);\n }\n\n 75% {\n transform: rotate(180deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.messenger-spinner {\n position: relative;\n border-radius: 100%;\n}\nul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {\n display: block;\n}\n.messenger-spinner .messenger-spinner-side {\n width: 50%;\n height: 100%;\n overflow: hidden;\n position: absolute;\n}\n.messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n border-radius: 999px;\n position: absolute;\n width: 100%;\n height: 100%;\n -webkit-animation-iteration-count: infinite;\n -moz-animation-iteration-count: infinite;\n -ms-animation-iteration-count: infinite;\n -o-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n -webkit-animation-timing-function: linear;\n -moz-animation-timing-function: linear;\n -ms-animation-timing-function: linear;\n -o-animation-timing-function: linear;\n animation-timing-function: linear;\n}\n.messenger-spinner .messenger-spinner-side-left {\n left: 0;\n}\n.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill {\n left: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-left;\n -moz-animation-name: ui-spinner-rotate-left;\n -ms-animation-name: ui-spinner-rotate-left;\n -o-animation-name: ui-spinner-rotate-left;\n animation-name: ui-spinner-rotate-left;\n -webkit-transform-origin: 0 50%;\n -moz-transform-origin: 0 50%;\n -ms-transform-origin: 0 50%;\n -o-transform-origin: 0 50%;\n transform-origin: 0 50%;\n}\n.messenger-spinner .messenger-spinner-side-right {\n left: 50%;\n}\n.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill {\n left: -100%;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n -webkit-animation-name: ui-spinner-rotate-right;\n -moz-animation-name: ui-spinner-rotate-right;\n -ms-animation-name: ui-spinner-rotate-right;\n -o-animation-name: ui-spinner-rotate-right;\n animation-name: ui-spinner-rotate-right;\n -webkit-transform-origin: 100% 50%;\n -moz-transform-origin: 100% 50%;\n -ms-transform-origin: 100% 50%;\n -o-transform-origin: 100% 50%;\n transform-origin: 100% 50%;\n}\n\nul.messenger-theme-air {\n -moz-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n user-select: none;\n font-family: \"Raleway\", sans-serif;\n}\nul.messenger-theme-air .messenger-message {\n -webkit-transition: background-color 0.4s;\n -moz-transition: background-color 0.4s;\n -o-transition: background-color 0.4s;\n transition: background-color 0.4s;\n -webkit-border-radius: 5px;\n -moz-border-radius: 5px;\n -ms-border-radius: 5px;\n -o-border-radius: 5px;\n border-radius: 5px;\n -webkit-box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n -moz-box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n box-shadow: inset 0 0 0 1px white, inset 0 2px white, 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px rgba(0, 0, 0, 0.2);\n border: 0px;\n background-color: white;\n position: relative;\n margin-bottom: 1em;\n font-size: 13px;\n color: #666666;\n font-weight: 500;\n padding: 10px 30px 11px 46px;\n}\nul.messenger-theme-air .messenger-message:hover {\n background-color: white;\n}\nul.messenger-theme-air .messenger-message .messenger-close {\n position: absolute;\n top: 0px;\n right: 0px;\n color: #888888;\n opacity: 1;\n font-weight: bold;\n display: block;\n font-size: 20px;\n line-height: 20px;\n padding: 8px 10px 7px 7px;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\nul.messenger-theme-air .messenger-message .messenger-close:hover {\n color: #444444;\n}\nul.messenger-theme-air .messenger-message .messenger-close:active {\n color: #222222;\n}\nul.messenger-theme-air .messenger-message .messenger-actions {\n float: none;\n margin-top: 10px;\n}\nul.messenger-theme-air .messenger-message .messenger-actions a {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.05);\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n -ms-border-radius: 4px;\n -o-border-radius: 4px;\n border-radius: 4px;\n text-decoration: none;\n display: inline-block;\n padding: 10px;\n color: #888888;\n margin-right: 10px;\n padding: 3px 10px 5px;\n text-transform: capitalize;\n}\nul.messenger-theme-air .messenger-message .messenger-actions a:hover {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1), inset 0px 1px rgba(255, 255, 255, 0.15);\n color: #444444;\n}\nul.messenger-theme-air .messenger-message .messenger-actions a:active {\n -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n -moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.18), inset 0px 1px rgba(0, 0, 0, 0.05);\n background: rgba(0, 0, 0, 0.04);\n color: #444444;\n}\nul.messenger-theme-air .messenger-message .messenger-actions .messenger-phrase {\n display: none;\n}\nul.messenger-theme-air .messenger-message .messenger-message-inner:before {\n -webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n -moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n -webkit-border-radius: 50%;\n -moz-border-radius: 50%;\n -ms-border-radius: 50%;\n -o-border-radius: 50%;\n border-radius: 50%;\n position: absolute;\n left: 17px;\n display: block;\n content: \" \";\n top: 50%;\n margin-top: -8px;\n height: 13px;\n width: 13px;\n z-index: 20;\n}\nul.messenger-theme-air .messenger-message.alert-success .messenger-message-inner:before {\n background-color: #5fca4a;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 20s;\n -moz-animation-duration: 20s;\n -ms-animation-duration: 20s;\n -o-animation-duration: 20s;\n animation-duration: 20s;\n opacity: 1;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner {\n width: 24px;\n height: 24px;\n background: transparent;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {\n background: #dd6a45;\n -webkit-animation-duration: 600s;\n -moz-animation-duration: 600s;\n -ms-animation-duration: 600s;\n -o-animation-duration: 600s;\n animation-duration: 600s;\n opacity: 1;\n}\nul.messenger-theme-air .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {\n content: \"\";\n background: white;\n position: absolute;\n width: 19px;\n height: 19px;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n display: block;\n}\nul.messenger-theme-air .messenger-message.alert-error .messenger-message-inner:before {\n background-color: #dd6a45;\n}\nul.messenger-theme-air .messenger-message.alert-info .messenger-message-inner:before {\n background-color: #61c4b8;\n}\nul.messenger-theme-air .messenger-spinner {\n display: block;\n position: absolute;\n left: 12px;\n top: 50%;\n margin-top: -13px;\n z-index: 999;\n height: 24px;\n width: 24px;\n z-index: 10;\n}\n","@charset \"UTF-8\";\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license - http://opensource.org/licenses/MIT\nCopyright (c) 2015 Daniel Eden\n*/\n\nbody {\n\t-webkit-backface-visibility: hidden; // Addresses a small issue in webkit: https://css-tricks.com/almanac/properties/b/backface-visibility/\n}\n\n.animated {\n \t@include animate-prefixer(animation-duration, $base-duration);\n \t@include animate-prefixer(animation-fill-mode, $base-fill-mode);\n\n\t&.infinite {\n\t animation-iteration-count: $base-iteration-count;\n\t}\n\n\t&.hinge {\n\t @include animate-prefixer(animation-duration, $base-duration * 2);\n\t}\n\n\t&.bounceIn,\n\t&.bounceOut {\n\t @include animate-prefixer(animation-duration, $base-duration * 0.75);\n\t}\n\n\t&.flipOutX,\n\t&.flipOutY {\n\t @include animate-prefixer(animation-duration, $base-duration * 0.75);\n\t}\n}","///////////////////////////////////////////////////////////////////\n// Sass Mixins which will be used by the modules //\n///////////////////////////////////////////////////////////////////\n\n//===============================================================//\n// Automatically add vendor prefixes in one hit //\n//===============================================================//\n// .fadeIn { //\n// @include animate-prefixer(animation, 'fadeIn'); //\n// } //\n//===============================================================//\n// //\n//===============================================================//\n@mixin animate-prefixer($property, $value...) {\n -webkit-#{$property}: unquote('#{$value}');\n #{$property}: unquote('#{$value}');\n}\n//===============================================================//\n// Generate keyframes animations with vendor prefixes in one hit //\n//===============================================================//\n// .fadeIn { //\n// @include animate-prefixer(animation, fadeIn); //\n// } //\n// @include animate-keyframe(fadeIn) { //\n// 0% {opacity: 0;} //\n// 100% {opacity: 1;} //\n// } //\n//===============================================================//\n// Courtesy of @integralist: (twitter.com) //\n//===============================================================//\n\n@mixin animate-keyframe($animation-name) {\n @-webkit-keyframes #{$animation-name} {\n @content;\n }\n\n @keyframes #{$animation-name} {\n @content;\n }\n}\n","/////////////////////////////////////////////////////////\n// Animation Default Settings //\n/////////////////////////////////////////////////////////\n\n\n// Base module settings\n$base-duration\t\t\t\t\t: 1s !default; // used in 1-base module\n$base-origin \t\t\t\t\t: top center !default;\n$base-degrees \t\t\t\t\t: 30deg !default; // used in lightspeed & special modules\n$base-fill-mode\t\t\t\t\t: both !default;\n$base-iteration-count\t\t\t: infinite !default;\n\n$base-timing-function-in\t\t: ease-in !default;\n$base-timing-function-out\t\t: ease-out !default;\n$base-timing-function-in-out\t: ease-in-out !default;\n\n$base-distance\t\t\t\t\t: 10px !default; \t\t// used in fade, shake and bounce modules\n$base-distance-big\t\t\t\t: 1000px !default; // used in fadeBig and bounce modules\n\n\n// Rotate module settings\n$rotate-degrees \t\t\t\t: 90deg !default;\n$rotate-degrees-max \t\t\t: 200deg !default;\n$rotate-origin \t\t\t\t\t: center center !default;\n\n// Flipper module settings\n$flipper-perspective\t\t\t: 400px !default;\n$flipper-translate \t\t\t\t: 150px !default;\n$flipper-degrees \t\t\t\t: 10deg !default;\n$flipper-degrees-max \t\t\t: 90deg !default;\n\n\n// Hinge module settings\n$hinge-origin \t\t\t\t\t: top left !default;\n$hinge-degrees-max \t\t\t\t: 80deg !default;\n$hinge-translate \t\t\t\t: 700px !default;\n\n\n//==================================================================================================//\n// Module loading //\n//==================================================================================================//\n// To include an animation module in the compiled css file, simply set it's attribute below to true //\n// (all modules set to false will not be included) //\n// The idea here is to only load the animations you want to use on a per project basis //\n// This helps keep the compiled css file at its leanest //\n//==================================================================================================//\n// Hugely influenced and inspired by @csswizardry's inuit.css _vars.scss file //\n//==================================================================================================//\n\n$use-all : false !default; // all animations status\n$use-fade : $use-all !default; // all fades\n$use-bounce : $use-all !default; // all bounces\n$use-rotate : $use-all !default; // all rotates\n$use-slide : $use-all !default; // all slide animations\n$use-flipers : $use-all !default; // all flip animations\n$use-light-speed : $use-all !default; // all light speed animations\n$use-attention-seekers : $use-all !default; // all attention seeker animations\n$use-special : $use-all !default; // all special animations\n$use-zoom : $use-all !default; // all zoom animations\n// Fade Enter\n$use-fade-in : $use-fade !default;\n$use-fadeIn \t\t\t:\t$use-fade-in !default;\n$use-fadeInUp \t\t\t:\t$use-fade-in !default;\n$use-fadeInUpBig \t\t:\t$use-fade-in !default;\n$use-fadeInDown \t\t:\t$use-fade-in !default;\n$use-fadeInDownBig \t\t:\t$use-fade-in !default;\n$use-fadeInLeft \t\t:\t$use-fade-in !default;\n$use-fadeInLeftBig \t\t:\t$use-fade-in !default;\n$use-fadeInRight \t\t:\t$use-fade-in !default;\n$use-fadeInRightBig \t:\t$use-fade-in !default;\n\n\n// Fade Exit\n$use-fade-out : $use-fade !default;\n$use-fadeOut\t\t\t: $use-fade-out !default;\n$use-fadeOutUp\t\t\t:\t$use-fade-out !default;\n$use-fadeOutUpBig \t:\t$use-fade-out !default;\n$use-fadeOutDown\t\t:\t$use-fade-out !default;\n$use-fadeOutDownBig \t:\t$use-fade-out !default;\n$use-fadeOutLeft\t\t:\t$use-fade-out !default;\n$use-fadeOutLeftBig \t:\t$use-fade-out !default;\n$use-fadeOutRight\t\t:\t$use-fade-out !default;\n$use-fadeOutRightBig\t:\t$use-fade-out !default;\n\n\n// Bounce Enter\n$use-bounce-in : $use-bounce !default;\n$use-bounceIn\t\t\t:\t$use-bounce-in !default;\n$use-bounceInUp\t\t\t: \t$use-bounce-in !default;\n$use-bounceInDown \t\t: \t$use-bounce-in !default;\n$use-bounceInLeft \t\t: \t$use-bounce-in !default;\n$use-bounceInRight \t\t: \t$use-bounce-in !default;\n\n\n// Bounce Exit\n$use-bounce-out : $use-bounce !default;\n$use-bounceOut\t\t\t:\t$use-bounce-out !default;\n$use-bounceOutUp\t\t: \t$use-bounce-out !default;\n$use-bounceOutDown \t\t: \t$use-bounce-out !default;\n$use-bounceOutLeft \t\t: \t$use-bounce-out !default;\n$use-bounceOutRight \t: \t$use-bounce-out !default;\n\n\n\n// Rotate Enter\n$use-rotate-in : $use-rotate !default;\n$use-rotateIn \t\t\t:\t$use-rotate-in !default;\n$use-rotateInUpLeft \t: \t$use-rotate-in !default;\n$use-rotateInUpRight \t: \t$use-rotate-in !default;\n$use-rotateInDownLeft \t: \t$use-rotate-in !default;\n$use-rotateInDownRight \t: \t$use-rotate-in !default;\n\n\n// Rotate Exit\n$use-rotate-out : $use-rotate !default;\n$use-rotateOut \t\t\t:\t$use-rotate-out !default;\n$use-rotateOutUpLeft \t: \t$use-rotate-out !default;\n$use-rotateOutUpRight \t: \t$use-rotate-out !default;\n$use-rotateOutDownLeft \t: \t$use-rotate-out !default;\n$use-rotateOutDownRight : \t$use-rotate-out !default;\n\n\n// Slide Enter\n$use-slide-in : $use-slide !default;\n$use-slideIn\t\t\t: $use-slide-in !default;\n$use-slideInUp\t\t\t: $use-slide-in !default;\n$use-slideInDown\t\t: $use-slide-in !default;\n$use-slideInLeft\t\t: $use-slide-in !default;\n$use-slideInRight\t\t: $use-slide-in !default;\n\n// Slide Exit\n$use-slide-out : $use-slide !default;\n$use-slideOut\t\t\t: $use-slide-out !default;\n$use-slideOutUp\t\t\t: $use-slide-out !default;\n$use-slideOutDown\t\t: $use-slide-out !default;\n$use-slideOutLeft\t\t: $use-slide-out !default;\n$use-slideOutRight\t\t: $use-slide-out !default;\n\n// Flippers\n$use-flip\t\t\t\t:\t$use-flipers !default;\n$use-flipInX\t\t\t:\t$use-flipers !default;\n$use-flipInY\t\t\t:\t$use-flipers !default;\n$use-flipOutX\t\t\t:\t$use-flipers !default;\n$use-flipOutY\t\t\t:\t$use-flipers !default;\n\n\n// Lightspeed\n$use-lightSpeedIn \t\t:\t$use-light-speed !default;\n$use-lightSpeedOut \t\t:\t$use-light-speed !default;\n\n\n// Attention Seekers\n$use-bounce\t\t\t\t:\t$use-attention-seekers !default;\n$use-flash\t\t\t\t:\t$use-attention-seekers !default;\n$use-pulse\t\t\t\t:\t$use-attention-seekers !default;\n$use-wiggle\t\t\t\t:\t$use-attention-seekers !default;\n$use-swing\t\t\t\t:\t$use-attention-seekers !default;\n$use-shake\t\t\t\t:\t$use-attention-seekers !default;\n$use-tada\t\t\t\t:\t$use-attention-seekers !default;\n$use-wobble\t\t\t\t:\t$use-attention-seekers !default;\n\n\n// Special\n$use-hinge\t\t\t\t:\t$use-special !default;\n$use-rollIn\t\t\t\t: \t$use-special !default;\n$use-rollOut \t\t\t:\t$use-special !default;\n\n\n// Zoom In\n$use-zoom-in : $use-zoom !default;\n$use-zoomIn \t\t\t:\t$use-zoom-in !default;\n$use-zoomInDown \t\t:\t$use-zoom-in !default;\n$use-zoomInLeft \t\t:\t$use-zoom-in !default;\n$use-zoomInRight \t\t:\t$use-zoom-in !default;\n$use-zoomInUp \t\t\t:\t$use-zoom-in !default;\n\n\n// Zoom Out\n$use-zoom-out : $use-zoom !default;\n$use-zoomOut\t\t\t:\t$use-zoom-out !default;\n$use-zoomOutDown\t\t:\t$use-zoom-out !default;\n$use-zoomOutLeft\t\t:\t$use-zoom-out !default;\n$use-zoomOutRight\t\t:\t$use-zoom-out !default;\n$use-zoomOutUp\t\t\t:\t$use-zoom-out !default;\n","@import \"./node_modules/animate-sass/animate\";\n\nbody {\n -webkit-backface-visibility: hidden; // Addresses a small issue in webkit: http://bit.ly/NEdoDq\n}\n.animated {\n @include animate-prefixer(animation-duration, $base-duration);\n @include animate-prefixer(animation-fill-mode, both);\n\n &.hinge {\n @include animate-prefixer(animation-duration, $base-duration * 2);\n }\n}\n","// Import boostrap variables including default color palette and fonts\n@import \"./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables\";\n\n$bs-datetimepicker-timepicker-font-size: 1.2em !default;\n$bs-datetimepicker-active-bg: $cachet-green !default;\n$bs-datetimepicker-active-color: $btn-primary-color !default;\n$bs-datetimepicker-border-radius: $border-radius-base !default;\n$bs-datetimepicker-btn-hover-bg: $cachet-gray-light !default;\n$bs-datetimepicker-disabled-color: $cachet-gray !default;\n$bs-datetimepicker-alternate-color: $cachet-gray !default;\n$bs-datetimepicker-secondary-border-color: #ccc !default;\n$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default;\n$bs-datetimepicker-primary-border-color: white !default;\n$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default;\n\n.bootstrap-datetimepicker-widget {\n list-style: none;\n\n &.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em;\n\n &.timepicker-sbs {\n @media (min-width: $screen-sm-min) {\n width: 38em;\n }\n\n @media (min-width: $screen-md-min) {\n width: 38em;\n }\n\n @media (min-width: $screen-lg-min) {\n width: 38em;\n }\n }\n\n &:before, &:after {\n content: '';\n display: inline-block;\n position: absolute;\n }\n\n &.bottom {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid $bs-datetimepicker-secondary-border-color;\n border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba;\n top: -7px;\n left: 7px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid $bs-datetimepicker-primary-border-color;\n top: -6px;\n left: 8px;\n }\n }\n\n &.top {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid $bs-datetimepicker-secondary-border-color;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n bottom: -7px;\n left: 6px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid $bs-datetimepicker-primary-border-color;\n bottom: -6px;\n left: 7px;\n }\n }\n\n &.pull-right {\n &:before {\n left: auto;\n right: 6px;\n }\n\n &:after {\n left: auto;\n right: 7px;\n }\n }\n }\n\n .list-unstyled {\n margin: 0;\n }\n\n a[data-action] {\n padding: 6px 0;\n }\n\n a[data-action]:active {\n box-shadow: none;\n }\n\n .timepicker-hour, .timepicker-minute, .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: $bs-datetimepicker-timepicker-font-size;\n margin: 0;\n }\n\n button[data-action] {\n padding: 6px;\n }\n\n .btn[data-action=\"incrementHours\"]::after {\n @extend .sr-only;\n content: \"Increment Hours\";\n }\n\n .btn[data-action=\"incrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Increment Minutes\";\n }\n\n .btn[data-action=\"decrementHours\"]::after {\n @extend .sr-only;\n content: \"Decrement Hours\";\n }\n\n .btn[data-action=\"decrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Decrement Minutes\";\n }\n\n .btn[data-action=\"showHours\"]::after {\n @extend .sr-only;\n content: \"Show Hours\";\n }\n\n .btn[data-action=\"showMinutes\"]::after {\n @extend .sr-only;\n content: \"Show Minutes\";\n }\n\n .btn[data-action=\"togglePeriod\"]::after {\n @extend .sr-only;\n content: \"Toggle AM/PM\";\n }\n\n .btn[data-action=\"clear\"]::after {\n @extend .sr-only;\n content: \"Clear the picker\";\n }\n\n .btn[data-action=\"today\"]::after {\n @extend .sr-only;\n content: \"Set the date to today\";\n }\n\n .picker-switch {\n text-align: center;\n\n &::after {\n @extend .sr-only;\n content: \"Toggle Date and Time Screens\";\n }\n\n td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit;\n\n span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%;\n }\n }\n }\n\n table {\n width: 100%;\n margin: 0;\n\n\n & td,\n & th {\n text-align: center;\n border-radius: $bs-datetimepicker-border-radius;\n }\n\n & th {\n height: 20px;\n line-height: 20px;\n width: 20px;\n\n &.picker-switch {\n width: 145px;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n &.prev::after {\n @extend .sr-only;\n content: \"Previous Month\";\n }\n\n &.next::after {\n @extend .sr-only;\n content: \"Next Month\";\n }\n }\n\n & thead tr:first-child th {\n cursor: pointer;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n }\n\n & td {\n height: 54px;\n line-height: 54px;\n width: 54px;\n\n &.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.day {\n height: 20px;\n line-height: 20px;\n width: 20px;\n }\n\n &.day:hover,\n &.hour:hover,\n &.minute:hover,\n &.second:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n cursor: pointer;\n }\n\n &.old,\n &.new {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.today {\n position: relative;\n\n &:before {\n content: '';\n display: inline-block;\n border: solid transparent;\n border-width: 0 0 7px 7px;\n border-bottom-color: $bs-datetimepicker-active-bg;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n position: absolute;\n bottom: 4px;\n right: 4px;\n }\n }\n\n &.active,\n &.active:hover {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.active.today:before {\n border-bottom-color: #fff;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: $bs-datetimepicker-border-radius;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n\n &.active {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.old {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n }\n }\n }\n\n &.usetwentyfour {\n td.hour {\n height: 27px;\n line-height: 27px;\n }\n }\n}\n\n.input-group.date {\n & .input-group-addon {\n cursor: pointer;\n }\n}\n",".strengthify-wrapper > * {\n -ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n opacity: 0;\n -webkit-transition:all .5s ease-in-out;\n -moz-transition:all .5s ease-in-out;\n transition:all .5s ease-in-out;\n}\n\n.strengthify-wrapper {\n position: relative;\n}\n\n.strengthify-bg, .strengthify-container, .strengthify-wrapper, .strengthify-separator {\n height: 8px;\n}\n\n.strengthify-bg, .strengthify-container {\n display: block;\n position: absolute;\n width: 100%;\n}\n\n.strengthify-bg {\n background-color: #eeeeee;\n}\n\n.strengthify-separator {\n display: inline-block;\n position: absolute;\n background-color: #ffffff;\n width: 2px;\n z-index: 10;\n}\n\n.password-bad {\n background-color: $cachet-red;\n}\n\n.password-medium {\n background-color: $cachet-yellow;\n}\n\n.password-good {\n background-color: $cachet-green;\n}\n",".sortable-chosen {\n border: 1px solid $cachet-gray-light !important;\n background-color: $cachet-base-medium;\n}\n"]} \ No newline at end of file diff --git a/public/build/dist/js/all-6b709e8a99.js b/public/build/dist/js/all-6b709e8a99.js deleted file mode 100644 index 6401e6fdff81..000000000000 --- a/public/build/dist/js/all-6b709e8a99.js +++ /dev/null @@ -1,22 +0,0 @@ -function askConfirmation(e,t){swal({type:"warning",title:"Confirm your action",text:"Are you sure you want to do this?",buttonsStyling:!1,reverseButtons:!0,confirmButtonText:"Yes",confirmButtonClass:"btn btn-lg btn-danger",cancelButtonClass:"btn btn-lg btn-default",showCancelButton:!0,focusCancel:!0}).then(function(){_.isFunction(e)&&e()},function(){_.isFunction(t)&&t()})}if(function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=ae.type(e);return"function"!==n&&!ae.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(ae.isFunction(t))return ae.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return ae.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(me.test(t))return ae.filter(t,e,n);t=ae.filter(t,e)}return ae.grep(e,function(e){return Z.call(t,e)>-1!==n})}function r(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ae.each(e.match(Me)||[],function(e,n){t[n]=!0}),t}function o(){G.removeEventListener("DOMContentLoaded",o),e.removeEventListener("load",o),ae.ready()}function s(){this.expando=ae.expando+s.uid++}function l(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(Ye,"-$&").toLowerCase(),n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Te.test(n)?ae.parseJSON(n):n)}catch(r){}De.set(e,t,n)}else n=void 0;return n}function u(e,t,n,i){var r,a=1,o=20,s=i?function(){return i.cur()}:function(){return ae.css(e,t,"")},l=s(),u=n&&n[3]||(ae.cssNumber[t]?"":"px"),d=(ae.cssNumber[t]||"px"!==u&&+l)&&Ce.exec(ae.css(e,t));if(d&&d[3]!==u){u=u||d[3],n=n||[],d=+l||1;do a=a||".5",d/=a,ae.style(e,t,d+u);while(a!==(a=s()/l)&&1!==a&&--o)}return n&&(d=+d||+l||0,r=n[1]?d+(n[1]+1)*n[2]:+n[2],i&&(i.unit=u,i.start=d,i.end=r)),r}function d(e,t){var n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ae.nodeName(e,t)?ae.merge([e],n):n}function c(e,t){for(var n=0,i=e.length;n-1)r&&r.push(a);else if(u=ae.contains(a.ownerDocument,a),o=d(f.appendChild(a),"script"),u&&c(o),n)for(h=0;a=o[h++];)Ee.test(a.type||"")&&n.push(a);return f}function f(){return!0}function p(){return!1}function m(){try{return G.activeElement}catch(e){}}function g(e,t,n,i,r,a){var o,s;if("object"==typeof t){"string"!=typeof n&&(i=i||n,n=void 0);for(s in t)g(e,s,n,i,t[s],a);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),r===!1)r=p;else if(!r)return e;return 1===a&&(o=r,r=function(e){return ae().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=ae.guid++)),e.each(function(){ae.event.add(this,t,r,i,n)})}function _(e,t){return ae.nodeName(e,"table")&&ae.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function y(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function v(e){var t=$e.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function b(e,t){var n,i,r,a,o,s,l,u;if(1===t.nodeType){if(Le.hasData(e)&&(a=Le.access(e),o=Le.set(t,a),u=a.events)){delete o.handle,o.events={};for(r in u)for(n=0,i=u[r].length;n1&&"string"==typeof m&&!ie.checkClone&&Be.test(m))return e.each(function(r){var a=e.eq(r);g&&(t[0]=m.call(this,r,a.html())),w(a,t,n,i)});if(f&&(r=h(t,e[0].ownerDocument,!1,e,i),a=r.firstChild,1===r.childNodes.length&&(r=a),a||i)){for(o=ae.map(d(r,"script"),y),s=o.length;c")).appendTo(t.documentElement),t=qe[0].contentDocument,t.write(),t.close(),n=x(e,t),qe.detach()),Ue[e]=n),n}function D(e,t,n){var i,r,a,o,s=e.style;return n=n||Xe(e),o=n?n.getPropertyValue(t)||n[t]:void 0,""!==o&&void 0!==o||ae.contains(e.ownerDocument,e)||(o=ae.style(e,t)),n&&!ie.pixelMarginRight()&&Ge.test(o)&&Je.test(t)&&(i=s.width,r=s.minWidth,a=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=n.width,s.width=i,s.minWidth=r,s.maxWidth=a),void 0!==o?o+"":o}function T(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function Y(e){if(e in it)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=nt.length;n--;)if(e=nt[n]+t,e in it)return e}function S(e,t,n){var i=Ce.exec(t);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):t}function C(e,t,n,i,r){for(var a=n===(i?"border":"content")?4:"width"===t?1:0,o=0;a<4;a+=2)"margin"===n&&(o+=ae.css(e,n+He[a],!0,r)),i?("content"===n&&(o-=ae.css(e,"padding"+He[a],!0,r)),"margin"!==n&&(o-=ae.css(e,"border"+He[a]+"Width",!0,r))):(o+=ae.css(e,"padding"+He[a],!0,r),"padding"!==n&&(o+=ae.css(e,"border"+He[a]+"Width",!0,r)));return o}function H(e,t,n){var i=!0,r="width"===t?e.offsetWidth:e.offsetHeight,a=Xe(e),o="border-box"===ae.css(e,"boxSizing",!1,a);if(r<=0||null==r){if(r=D(e,t,a),(r<0||null==r)&&(r=e.style[t]),Ge.test(r))return r;i=o&&(ie.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+C(e,t,n||(o?"border":"content"),i,a)+"px"}function A(e,t){for(var n,i,r,a=[],o=0,s=e.length;o=0&&n=0},isPlainObject:function(e){var t;if("object"!==ae.type(e)||e.nodeType||ae.isWindow(e))return!1;if(e.constructor&&!ne.call(e,"constructor")&&!ne.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||ne.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ee[te.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;e=ae.trim(e),e&&(1===e.indexOf("use strict")?(t=G.createElement("script"),t.text=e,G.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(se,"ms-").replace(le,ue)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var i,r=0;if(n(e))for(i=e.length;rw.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[F]=!0,e}function r(e){var t=A.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),i=n.length;i--;)w.attrHandle[n[i]]=t}function o(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return i(function(t){return t=+t,i(function(n,i){for(var r,a=e([],n.length,t),o=a.length;o--;)n[r=a[o]]&&(n[r]=!(i[r]=n[r]))})})}function d(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function c(){}function h(e){for(var t=0,n=e.length,i="";t1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function m(e,n,i){for(var r=0,a=n.length;r-1&&(i[u]=!(o[u]=c))}}else v=g(v===o?v.splice(p,v.length):v),a?a(null,o,v,l):Q.apply(o,v)})}function y(e){for(var t,n,i,r=e.length,a=w.relative[e[0].type],o=a||w.relative[" "],s=a?1:0,l=f(function(e){return e===t},o,!0),u=f(function(e){return ee(t,e)>-1},o,!0),d=[function(e,n,i){var r=!a&&(i||n!==Y)||((t=n).nodeType?l(e,n,i):u(e,n,i));return t=null,r}];s1&&p(d),s>1&&h(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,a=e.length>0,o=function(i,o,s,l,u){var d,c,h,f=0,p="0",m=i&&[],_=[],y=Y,v=i||a&&w.find.TAG("*",u),b=N+=null==y?1:Math.random()||.1,M=v.length;for(u&&(Y=o===A||o||u);p!==M&&null!=(d=v[p]);p++){if(a&&d){for(c=0,o||d.ownerDocument===A||(H(d),s=!P);h=e[c++];)if(h(d,o||A,s)){l.push(d);break}u&&(N=b)}r&&((d=!h&&d)&&f--,i&&m.push(d))}if(f+=p,r&&p!==f){for(c=0;h=n[c++];)h(m,_,o,s);if(i){if(f>0)for(;p--;)m[p]||_[p]||(_[p]=X.call(l));_=g(_)}Q.apply(l,_),u&&!i&&_.length>0&&f+n.length>1&&t.uniqueSort(l)}return u&&(N=b,Y=y),m};return r?i(o):o}var b,M,w,k,x,L,D,T,Y,S,C,H,A,j,P,E,I,O,W,F="sizzle"+1*new Date,R=e.document,N=0,z=0,B=n(),$=n(),V=n(),q=function(e,t){return e===t&&(C=!0),0},U=1<<31,J={}.hasOwnProperty,G=[],X=G.pop,K=G.push,Q=G.push,Z=G.slice,ee=function(e,t){for(var n=0,i=e.length;n+~]|"+ne+")"+ne+"*"),de=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),ce=new RegExp(ae),he=new RegExp("^"+ie+"$"),fe={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,_e=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,ve=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),Me=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},we=function(){H()};try{Q.apply(G=Z.call(R.childNodes),R.childNodes),G[R.childNodes.length].nodeType}catch(ke){Q={apply:G.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}M=t.support={},x=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},H=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:R;return i!==A&&9===i.nodeType&&i.documentElement?(A=i,j=A.documentElement,P=!x(A),(n=A.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",we,!1):n.attachEvent&&n.attachEvent("onunload",we)),M.attributes=r(function(e){return e.className="i",!e.getAttribute("className")}),M.getElementsByTagName=r(function(e){return e.appendChild(A.createComment("")),!e.getElementsByTagName("*").length}),M.getElementsByClassName=ge.test(A.getElementsByClassName),M.getById=r(function(e){return j.appendChild(e).id=F,!A.getElementsByName||!A.getElementsByName(F).length}),M.getById?(w.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&P){var n=t.getElementById(e);return n?[n]:[]}},w.filter.ID=function(e){var t=e.replace(be,Me);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(be,Me);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=M.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):M.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[r++];)1===n.nodeType&&i.push(n);return i}return a},w.find.CLASS=M.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&P)return t.getElementsByClassName(e)},I=[],E=[],(M.qsa=ge.test(A.querySelectorAll))&&(r(function(e){j.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&E.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||E.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||E.push("~="),e.querySelectorAll(":checked").length||E.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||E.push(".#.+[+~]")}),r(function(e){var t=A.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&E.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||E.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),E.push(",.*:")})),(M.matchesSelector=ge.test(O=j.matches||j.webkitMatchesSelector||j.mozMatchesSelector||j.oMatchesSelector||j.msMatchesSelector))&&r(function(e){M.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),I.push("!=",ae)}),E=E.length&&new RegExp(E.join("|")),I=I.length&&new RegExp(I.join("|")),t=ge.test(j.compareDocumentPosition),W=t||ge.test(j.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},q=t?function(e,t){if(e===t)return C=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!M.sortDetached&&t.compareDocumentPosition(e)===n?e===A||e.ownerDocument===R&&W(R,e)?-1:t===A||t.ownerDocument===R&&W(R,t)?1:S?ee(S,e)-ee(S,t):0:4&n?-1:1)}:function(e,t){if(e===t)return C=!0,0;var n,i=0,r=e.parentNode,a=t.parentNode,s=[e],l=[t];if(!r||!a)return e===A?-1:t===A?1:r?-1:a?1:S?ee(S,e)-ee(S,t):0;if(r===a)return o(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;s[i]===l[i];)i++;return i?o(s[i],l[i]):s[i]===R?-1:l[i]===R?1:0},A):A},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==A&&H(e),n=n.replace(de,"='$1']"),M.matchesSelector&&P&&!V[n+" "]&&(!I||!I.test(n))&&(!E||!E.test(n)))try{var i=O.call(e,n);if(i||M.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(r){}return t(n,A,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==A&&H(e),W(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==A&&H(e);var n=w.attrHandle[t.toLowerCase()],i=n&&J.call(w.attrHandle,t.toLowerCase())?n(e,t,!P):void 0;return void 0!==i?i:M.attributes||!P?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,r=0;if(C=!M.detectDuplicates,S=!M.sortStable&&e.slice(0),e.sort(q),C){for(;t=e[r++];)t===e[r]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return S=null,e},k=t.getText=function(e){var t,n="",i=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[i++];)n+=k(t);return n},w=t.selectors={cacheLength:50,createPseudo:i,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,Me),e[3]=(e[3]||e[4]||e[5]||"").replace(be,Me),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ce.test(n)&&(t=L(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,Me).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&B(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(r){var a=t.attr(r,e);return null==a?"!="===n:!n||(a+="","="===n?a===i:"!="===n?a!==i:"^="===n?i&&0===a.indexOf(i):"*="===n?i&&a.indexOf(i)>-1:"$="===n?i&&a.slice(-i.length)===i:"~="===n?(" "+a.replace(oe," ")+" ").indexOf(i)>-1:"|="===n&&(a===i||a.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,r){var a="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,d,c,h,f,p,m=a!==o?"nextSibling":"previousSibling",g=t.parentNode,_=s&&t.nodeName.toLowerCase(),y=!l&&!s,v=!1;if(g){if(a){for(;m;){for(h=t;h=h[m];)if(s?h.nodeName.toLowerCase()===_:1===h.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?g.firstChild:g.lastChild],o&&y){for(h=g,c=h[F]||(h[F]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),u=d[e]||[],f=u[0]===N&&u[1],v=f&&u[2],h=f&&g.childNodes[f];h=++f&&h&&h[m]||(v=f=0)||p.pop();)if(1===h.nodeType&&++v&&h===t){d[e]=[N,f,v];break}}else if(y&&(h=t,c=h[F]||(h[F]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),u=d[e]||[],f=u[0]===N&&u[1],v=f),v===!1)for(;(h=++f&&h&&h[m]||(v=f=0)||p.pop())&&((s?h.nodeName.toLowerCase()!==_:1!==h.nodeType)||!++v||(y&&(c=h[F]||(h[F]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),d[e]=[N,v]),h!==t)););return v-=r,v===i||v%i===0&&v/i>=0}}},PSEUDO:function(e,n){var r,a=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[F]?a(n):a.length>1?(r=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,r=a(e,n),o=r.length;o--;)i=ee(e,r[o]),e[i]=!(t[i]=r[o])}):function(e){return a(e,0,r)}):a}},pseudos:{not:i(function(e){var t=[],n=[],r=D(e.replace(se,"$1"));return r[F]?i(function(e,t,n,i){for(var a,o=r(e,null,i,[]),s=e.length;s--;)(a=o[s])&&(e[s]=!(t[s]=a))}):function(e,i,a){return t[0]=e,r(t,null,a,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(be,Me),function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return he.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,Me).toLowerCase(),function(t){var n;do if(n=P?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===j},focus:function(e){return e===A.activeElement&&(!A.hasFocus||A.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t; -},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[n<0?n+t:n]}),even:u(function(e,t){for(var n=0;n=0;)e.push(i);return e}),gt:u(function(e,t,n){for(var i=n<0?n+t:n;++i2&&"ID"===(o=a[0]).type&&M.getById&&9===t.nodeType&&P&&w.relative[a[1].type]){if(t=(w.find.ID(o.matches[0].replace(be,Me),t)||[])[0],!t)return n;u&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(r=fe.needsContext.test(e)?0:a.length;r--&&(o=a[r],!w.relative[s=o.type]);)if((l=w.find[s])&&(i=l(o.matches[0].replace(be,Me),ye.test(a[0].type)&&d(t.parentNode)||t))){if(a.splice(r,1),e=i.length&&h(a),!e)return Q.apply(n,i),n;break}}return(u||D(e,c))(i,t,!P,n,!t||ye.test(e)&&d(t.parentNode)||t),n},M.sortStable=F.split("").sort(q).join("")===F,M.detectDuplicates=!!C,H(),M.sortDetached=r(function(e){return 1&e.compareDocumentPosition(A.createElement("div"))}),r(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||a("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),M.attributes&&r(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||a("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),r(function(e){return null==e.getAttribute("disabled")})||a(te,function(e,t,n){var i;if(!n)return e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);ae.find=de,ae.expr=de.selectors,ae.expr[":"]=ae.expr.pseudos,ae.uniqueSort=ae.unique=de.uniqueSort,ae.text=de.getText,ae.isXMLDoc=de.isXML,ae.contains=de.contains;var ce=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&ae(e).is(n))break;i.push(e)}return i},he=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},fe=ae.expr.match.needsContext,pe=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,me=/^.[^:#\[\.,]*$/;ae.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?ae.find.matchesSelector(i,e)?[i]:[]:ae.find.matches(e,ae.grep(t,function(e){return 1===e.nodeType}))},ae.fn.extend({find:function(e){var t,n=this.length,i=[],r=this;if("string"!=typeof e)return this.pushStack(ae(e).filter(function(){for(t=0;t1?ae.unique(i):i),i.selector=this.selector?this.selector+" "+e:e,i},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&fe.test(e)?ae(e):e||[],!1).length}});var ge,_e=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ye=ae.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||ge,"string"==typeof e){if(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:_e.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof ae?t[0]:t,ae.merge(this,ae.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:G,!0)),pe.test(i[1])&&ae.isPlainObject(t))for(i in t)ae.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return r=G.getElementById(i[2]),r&&r.parentNode&&(this.length=1,this[0]=r),this.context=G,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):ae.isFunction(e)?void 0!==n.ready?n.ready(e):e(ae):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),ae.makeArray(e,this))};ye.prototype=ae.fn,ge=ae(G);var ve=/^(?:parents|prev(?:Until|All))/,be={children:!0,contents:!0,next:!0,prev:!0};ae.fn.extend({has:function(e){var t=ae(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ae.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?ae.uniqueSort(a):a)},index:function(e){return e?"string"==typeof e?Z.call(ae(e),this[0]):Z.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ae.uniqueSort(ae.merge(this.get(),ae(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ae.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ce(e,"parentNode")},parentsUntil:function(e,t,n){return ce(e,"parentNode",n)},next:function(e){return r(e,"nextSibling")},prev:function(e){return r(e,"previousSibling")},nextAll:function(e){return ce(e,"nextSibling")},prevAll:function(e){return ce(e,"previousSibling")},nextUntil:function(e,t,n){return ce(e,"nextSibling",n)},prevUntil:function(e,t,n){return ce(e,"previousSibling",n)},siblings:function(e){return he((e.parentNode||{}).firstChild,e)},children:function(e){return he(e.firstChild)},contents:function(e){return e.contentDocument||ae.merge([],e.childNodes)}},function(e,t){ae.fn[e]=function(n,i){var r=ae.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=ae.filter(i,r)),this.length>1&&(be[e]||ae.uniqueSort(r),ve.test(e)&&r.reverse()),this.pushStack(r)}});var Me=/\S+/g;ae.Callbacks=function(e){e="string"==typeof e?a(e):ae.extend({},e);var t,n,i,r,o=[],s=[],l=-1,u=function(){for(r=e.once,i=t=!0;s.length;l=-1)for(n=s.shift();++l-1;)o.splice(n,1),n<=l&&l--}),this},has:function(e){return e?ae.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=s=[],n||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},ae.extend({Deferred:function(e){var t=[["resolve","done",ae.Callbacks("once memory"),"resolved"],["reject","fail",ae.Callbacks("once memory"),"rejected"],["notify","progress",ae.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return ae.Deferred(function(n){ae.each(t,function(t,a){var o=ae.isFunction(e[t])&&e[t];r[a[1]](function(){var e=o&&o.apply(this,arguments);e&&ae.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[a[0]+"With"](this===i?n.promise():this,o?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?ae.extend(e,i):i}},r={};return i.pipe=i.then,ae.each(t,function(e,a){var o=a[2],s=a[3];i[a[1]]=o.add,s&&o.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),r[a[0]]=function(){return r[a[0]+"With"](this===r?i:this,arguments),this},r[a[0]+"With"]=o.fireWith}),i.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,i,r=0,a=X.call(arguments),o=a.length,s=1!==o||e&&ae.isFunction(e.promise)?o:0,l=1===s?e:ae.Deferred(),u=function(e,n,i){return function(r){n[e]=this,i[e]=arguments.length>1?X.call(arguments):r,i===t?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(o>1)for(t=new Array(o),n=new Array(o),i=new Array(o);r0||(we.resolveWith(G,[ae]),ae.fn.triggerHandler&&(ae(G).triggerHandler("ready"),ae(G).off("ready"))))}}),ae.ready.promise=function(t){return we||(we=ae.Deferred(),"complete"===G.readyState||"loading"!==G.readyState&&!G.documentElement.doScroll?e.setTimeout(ae.ready):(G.addEventListener("DOMContentLoaded",o),e.addEventListener("load",o))),we.promise(t)},ae.ready.promise();var ke=function(e,t,n,i,r,a,o){var s=0,l=e.length,u=null==n;if("object"===ae.type(n)){r=!0;for(s in n)ke(e,t,s,n[s],!0,a,o)}else if(void 0!==i&&(r=!0,ae.isFunction(i)||(o=!0),u&&(o?(t.call(e,i),t=null):(u=t,t=function(e,t,n){return u.call(ae(e),n)})),t))for(;s-1&&void 0!==n&&De.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){De.remove(this,e)})}}),ae.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=Le.get(e,t),n&&(!i||ae.isArray(n)?i=Le.access(e,t,ae.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=ae.queue(e,t),i=n.length,r=n.shift(),a=ae._queueHooks(e,t),o=function(){ae.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete a.stop,r.call(e,o,a)),!i&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Le.get(e,n)||Le.access(e,n,{empty:ae.Callbacks("once memory").add(function(){Le.remove(e,[t+"queue",n])})})}}),ae.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length",""],thead:[1,"","
          "],col:[2,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],_default:[0,"",""]};Ie.optgroup=Ie.option,Ie.tbody=Ie.tfoot=Ie.colgroup=Ie.caption=Ie.thead,Ie.th=Ie.td;var Oe=/<|&#?\w+;/;!function(){var e=G.createDocumentFragment(),t=e.appendChild(G.createElement("div")),n=G.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ie.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",ie.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var We=/^key/,Fe=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Re=/^([^.]*)(?:\.(.+)|)/;ae.event={global:{},add:function(e,t,n,i,r){var a,o,s,l,u,d,c,h,f,p,m,g=Le.get(e);if(g)for(n.handler&&(a=n,n=a.handler,r=a.selector),n.guid||(n.guid=ae.guid++),(l=g.events)||(l=g.events={}),(o=g.handle)||(o=g.handle=function(t){return"undefined"!=typeof ae&&ae.event.triggered!==t.type?ae.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Me)||[""],u=t.length;u--;)s=Re.exec(t[u])||[],f=m=s[1],p=(s[2]||"").split(".").sort(),f&&(c=ae.event.special[f]||{},f=(r?c.delegateType:c.bindType)||f,c=ae.event.special[f]||{},d=ae.extend({type:f,origType:m,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&ae.expr.match.needsContext.test(r),namespace:p.join(".")},a),(h=l[f])||(h=l[f]=[],h.delegateCount=0,c.setup&&c.setup.call(e,i,p,o)!==!1||e.addEventListener&&e.addEventListener(f,o)),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),r?h.splice(h.delegateCount++,0,d):h.push(d),ae.event.global[f]=!0)},remove:function(e,t,n,i,r){var a,o,s,l,u,d,c,h,f,p,m,g=Le.hasData(e)&&Le.get(e);if(g&&(l=g.events)){for(t=(t||"").match(Me)||[""],u=t.length;u--;)if(s=Re.exec(t[u])||[],f=m=s[1],p=(s[2]||"").split(".").sort(),f){for(c=ae.event.special[f]||{},f=(i?c.delegateType:c.bindType)||f,h=l[f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=a=h.length;a--;)d=h[a],!r&&m!==d.origType||n&&n.guid!==d.guid||s&&!s.test(d.namespace)||i&&i!==d.selector&&("**"!==i||!d.selector)||(h.splice(a,1),d.selector&&h.delegateCount--,c.remove&&c.remove.call(e,d));o&&!h.length&&(c.teardown&&c.teardown.call(e,p,g.handle)!==!1||ae.removeEvent(e,f,g.handle),delete l[f])}else for(f in l)ae.event.remove(e,f+t[u],n,i,!0);ae.isEmptyObject(l)&&Le.remove(e,"handle events")}},dispatch:function(e){e=ae.event.fix(e);var t,n,i,r,a,o=[],s=X.call(arguments),l=(Le.get(this,"events")||{})[e.type]||[],u=ae.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(o=ae.event.handlers.call(this,e,l),t=0;(r=o[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(a=r.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(a.namespace)||(e.handleObj=a,e.data=a.data,i=((ae.event.special[a.origType]||{}).handle||a.handler).apply(r.elem,s),void 0!==i&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,r,a,o=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(i=[],n=0;n-1:ae.find(r,this,null,[l]).length),i[r]&&i.push(a);i.length&&o.push({elem:l,handlers:i})}return s]*)\/>/gi,ze=/\s*$/g;ae.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1>")},clone:function(e,t,n){var i,r,a,o,s=e.cloneNode(!0),l=ae.contains(e.ownerDocument,e);if(!(ie.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ae.isXMLDoc(e)))for(o=d(s),a=d(e),i=0,r=a.length;i0&&c(o,!l&&d(e,"script")),s},cleanData:function(e){for(var t,n,i,r=ae.event.special,a=0;void 0!==(n=e[a]);a++)if(xe(n)){if(t=n[Le.expando]){if(t.events)for(i in t.events)r[i]?ae.event.remove(n,i):ae.removeEvent(n,i,t.handle);n[Le.expando]=void 0}n[De.expando]&&(n[De.expando]=void 0)}}}),ae.fn.extend({domManip:w,detach:function(e){return k(this,e,!0)},remove:function(e){return k(this,e)},text:function(e){return ke(this,function(e){return void 0===e?ae.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return w(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=_(this,e);t.appendChild(e)}})},prepend:function(){return w(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=_(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return w(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return w(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ae.cleanData(d(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ae.clone(this,e,t)})},html:function(e){return ke(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ze.test(e)&&!Ie[(Pe.exec(e)||["",""])[1].toLowerCase()]){e=ae.htmlPrefilter(e);try{for(;n1)},show:function(){return A(this,!0)},hide:function(){return A(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Ae(this)?ae(this).show():ae(this).hide()})}}),ae.Tween=j,j.prototype={constructor:j,init:function(e,t,n,i,r,a){this.elem=e,this.prop=n,this.easing=r||ae.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=a||(ae.cssNumber[n]?"":"px")},cur:function(){var e=j.propHooks[this.prop];return e&&e.get?e.get(this):j.propHooks._default.get(this)},run:function(e){var t,n=j.propHooks[this.prop];return this.options.duration?this.pos=t=ae.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):j.propHooks._default.set(this),this}},j.prototype.init.prototype=j.prototype,j.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ae.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ae.fx.step[e.prop]?ae.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ae.cssProps[e.prop]]&&!ae.cssHooks[e.prop]?e.elem[e.prop]=e.now:ae.style(e.elem,e.prop,e.now+e.unit)}}},j.propHooks.scrollTop=j.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ae.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ae.fx=j.prototype.init,ae.fx.step={};var rt,at,ot=/^(?:toggle|show|hide)$/,st=/queueHooks$/;ae.Animation=ae.extend(F,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return u(n.elem,e,Ce.exec(t),n),n}]},tweener:function(e,t){ae.isFunction(e)?(t=e,e=["*"]):e=e.match(Me);for(var n,i=0,r=e.length;i1)},removeAttr:function(e){return this.each(function(){ae.removeAttr(this,e)})}}),ae.extend({attr:function(e,t,n){var i,r,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return"undefined"==typeof e.getAttribute?ae.prop(e,t,n):(1===a&&ae.isXMLDoc(e)||(t=t.toLowerCase(),r=ae.attrHooks[t]||(ae.expr.match.bool.test(t)?lt:void 0)),void 0!==n?null===n?void ae.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:(i=ae.find.attr(e,t),null==i?void 0:i))},attrHooks:{type:{set:function(e,t){if(!ie.radioValue&&"radio"===t&&ae.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i,r=0,a=t&&t.match(Me);if(a&&1===e.nodeType)for(;n=a[r++];)i=ae.propFix[n]||n,ae.expr.match.bool.test(n)&&(e[i]=!1),e.removeAttribute(n)}}),lt={set:function(e,t,n){return t===!1?ae.removeAttr(e,n):e.setAttribute(n,n),n}},ae.each(ae.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ut[t]||ae.find.attr;ut[t]=function(e,t,i){var r,a;return i||(a=ut[t],ut[t]=r,r=null!=n(e,t,i)?t.toLowerCase():null,ut[t]=a),r}});var dt=/^(?:input|select|textarea|button)$/i,ct=/^(?:a|area)$/i;ae.fn.extend({prop:function(e,t){return ke(this,ae.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ae.propFix[e]||e]})}}),ae.extend({prop:function(e,t,n){var i,r,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&ae.isXMLDoc(e)||(t=ae.propFix[t]||t,r=ae.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=ae.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||ct.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),ie.optSelected||(ae.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ae.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ae.propFix[this.toLowerCase()]=this});var ht=/[\t\r\n\f]/g;ae.fn.extend({addClass:function(e){var t,n,i,r,a,o,s,l=0;if(ae.isFunction(e))return this.each(function(t){ae(this).addClass(e.call(this,t,R(this)))});if("string"==typeof e&&e)for(t=e.match(Me)||[];n=this[l++];)if(r=R(n),i=1===n.nodeType&&(" "+r+" ").replace(ht," ")){for(o=0;a=t[o++];)i.indexOf(" "+a+" ")<0&&(i+=a+" ");s=ae.trim(i),r!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,i,r,a,o,s,l=0;if(ae.isFunction(e))return this.each(function(t){ae(this).removeClass(e.call(this,t,R(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Me)||[];n=this[l++];)if(r=R(n),i=1===n.nodeType&&(" "+r+" ").replace(ht," ")){for(o=0;a=t[o++];)for(;i.indexOf(" "+a+" ")>-1;)i=i.replace(" "+a+" "," ");s=ae.trim(i),r!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ae.isFunction(e)?this.each(function(n){ae(this).toggleClass(e.call(this,n,R(this),t),t)}):this.each(function(){var t,i,r,a;if("string"===n)for(i=0,r=ae(this),a=e.match(Me)||[];t=a[i++];)r.hasClass(t)?r.removeClass(t):r.addClass(t);else void 0!==e&&"boolean"!==n||(t=R(this),t&&Le.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Le.get(this,"__className__")||""))})},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+R(n)+" ").replace(ht," ").indexOf(t)>-1)return!0;return!1}});var ft=/\r/g,pt=/[\x20\t\r\n\f]+/g;ae.fn.extend({val:function(e){var t,n,i,r=this[0];{if(arguments.length)return i=ae.isFunction(e),this.each(function(n){var r;1===this.nodeType&&(r=i?e.call(this,n,ae(this).val()):e,null==r?r="":"number"==typeof r?r+="":ae.isArray(r)&&(r=ae.map(r,function(e){return null==e?"":e+""})),t=ae.valHooks[this.type]||ae.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))});if(r)return t=ae.valHooks[r.type]||ae.valHooks[r.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:(n=r.value,"string"==typeof n?n.replace(ft,""):null==n?"":n)}}}),ae.extend({valHooks:{option:{get:function(e){var t=ae.find.attr(e,"value");return null!=t?t:ae.trim(ae.text(e)).replace(pt," ")}},select:{get:function(e){for(var t,n,i=e.options,r=e.selectedIndex,a="select-one"===e.type||r<0,o=a?null:[],s=a?r+1:i.length,l=r<0?s:a?r:0;l-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),ae.each(["radio","checkbox"],function(){ae.valHooks[this]={set:function(e,t){if(ae.isArray(t))return e.checked=ae.inArray(ae(e).val(),t)>-1}},ie.checkOn||(ae.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var mt=/^(?:focusinfocus|focusoutblur)$/;ae.extend(ae.event,{trigger:function(t,n,i,r){var a,o,s,l,u,d,c,h=[i||G],f=ne.call(t,"type")?t.type:t,p=ne.call(t,"namespace")?t.namespace.split("."):[];if(o=s=i=i||G,3!==i.nodeType&&8!==i.nodeType&&!mt.test(f+ae.event.triggered)&&(f.indexOf(".")>-1&&(p=f.split("."),f=p.shift(),p.sort()),u=f.indexOf(":")<0&&"on"+f,t=t[ae.expando]?t:new ae.Event(f,"object"==typeof t&&t),t.isTrigger=r?2:3,t.namespace=p.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:ae.makeArray(n,[t]),c=ae.event.special[f]||{},r||!c.trigger||c.trigger.apply(i,n)!==!1)){if(!r&&!c.noBubble&&!ae.isWindow(i)){for(l=c.delegateType||f,mt.test(l+f)||(o=o.parentNode);o;o=o.parentNode)h.push(o),s=o;s===(i.ownerDocument||G)&&h.push(s.defaultView||s.parentWindow||e)}for(a=0;(o=h[a++])&&!t.isPropagationStopped();)t.type=a>1?l:c.bindType||f,d=(Le.get(o,"events")||{})[t.type]&&Le.get(o,"handle"),d&&d.apply(o,n),d=u&&o[u],d&&d.apply&&xe(o)&&(t.result=d.apply(o,n),t.result===!1&&t.preventDefault());return t.type=f,r||t.isDefaultPrevented()||c._default&&c._default.apply(h.pop(),n)!==!1||!xe(i)||u&&ae.isFunction(i[f])&&!ae.isWindow(i)&&(s=i[u],s&&(i[u]=null),ae.event.triggered=f,i[f](),ae.event.triggered=void 0,s&&(i[u]=s)),t.result}},simulate:function(e,t,n){var i=ae.extend(new ae.Event,n,{type:e,isSimulated:!0});ae.event.trigger(i,null,t)}}),ae.fn.extend({trigger:function(e,t){return this.each(function(){ae.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ae.event.trigger(e,t,n,!0)}}),ae.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){ae.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ae.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ie.focusin="onfocusin"in e,ie.focusin||ae.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ae.event.simulate(t,e.target,ae.event.fix(e))};ae.event.special[t]={setup:function(){var i=this.ownerDocument||this,r=Le.access(i,t);r||i.addEventListener(e,n,!0),Le.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=Le.access(i,t)-1;r?Le.access(i,t,r):(i.removeEventListener(e,n,!0),Le.remove(i,t))}}});var gt=e.location,_t=ae.now(),yt=/\?/;ae.parseJSON=function(e){return JSON.parse(e+"")},ae.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(i){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ae.error("Invalid XML: "+t),n};var vt=/#.*$/,bt=/([?&])_=[^&]*/,Mt=/^(.*?):[ \t]*([^\r\n]*)$/gm,wt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kt=/^(?:GET|HEAD)$/,xt=/^\/\//,Lt={},Dt={},Tt="*/".concat("*"),Yt=G.createElement("a");Yt.href=gt.href,ae.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:gt.href,type:"GET",isLocal:wt.test(gt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Tt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":ae.parseJSON,"text xml":ae.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?B(B(e,ae.ajaxSettings),t):B(ae.ajaxSettings,e)},ajaxPrefilter:N(Lt),ajaxTransport:N(Dt),ajax:function(t,n){function i(t,n,i,s){var u,c,y,v,M,k=n;2!==b&&(b=2,l&&e.clearTimeout(l),r=void 0,o=s||"",w.readyState=t>0?4:0,u=t>=200&&t<300||304===t,i&&(v=$(h,w,i)),v=V(h,v,w,u),u?(h.ifModified&&(M=w.getResponseHeader("Last-Modified"),M&&(ae.lastModified[a]=M),M=w.getResponseHeader("etag"),M&&(ae.etag[a]=M)),204===t||"HEAD"===h.type?k="nocontent":304===t?k="notmodified":(k=v.state,c=v.data,y=v.error,u=!y)):(y=k,!t&&k||(k="error",t<0&&(t=0))),w.status=t,w.statusText=(n||k)+"",u?m.resolveWith(f,[c,k,w]):m.rejectWith(f,[w,k,y]),w.statusCode(_),_=void 0,d&&p.trigger(u?"ajaxSuccess":"ajaxError",[w,h,u?c:y]),g.fireWith(f,[w,k]),d&&(p.trigger("ajaxComplete",[w,h]),--ae.active||ae.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var r,a,o,s,l,u,d,c,h=ae.ajaxSetup({},n),f=h.context||h,p=h.context&&(f.nodeType||f.jquery)?ae(f):ae.event,m=ae.Deferred(),g=ae.Callbacks("once memory"),_=h.statusCode||{},y={},v={},b=0,M="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!s)for(s={};t=Mt.exec(o);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?o:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)_[t]=[_[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||M;return r&&r.abort(t),i(0,t),this}};if(m.promise(w).complete=g.add,w.success=w.done,w.error=w.fail,h.url=((t||h.url||gt.href)+"").replace(vt,"").replace(xt,gt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=ae.trim(h.dataType||"*").toLowerCase().match(Me)||[""],null==h.crossDomain){u=G.createElement("a");try{u.href=h.url,u.href=u.href,h.crossDomain=Yt.protocol+"//"+Yt.host!=u.protocol+"//"+u.host}catch(k){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ae.param(h.data,h.traditional)),z(Lt,h,n,w),2===b)return w;d=ae.event&&h.global,d&&0===ae.active++&&ae.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!kt.test(h.type),a=h.url,h.hasContent||(h.data&&(a=h.url+=(yt.test(a)?"&":"?")+h.data,delete h.data),h.cache===!1&&(h.url=bt.test(a)?a.replace(bt,"$1_="+_t++):a+(yt.test(a)?"&":"?")+"_="+_t++)),h.ifModified&&(ae.lastModified[a]&&w.setRequestHeader("If-Modified-Since",ae.lastModified[a]),ae.etag[a]&&w.setRequestHeader("If-None-Match",ae.etag[a])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",h.contentType),w.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Tt+"; q=0.01":""):h.accepts["*"]);for(c in h.headers)w.setRequestHeader(c,h.headers[c]);if(h.beforeSend&&(h.beforeSend.call(f,w,h)===!1||2===b))return w.abort();M="abort";for(c in{success:1,error:1,complete:1})w[c](h[c]);if(r=z(Dt,h,n,w)){if(w.readyState=1,d&&p.trigger("ajaxSend",[w,h]),2===b)return w;h.async&&h.timeout>0&&(l=e.setTimeout(function(){w.abort("timeout")},h.timeout));try{b=1,r.send(y,i)}catch(k){if(!(b<2))throw k;i(-1,k)}}else i(-1,"No Transport");return w},getJSON:function(e,t,n){return ae.get(e,t,n,"json")},getScript:function(e,t){return ae.get(e,void 0,t,"script")}}),ae.each(["get","post"],function(e,t){ae[t]=function(e,n,i,r){return ae.isFunction(n)&&(r=r||i,i=n,n=void 0),ae.ajax(ae.extend({url:e,type:t,dataType:r,data:n,success:i},ae.isPlainObject(e)&&e))}}),ae._evalUrl=function(e){return ae.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},ae.fn.extend({wrapAll:function(e){var t;return ae.isFunction(e)?this.each(function(t){ae(this).wrapAll(e.call(this,t))}):(this[0]&&(t=ae(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return ae.isFunction(e)?this.each(function(t){ae(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ae(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ae.isFunction(e);return this.each(function(n){ae(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){ae.nodeName(this,"body")||ae(this).replaceWith(this.childNodes)}).end()}}),ae.expr.filters.hidden=function(e){return!ae.expr.filters.visible(e)},ae.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var St=/%20/g,Ct=/\[\]$/,Ht=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;ae.param=function(e,t){var n,i=[],r=function(e,t){t=ae.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=ae.ajaxSettings&&ae.ajaxSettings.traditional),ae.isArray(e)||e.jquery&&!ae.isPlainObject(e))ae.each(e,function(){r(this.name,this.value)});else for(n in e)q(n,e[n],t,r);return i.join("&").replace(St,"+")},ae.fn.extend({serialize:function(){return ae.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ae.prop(this,"elements");return e?ae.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ae(this).is(":disabled")&&jt.test(this.nodeName)&&!At.test(e)&&(this.checked||!je.test(e))}).map(function(e,t){var n=ae(this).val();return null==n?null:ae.isArray(n)?ae.map(n,function(e){return{name:t.name,value:e.replace(Ht,"\r\n")}}):{name:t.name,value:n.replace(Ht,"\r\n")}}).get()}}),ae.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(t){}};var Pt={0:200,1223:204},Et=ae.ajaxSettings.xhr();ie.cors=!!Et&&"withCredentials"in Et,ie.ajax=Et=!!Et,ae.ajaxTransport(function(t){var n,i;if(ie.cors||Et&&!t.crossDomain)return{send:function(r,a){var o,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)s[o]=t.xhrFields[o];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(o in r)s.setRequestHeader(o,r[o]);n=function(e){return function(){n&&(n=i=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?a(0,"error"):a(s.status,s.statusText):a(Pt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),i=s.onerror=n("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&i()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(l){if(n)throw l}},abort:function(){n&&n()}}}),ae.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ae.globalEval(e),e}}}),ae.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ae.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,r){t=ae(" diff --git a/resources/assets/js/components/Setup.vue b/resources/assets/js/components/Setup.vue new file mode 100644 index 000000000000..160dc08d8da2 --- /dev/null +++ b/resources/assets/js/components/Setup.vue @@ -0,0 +1,54 @@ + diff --git a/resources/assets/js/components/dashboard/Dashboard.vue b/resources/assets/js/components/dashboard/Dashboard.vue new file mode 100644 index 000000000000..0d6aa73f8ce9 --- /dev/null +++ b/resources/assets/js/components/dashboard/Dashboard.vue @@ -0,0 +1,26 @@ + diff --git a/resources/assets/js/components/dashboard/InviteTeam.vue b/resources/assets/js/components/dashboard/InviteTeam.vue new file mode 100644 index 000000000000..fcfb203dc374 --- /dev/null +++ b/resources/assets/js/components/dashboard/InviteTeam.vue @@ -0,0 +1,31 @@ + diff --git a/resources/assets/js/components/dashboard/ReportIncident.vue b/resources/assets/js/components/dashboard/ReportIncident.vue new file mode 100644 index 000000000000..4813d7eb1851 --- /dev/null +++ b/resources/assets/js/components/dashboard/ReportIncident.vue @@ -0,0 +1,45 @@ + diff --git a/resources/assets/js/components/dashboard/ReportSchedule.vue b/resources/assets/js/components/dashboard/ReportSchedule.vue new file mode 100644 index 000000000000..406f5a3f31b2 --- /dev/null +++ b/resources/assets/js/components/dashboard/ReportSchedule.vue @@ -0,0 +1,30 @@ + diff --git a/resources/assets/js/components/dashboard/UpdateIncident.vue b/resources/assets/js/components/dashboard/UpdateIncident.vue new file mode 100644 index 000000000000..cc96bcdf928a --- /dev/null +++ b/resources/assets/js/components/dashboard/UpdateIncident.vue @@ -0,0 +1,30 @@ + diff --git a/resources/assets/js/components/status-page/Metric.vue b/resources/assets/js/components/status-page/Metric.vue new file mode 100644 index 000000000000..e4452c8055a6 --- /dev/null +++ b/resources/assets/js/components/status-page/Metric.vue @@ -0,0 +1,198 @@ + + + diff --git a/resources/assets/js/password-strength.js b/resources/assets/js/password-strength.js deleted file mode 100644 index 1471b980a61a..000000000000 --- a/resources/assets/js/password-strength.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Combine jQuery and zxcvbn to create a password strength meter. - * Based on : strengthify https://github.com/kabum/strengthify - */ -(function($) { - $.fn.strengthify = function(paramOptions) { - var me = this, - defaults = { - zxcvbn: 'https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/2.0.2/zxcvbn.min.js' - }, - options = $.extend(defaults, paramOptions); - - // Add elements to the DOM - $('.strengthify-wrapper') - .append('
          ') - .append('
          ') - .append('
          ') - .append('
          ') - .append('
          '); - - $.ajax({ - cache: true, - dataType: 'script', - url: options.zxcvbn - }).done(function() { - me.bind('keyup input', function() { - var password = $(this).val(), - // Hide strengthigy if no input is provided - opacity = (password === '') ? 0 : 1, - // Calculate result - result = zxcvbn(password), - css = '', - // cache jQuery selections - $container = $('.strengthify-container'), - $wrapper = $('.strengthify-wrapper'); - - $wrapper.children().css( - 'opacity', - opacity - ).css( - '-ms-filter', - '"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')"' - ); - - // Style strengthify bar - // possible scores: 0, 1, 2, 3, 4 - switch (result.score) { - case 0: - case 1: - css = 'password-bad'; - break; - case 2: - css = 'password-medium'; - break; - case 3: - case 4: - css = 'password-good'; - break; - } - - $container - .attr('class', css + ' strengthify-container') - // possible scores: 0, 1, 2, 3, 4 - .css( - 'width', - // if score is '0' it will be changed to '1' to - // not hide strengthify if the password is extremely weak - ((result.score === 0 ? 1 : result.score) * 25) + '%' - ); - - // Reset state for empty string password - if (password === '') { - $container.css('width', 0); - } - }); - }); - - return me; - }; -}(jQuery)); diff --git a/resources/assets/sass/_vendors.scss b/resources/assets/sass/_vendors.scss index 43c6abd71713..11049477c7ff 100644 --- a/resources/assets/sass/_vendors.scss +++ b/resources/assets/sass/_vendors.scss @@ -2,8 +2,10 @@ $ionicons-font-path: "../../../fonts" !default; @import "./node_modules/ionicons/scss/ionicons"; +@import "./node_modules/github-markdown-css/github-markdown"; @import "modules/bootstrap"; +@import "plugins/flatpickr"; html { position: relative; diff --git a/resources/assets/sass/dashboard.scss b/resources/assets/sass/dashboard.scss index 4b98accf7ba7..56ec6c5168a4 100644 --- a/resources/assets/sass/dashboard.scss +++ b/resources/assets/sass/dashboard.scss @@ -1,5 +1,8 @@ @import "vendors"; +// Vendors for sDshboard. +@import "./node_modules/jquery-minicolors/jquery.minicolors"; + // Styles for partials @import "dashboard/partials/base"; @import "dashboard/partials/wrapper"; @@ -14,11 +17,10 @@ @import "dashboard/pages/dashboard"; // Styles for plugins +/*! purgecss start ignore */ @import "plugins/jquery.minicolors"; -@import "plugins/github-markdown"; @import "plugins/sweetalert"; @import "plugins/messenger"; @import "plugins/animate"; -@import "plugins/bootstrap-datetimepicker/bootstrap-datetimepicker"; -@import "plugins/password-strength"; @import "plugins/sortable"; +/*! purgecss end ignore */ diff --git a/resources/assets/sass/dashboard/pages/_dashboard.scss b/resources/assets/sass/dashboard/pages/_dashboard.scss index c102e17d896e..018299c933ba 100644 --- a/resources/assets/sass/dashboard/pages/_dashboard.scss +++ b/resources/assets/sass/dashboard/pages/_dashboard.scss @@ -16,4 +16,8 @@ font-size: 18px; } +.list-group-item.group-name:hover { + cursor: pointer; +} + @import "modules/stats"; diff --git a/resources/assets/sass/dashboard/pages/_setup.scss b/resources/assets/sass/dashboard/pages/_setup.scss index c04e7cf50dc3..6bf8718662a3 100644 --- a/resources/assets/sass/dashboard/pages/_setup.scss +++ b/resources/assets/sass/dashboard/pages/_setup.scss @@ -40,6 +40,7 @@ -ms-transition: all 0.2s linear; -o-transition: all 0.2s linear; transition: all 0.2s linear; + z-index: 10; } &.active { diff --git a/resources/assets/sass/dashboard/partials/_content.scss b/resources/assets/sass/dashboard/partials/_content.scss index 683e2ce615c9..fa7ab4c8d92c 100644 --- a/resources/assets/sass/dashboard/partials/_content.scss +++ b/resources/assets/sass/dashboard/partials/_content.scss @@ -8,6 +8,9 @@ body.dashboard { &.header-fixed { margin-top: 60px; } + textarea[name="stylesheet"] { + resize: vertical; + } } .header { position: relative; diff --git a/resources/assets/sass/dashboard/partials/_sidebar.scss b/resources/assets/sass/dashboard/partials/_sidebar.scss index e9cb0db1fddb..84f6cff8b68a 100644 --- a/resources/assets/sass/dashboard/partials/_sidebar.scss +++ b/resources/assets/sass/dashboard/partials/_sidebar.scss @@ -21,6 +21,7 @@ body.dashboard { margin: 0; padding: 0; list-style: none; + padding-bottom: 64px; /* Ensure the sidebar isn't being covered by the bottom links */ .profile { text-align: center; @@ -132,7 +133,7 @@ body.dashboard { @extend .hidden-sm; position: fixed; bottom: 0; - width: 230px; + width: 235px; z-index: 999; ul > li { float: left; diff --git a/resources/assets/sass/modules/_bootstrap.scss b/resources/assets/sass/modules/_bootstrap.scss index 3b24971b688b..5bb97f68612e 100644 --- a/resources/assets/sass/modules/_bootstrap.scss +++ b/resources/assets/sass/modules/_bootstrap.scss @@ -19,33 +19,33 @@ @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/buttons"; // Components -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/component-animations"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/component-animations"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/dropdowns"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/button-groups"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/input-groups"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/navs"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/navbar"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pagination"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pagination"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pager"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/labels"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/badges"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/alerts"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/progress-bars"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/media"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/progress-bars"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/media"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/list-group"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/panels"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/wells"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/close"; // Components w/ JavaScript @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/modals"; @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/tooltip"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/popovers"; -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/carousel"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/popovers"; +// @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/carousel"; // Utility classes @import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/utilities"; diff --git a/resources/assets/sass/modules/_variables.scss b/resources/assets/sass/modules/_variables.scss index 32ab66cb488f..87c774fd579a 100644 --- a/resources/assets/sass/modules/_variables.scss +++ b/resources/assets/sass/modules/_variables.scss @@ -34,6 +34,6 @@ $sidebar-border-shadow: inset 0px -2px 3px rgba(0,0,0,0.25); $sidebar-text-size: 0.9em; $sidebar-text-color: #ffffff; $sidebar-text-active-color: #ffffff; -$sidebar-normal-width: 230px; +$sidebar-normal-width: 235px; $sidebar-phone-width: 75%; $sidebar-active-color: #00695C; diff --git a/resources/assets/sass/plugins/_flatpickr.scss b/resources/assets/sass/plugins/_flatpickr.scss new file mode 100644 index 000000000000..0ad2ad755c86 --- /dev/null +++ b/resources/assets/sass/plugins/_flatpickr.scss @@ -0,0 +1,63 @@ +/*! purgecss start ignore */ +@import "./node_modules/flatpickr/dist/flatpickr"; + +.flatpickr-calendar { + width: auto; + min-width: 293.75px; + padding: rem-calc(10); + &.open { + z-index: 4 !important; + } + .flatpickr-month { + min-height: 30px; + } + .flatpickr-prev-month, + .flatpickr-current-month, + .flatpickr-next-month { + padding: 0; + display: flex !important; + justify-content: center; + align-items: center; + height: 100%; + } + .flatpickr-prev-month, + .flatpickr-next-month { + border-radius: 1rem; + padding: 0.5rem; + &:hover { + background-color: $cachet-gray-light; + svg { + color: rgba(0, 0, 0, 0.9); + fill: rgba(0, 0, 0, 0.9); + } + } + } + .flatpickr-current-month { + .cur-month { + margin-left: 1rem; + &:hover { + background: transparent; + } + } + } + .flatpickr-day { + line-height: 36px; + &:hover { + background-color: $cachet-gray-light; + border-color: $cachet-gray-light; + } + } + .numInputWrapper { + width: 4rem; + margin-left: 0.5rem; + .numInput { + padding: 0; + box-shadow: none; + } + } +} + +.flatpickr-time { + text-align: left; +} +/*! purgecss end ignore */ diff --git a/resources/assets/sass/plugins/_github-markdown.scss b/resources/assets/sass/plugins/_github-markdown.scss deleted file mode 100644 index 42e38eba8cf4..000000000000 --- a/resources/assets/sass/plugins/_github-markdown.scss +++ /dev/null @@ -1,681 +0,0 @@ -@font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); -} - -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - line-height: 1.5; - color: #333; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.5; - word-wrap: break-word; -} - -.markdown-body .pl-c { - color: #969896; -} - -.markdown-body .pl-c1, -.markdown-body .pl-s .pl-v { - color: #0086b3; -} - -.markdown-body .pl-e, -.markdown-body .pl-en { - color: #795da3; -} - -.markdown-body .pl-smi, -.markdown-body .pl-s .pl-s1 { - color: #333; -} - -.markdown-body .pl-ent { - color: #63a35c; -} - -.markdown-body .pl-k { - color: #a71d5d; -} - -.markdown-body .pl-s, -.markdown-body .pl-pds, -.markdown-body .pl-s .pl-pse .pl-s1, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sre, -.markdown-body .pl-sr .pl-sra { - color: #183691; -} - -.markdown-body .pl-v { - color: #ed6a43; -} - -.markdown-body .pl-id { - color: #b52a1d; -} - -.markdown-body .pl-ii { - color: #f8f8f8; - background-color: #b52a1d; -} - -.markdown-body .pl-sr .pl-cce { - font-weight: bold; - color: #63a35c; -} - -.markdown-body .pl-ml { - color: #693a17; -} - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - font-weight: bold; - color: #1d3e81; -} - -.markdown-body .pl-mq { - color: #008080; -} - -.markdown-body .pl-mi { - font-style: italic; - color: #333; -} - -.markdown-body .pl-mb { - font-weight: bold; - color: #333; -} - -.markdown-body .pl-md { - color: #bd2c00; - background-color: #ffecec; -} - -.markdown-body .pl-mi1 { - color: #55a532; - background-color: #eaffea; -} - -.markdown-body .pl-mdr { - font-weight: bold; - color: #795da3; -} - -.markdown-body .pl-mo { - color: #1d3e81; -} - -.markdown-body .octicon { - display: inline-block; - vertical-align: text-top; - fill: currentColor; -} - -.markdown-body a { - background-color: transparent; - -webkit-text-decoration-skip: objects; -} - -.markdown-body a:active, -.markdown-body a:hover { - outline-width: 0; -} - -.markdown-body strong { - font-weight: inherit; -} - -.markdown-body strong { - font-weight: bolder; -} - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { - border-style: none; -} - -.markdown-body svg:not(:root) { - overflow: hidden; -} - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: monospace, monospace; - font-size: 1em; -} - -.markdown-body hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -.markdown-body input { - font: inherit; - margin: 0; -} - -.markdown-body input { - overflow: visible; -} - -.markdown-body [type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -.markdown-body * { - box-sizing: border-box; -} - -.markdown-body input { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -.markdown-body a { - color: #4078c0; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { - text-decoration: underline; -} - -.markdown-body strong { - font-weight: 600; -} - -.markdown-body hr { - height: 0; - margin: 15px 0; - overflow: hidden; - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; -} - -.markdown-body hr::before { - display: table; - content: ""; -} - -.markdown-body hr::after { - display: table; - clear: both; - content: ""; -} - -.markdown-body table { - border-spacing: 0; - border-collapse: collapse; -} - -.markdown-body td, -.markdown-body th { - padding: 0; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body h1 { - font-size: 32px; - font-weight: 600; -} - -.markdown-body h2 { - font-size: 24px; - font-weight: 600; -} - -.markdown-body h3 { - font-size: 20px; - font-weight: 600; -} - -.markdown-body h4 { - font-size: 16px; - font-weight: 600; -} - -.markdown-body h5 { - font-size: 14px; - font-weight: 600; -} - -.markdown-body h6 { - font-size: 12px; - font-weight: 600; -} - -.markdown-body p { - margin-top: 0; - margin-bottom: 10px; -} - -.markdown-body blockquote { - margin: 0; -} - -.markdown-body ul, -.markdown-body ol { - padding-left: 0; - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { - list-style-type: lower-roman; -} - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { - list-style-type: lower-alpha; -} - -.markdown-body dd { - margin-left: 0; -} - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - margin-top: 0; - margin-bottom: 0; - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; -} - -.markdown-body .octicon { - vertical-align: text-bottom; -} - -.markdown-body input { - -webkit-font-feature-settings: "liga" 0; - font-feature-settings: "liga" 0; -} - -.markdown-body::before { - display: table; - content: ""; -} - -.markdown-body::after { - display: table; - clear: both; - content: ""; -} - -.markdown-body>*:first-child { - margin-top: 0 !important; -} - -.markdown-body>*:last-child { - margin-bottom: 0 !important; -} - -.markdown-body a:not([href]) { - color: inherit; - text-decoration: none; -} - -.markdown-body .anchor { - float: left; - padding-right: 4px; - margin-left: -20px; - line-height: 1; -} - -.markdown-body .anchor:focus { - outline: none; -} - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-top: 0; - margin-bottom: 16px; -} - -.markdown-body hr { - height: 0.25em; - padding: 0; - margin: 24px 0; - background-color: #e7e7e7; - border: 0; -} - -.markdown-body blockquote { - padding: 0 1em; - color: #777; - border-left: 0.25em solid #ddd; -} - -.markdown-body blockquote>:first-child { - margin-top: 0; -} - -.markdown-body blockquote>:last-child { - margin-bottom: 0; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font-size: 11px; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 24px; - margin-bottom: 16px; - font-weight: 600; - line-height: 1.25; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - color: #000; - vertical-align: middle; - visibility: hidden; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { - text-decoration: none; -} - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { - visibility: visible; -} - -.markdown-body h1 { - padding-bottom: 0.3em; - font-size: 2em; - border-bottom: 1px solid #eee; -} - -.markdown-body h2 { - padding-bottom: 0.3em; - font-size: 1.5em; - border-bottom: 1px solid #eee; -} - -.markdown-body h3 { - font-size: 1.25em; -} - -.markdown-body h4 { - font-size: 1em; -} - -.markdown-body h5 { - font-size: 0.875em; -} - -.markdown-body h6 { - font-size: 0.85em; - color: #777; -} - -.markdown-body ul, -.markdown-body ol { - padding-left: 2em; -} - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body li>p { - margin-top: 16px; -} - -.markdown-body li+li { - margin-top: 0.25em; -} - -.markdown-body dl { - padding: 0; -} - -.markdown-body dl dt { - padding: 0; - margin-top: 16px; - font-size: 1em; - font-style: italic; - font-weight: bold; -} - -.markdown-body dl dd { - padding: 0 16px; - margin-bottom: 16px; -} - -.markdown-body table { - display: block; - width: 100%; - overflow: auto; -} - -.markdown-body table th { - font-weight: bold; -} - -.markdown-body table th, -.markdown-body table td { - padding: 6px 13px; - border: 1px solid #ddd; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { - background-color: #f8f8f8; -} - -.markdown-body img { - max-width: 100%; - box-sizing: content-box; - background-color: #fff; -} - -.markdown-body code { - padding: 0; - padding-top: 0.2em; - padding-bottom: 0.2em; - margin: 0; - font-size: 85%; - background-color: rgba(0,0,0,0.04); - border-radius: 3px; -} - -.markdown-body code::before, -.markdown-body code::after { - letter-spacing: -0.2em; - content: "\00a0"; -} - -.markdown-body pre { - word-wrap: normal; -} - -.markdown-body pre>code { - padding: 0; - margin: 0; - font-size: 100%; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.markdown-body .highlight { - margin-bottom: 16px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body .highlight pre, -.markdown-body pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f7f7f7; - border-radius: 3px; -} - -.markdown-body pre code { - display: inline; - max-width: auto; - padding: 0; - margin: 0; - overflow: visible; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.markdown-body pre code::before, -.markdown-body pre code::after { - content: normal; -} - -.markdown-body .pl-0 { - padding-left: 0 !important; -} - -.markdown-body .pl-1 { - padding-left: 3px !important; -} - -.markdown-body .pl-2 { - padding-left: 6px !important; -} - -.markdown-body .pl-3 { - padding-left: 12px !important; -} - -.markdown-body .pl-4 { - padding-left: 24px !important; -} - -.markdown-body .pl-5 { - padding-left: 36px !important; -} - -.markdown-body .pl-6 { - padding-left: 48px !important; -} - -.markdown-body .full-commit .btn-outline:not(:disabled):hover { - color: #4078c0; - border: 1px solid #4078c0; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body :checked+.radio-label { - position: relative; - z-index: 1; - border-color: #4078c0; -} - -.markdown-body .task-list-item { - list-style-type: none; -} - -.markdown-body .task-list-item+.task-list-item { - margin-top: 3px; -} - -.markdown-body .task-list-item input { - margin: 0 0.2em 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body hr { - border-bottom-color: #eee; -} diff --git a/resources/assets/sass/plugins/_messenger.scss b/resources/assets/sass/plugins/_messenger.scss index 7202539f19a0..f0bde3db09bf 100644 --- a/resources/assets/sass/plugins/_messenger.scss +++ b/resources/assets/sass/plugins/_messenger.scss @@ -346,7 +346,6 @@ ul.messenger-theme-air .messenger-message .messenger-actions a { border-radius: 4px; text-decoration: none; display: inline-block; - padding: 10px; color: #888888; margin-right: 10px; padding: 3px 10px 5px; @@ -452,7 +451,6 @@ ul.messenger-theme-air .messenger-spinner { left: 12px; top: 50%; margin-top: -13px; - z-index: 999; height: 24px; width: 24px; z-index: 10; diff --git a/resources/assets/sass/plugins/_password-strength.scss b/resources/assets/sass/plugins/_password-strength.scss deleted file mode 100644 index c0f18003d033..000000000000 --- a/resources/assets/sass/plugins/_password-strength.scss +++ /dev/null @@ -1,46 +0,0 @@ -.strengthify-wrapper > * { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - opacity: 0; - -webkit-transition:all .5s ease-in-out; - -moz-transition:all .5s ease-in-out; - transition:all .5s ease-in-out; -} - -.strengthify-wrapper { - position: relative; -} - -.strengthify-bg, .strengthify-container, .strengthify-wrapper, .strengthify-separator { - height: 8px; -} - -.strengthify-bg, .strengthify-container { - display: block; - position: absolute; - width: 100%; -} - -.strengthify-bg { - background-color: #eeeeee; -} - -.strengthify-separator { - display: inline-block; - position: absolute; - background-color: #ffffff; - width: 2px; - z-index: 10; -} - -.password-bad { - background-color: $cachet-red; -} - -.password-medium { - background-color: $cachet-yellow; -} - -.password-good { - background-color: $cachet-green; -} diff --git a/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss b/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss deleted file mode 100644 index 177df94b1aaa..000000000000 --- a/resources/assets/sass/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.scss +++ /dev/null @@ -1,342 +0,0 @@ -// Import boostrap variables including default color palette and fonts -@import "./node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables"; - -$bs-datetimepicker-timepicker-font-size: 1.2em !default; -$bs-datetimepicker-active-bg: $cachet-green !default; -$bs-datetimepicker-active-color: $btn-primary-color !default; -$bs-datetimepicker-border-radius: $border-radius-base !default; -$bs-datetimepicker-btn-hover-bg: $cachet-gray-light !default; -$bs-datetimepicker-disabled-color: $cachet-gray !default; -$bs-datetimepicker-alternate-color: $cachet-gray !default; -$bs-datetimepicker-secondary-border-color: #ccc !default; -$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default; -$bs-datetimepicker-primary-border-color: white !default; -$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default; - -.bootstrap-datetimepicker-widget { - list-style: none; - - &.dropdown-menu { - margin: 2px 0; - padding: 4px; - width: 19em; - - &.timepicker-sbs { - @media (min-width: $screen-sm-min) { - width: 38em; - } - - @media (min-width: $screen-md-min) { - width: 38em; - } - - @media (min-width: $screen-lg-min) { - width: 38em; - } - } - - &:before, &:after { - content: ''; - display: inline-block; - position: absolute; - } - - &.bottom { - &:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid $bs-datetimepicker-secondary-border-color; - border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba; - top: -7px; - left: 7px; - } - - &:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid $bs-datetimepicker-primary-border-color; - top: -6px; - left: 8px; - } - } - - &.top { - &:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-top: 7px solid $bs-datetimepicker-secondary-border-color; - border-top-color: $bs-datetimepicker-secondary-border-color-rgba; - bottom: -7px; - left: 6px; - } - - &:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $bs-datetimepicker-primary-border-color; - bottom: -6px; - left: 7px; - } - } - - &.pull-right { - &:before { - left: auto; - right: 6px; - } - - &:after { - left: auto; - right: 7px; - } - } - } - - .list-unstyled { - margin: 0; - } - - a[data-action] { - padding: 6px 0; - } - - a[data-action]:active { - box-shadow: none; - } - - .timepicker-hour, .timepicker-minute, .timepicker-second { - width: 54px; - font-weight: bold; - font-size: $bs-datetimepicker-timepicker-font-size; - margin: 0; - } - - button[data-action] { - padding: 6px; - } - - .btn[data-action="incrementHours"]::after { - @extend .sr-only; - content: "Increment Hours"; - } - - .btn[data-action="incrementMinutes"]::after { - @extend .sr-only; - content: "Increment Minutes"; - } - - .btn[data-action="decrementHours"]::after { - @extend .sr-only; - content: "Decrement Hours"; - } - - .btn[data-action="decrementMinutes"]::after { - @extend .sr-only; - content: "Decrement Minutes"; - } - - .btn[data-action="showHours"]::after { - @extend .sr-only; - content: "Show Hours"; - } - - .btn[data-action="showMinutes"]::after { - @extend .sr-only; - content: "Show Minutes"; - } - - .btn[data-action="togglePeriod"]::after { - @extend .sr-only; - content: "Toggle AM/PM"; - } - - .btn[data-action="clear"]::after { - @extend .sr-only; - content: "Clear the picker"; - } - - .btn[data-action="today"]::after { - @extend .sr-only; - content: "Set the date to today"; - } - - .picker-switch { - text-align: center; - - &::after { - @extend .sr-only; - content: "Toggle Date and Time Screens"; - } - - td { - padding: 0; - margin: 0; - height: auto; - width: auto; - line-height: inherit; - - span { - line-height: 2.5; - height: 2.5em; - width: 100%; - } - } - } - - table { - width: 100%; - margin: 0; - - - & td, - & th { - text-align: center; - border-radius: $bs-datetimepicker-border-radius; - } - - & th { - height: 20px; - line-height: 20px; - width: 20px; - - &.picker-switch { - width: 145px; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - &.prev::after { - @extend .sr-only; - content: "Previous Month"; - } - - &.next::after { - @extend .sr-only; - content: "Next Month"; - } - } - - & thead tr:first-child th { - cursor: pointer; - - &:hover { - background: $bs-datetimepicker-btn-hover-bg; - } - } - - & td { - height: 54px; - line-height: 54px; - width: 54px; - - &.cw { - font-size: .8em; - height: 20px; - line-height: 20px; - color: $bs-datetimepicker-alternate-color; - } - - &.day { - height: 20px; - line-height: 20px; - width: 20px; - } - - &.day:hover, - &.hour:hover, - &.minute:hover, - &.second:hover { - background: $bs-datetimepicker-btn-hover-bg; - cursor: pointer; - } - - &.old, - &.new { - color: $bs-datetimepicker-alternate-color; - } - - &.today { - position: relative; - - &:before { - content: ''; - display: inline-block; - border: solid transparent; - border-width: 0 0 7px 7px; - border-bottom-color: $bs-datetimepicker-active-bg; - border-top-color: $bs-datetimepicker-secondary-border-color-rgba; - position: absolute; - bottom: 4px; - right: 4px; - } - } - - &.active, - &.active:hover { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - text-shadow: $bs-datetimepicker-text-shadow; - } - - &.active.today:before { - border-bottom-color: #fff; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - span { - display: inline-block; - width: 54px; - height: 54px; - line-height: 54px; - margin: 2px 1.5px; - cursor: pointer; - border-radius: $bs-datetimepicker-border-radius; - - &:hover { - background: $bs-datetimepicker-btn-hover-bg; - } - - &.active { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - text-shadow: $bs-datetimepicker-text-shadow; - } - - &.old { - color: $bs-datetimepicker-alternate-color; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - } - } - } - - &.usetwentyfour { - td.hour { - height: 27px; - line-height: 27px; - } - } -} - -.input-group.date { - & .input-group-addon { - cursor: pointer; - } -} diff --git a/resources/assets/sass/status-page/_status-page.scss b/resources/assets/sass/status-page/_status-page.scss index c6ffdb8626f1..0045eb149394 100644 --- a/resources/assets/sass/status-page/_status-page.scss +++ b/resources/assets/sass/status-page/_status-page.scss @@ -36,6 +36,7 @@ body.status-page { } .tooltip { + background-color: black; .tooltip-inner { padding: 8px 12px; font-size: 14px; @@ -226,6 +227,8 @@ body.status-page { } .panel-heading { + padding-top: 1em; + padding-bottom: 1.4em; strong { font-size: 1.1em; } @@ -423,4 +426,8 @@ body.status-page { } } } + //Display inline the incident update message. + .incident-update-item > p { + display: inline-block; + } } diff --git a/resources/lang/af-ZA/cachet.php b/resources/lang/af-ZA/cachet.php new file mode 100644 index 000000000000..df402fad21cb --- /dev/null +++ b/resources/lang/af-ZA/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operasioneel', + 2 => 'Prestasieprobleme', + 3 => 'Gedeeltelike Onderbreking', + 4 => 'Groot Onderbreking', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Hou Dop', + 4 => 'Opgelos', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Afgelope 12 Uur', + 'weekly' => 'Weekliks', + 'monthly' => 'Maandeliks', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Teken aan', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Bestuur Subskripsies', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Teken Aan', + 'username' => 'Username', + 'email' => 'EPos', + 'password' => 'Wagwoord', + 'success' => 'U rekening is geskep.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Maak toe', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Teken aan', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Tuiste', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Aangaande Hierdie Webwerf', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/af-ZA/dashboard.php b/resources/lang/af-ZA/dashboard.php new file mode 100644 index 000000000000..0171d3256016 --- /dev/null +++ b/resources/lang/af-ZA/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Span', + 'member' => 'Lid', + 'profile' => 'Profiel', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Spanlid bygevoeg.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Instellings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Tema', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Teken In', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Teken Uit', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/af-ZA/forms.php b/resources/lang/af-ZA/forms.php new file mode 100644 index 000000000000..320b27e03198 --- /dev/null +++ b/resources/lang/af-ZA/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'EPos', + 'username' => 'Username', + 'password' => 'Wagwoord', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Kies taal', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'EPos', + 'password' => 'Wagwoord', + '2fauth' => 'Authentication Code', + 'invalid' => 'Ongeldige gebruikernaam of wagwoord', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Komponente', + 'component_status' => 'Component Status', + 'message' => 'Boodskap', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Templaat', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Boodskap', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Templaat', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Beskrywing', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Beskrywing', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Beskrywing', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'EPos', + 'password' => 'Wagwoord', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Teken Aan', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/af-ZA/notifications.php b/resources/lang/af-ZA/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/af-ZA/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/af-ZA/pagination.php b/resources/lang/af-ZA/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/af-ZA/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/af-ZA/setup.php b/resources/lang/af-ZA/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/af-ZA/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/af-ZA/validation.php b/resources/lang/af-ZA/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/af-ZA/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/af/forms.php b/resources/lang/af/forms.php index e37dce2dd6b2..360ec491d852 100644 --- a/resources/lang/af/forms.php +++ b/resources/lang/af/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/ar-SA/cachet.php b/resources/lang/ar-SA/cachet.php new file mode 100644 index 000000000000..ee7f1620c836 --- /dev/null +++ b/resources/lang/ar-SA/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1] النظام يواجه مشاكل|[2,Inf] بعض الأنظمة تواجه مشاكل', + 'major' => '[0,1] النظام يواجه مشاكل أساسية|[2,Inf] بعض الأنظمة تواجه مشاكل أساسية', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/ar-SA/dashboard.php b/resources/lang/ar-SA/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/ar-SA/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/ar-SA/forms.php b/resources/lang/ar-SA/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/ar-SA/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/ar-SA/notifications.php b/resources/lang/ar-SA/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/ar-SA/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ar-SA/pagination.php b/resources/lang/ar-SA/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/ar-SA/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/ar-SA/setup.php b/resources/lang/ar-SA/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/ar-SA/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/ar-SA/validation.php b/resources/lang/ar-SA/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/ar-SA/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ar/forms.php b/resources/lang/ar/forms.php index e37dce2dd6b2..360ec491d852 100644 --- a/resources/lang/ar/forms.php +++ b/resources/lang/ar/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/ca-ES/cachet.php b/resources/lang/ca-ES/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/ca-ES/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/ca-ES/dashboard.php b/resources/lang/ca-ES/dashboard.php new file mode 100644 index 000000000000..0abd74e465ec --- /dev/null +++ b/resources/lang/ca-ES/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Els membres de l\'equip podran afegir i modificar tant components com incidències.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/ca-ES/forms.php b/resources/lang/ca-ES/forms.php new file mode 100644 index 000000000000..68d0be799ee7 --- /dev/null +++ b/resources/lang/ca-ES/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'Heu d\'habilitar les galetes (cookies) per poder iniciar sessió.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Farciment (padding) del banner', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/ca-ES/notifications.php b/resources/lang/ca-ES/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/ca-ES/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ca-ES/pagination.php b/resources/lang/ca-ES/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/ca-ES/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/ca-ES/setup.php b/resources/lang/ca-ES/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/ca-ES/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/ca-ES/validation.php b/resources/lang/ca-ES/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/ca-ES/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ca/forms.php b/resources/lang/ca/forms.php index df729dabd213..16f3923af044 100644 --- a/resources/lang/ca/forms.php +++ b/resources/lang/ca/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nom', 'template' => 'Plantilla', - 'twig' => 'Les plantilles d\'incidents poden fer ús del llenguatge de plantilles Twig.', + 'twig' => 'Les plantilles d\'incidents poden fer ús del llenguatge de plantilles Twig.', ], ], diff --git a/resources/lang/cs-CZ/cachet.php b/resources/lang/cs-CZ/cachet.php new file mode 100644 index 000000000000..6a3d3b46dfc7 --- /dev/null +++ b/resources/lang/cs-CZ/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Poslední aktualizace :timestamp', + 'status' => [ + 0 => 'Neznámý', + 1 => 'V provozu', + 2 => 'Problémy s výkonem', + 3 => 'Částečný výpadek', + 4 => 'Závažný výpadek', + ], + 'group' => [ + 'other' => 'Ostatní služby', + ], + 'select_all' => 'Označit vše', + 'deselect_all' => 'Odznačit vše', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Nejsou nahlášeny žádné incidenty', + 'past' => 'Minulé incidenty', + 'stickied' => 'Připnuté incidenty', + 'scheduled' => 'Plánovaná odstávka', + 'scheduled_at' => ', plánované na :timestamp', + 'posted' => 'Přidáno :timestamp od :username', + 'posted_at' => 'Publikováno :timestamp', + 'status' => [ + 1 => 'Zkoumání příčiny', + 2 => 'Problém identifikován', + 3 => 'Sledování', + 4 => 'Opraveno', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Blížící se', + 1 => 'Probíhající', + 2 => 'Hotovo', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1] Služba je v provozu|[2,*]Všechny služby fungují bez problémů', + 'bad' => '[0,1] Služba má problémy|[2,Inf] Některá ze služeb má problémy', + 'major' => '[0,1] Služba má celkový výpadek|[2,Inf] Některé služby mají celkový výpadek', + ], + + 'api' => [ + 'regenerate' => 'Obnovit API klíč', + 'revoke' => 'Zrušit API klíč', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Během poslední hodiny', + 'hourly' => 'Posledních 12 hodin', + 'weekly' => 'Týden', + 'monthly' => 'Měsíc', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Přihlaste se změnám stavu a aktualizacím incidentů', + 'unsubscribe' => 'Odhlásit odběr', + 'button' => 'Přihlásit', + 'manage_subscription' => 'Spravovat odběry', + 'manage' => [ + 'notifications' => 'Oznámení', + 'notifications_for' => 'Spravujte oznámení pro', + 'no_subscriptions' => 'Aktuálně jsi přihlášen(a) ke všem upozorněním.', + 'update_subscription' => 'Aktualizovat odběry', + 'my_subscriptions' => 'Aktuálně jsi přihlášen(a) k následujícím upozorněním.', + 'manage_at_link' => 'Spravovat odběry na :link', + ], + 'email' => [ + 'manage_subscription' => 'Poslali jsme Vám e-mail, prosím klikněte na odkaz pro správu odběru', + 'subscribe' => 'Přihlásit se k zasílání upozornění e-mailem.', + 'subscribed' => 'Proběhlo přihlášení k e-mailovým upozorněním, potvrďte ho prosím na vašem e-mailu.', + 'updated-subscribe' => 'Úspěšně jste aktualizovali své odběry.', + 'verified' => 'E-mail pro zasílání upozornění byl ověřen. Děkujeme!', + 'manage' => 'Spravovat e-mailové odběry', + 'unsubscribe' => 'Odhlásit z odběru e-mailových upozornění.', + 'unsubscribed' => 'Odběr e-mailových upozornění byl zrušen.', + 'failure' => 'Došlo k chybě při nastavení odběru e-mailů.', + 'already-subscribed' => 'Nelze přihlásit k odběru :email, protože je již přihlášen.', + ], + ], + + 'signup' => [ + 'title' => 'Registrovat se', + 'username' => 'Uživatelské jméno', + 'email' => 'E-mail', + 'password' => 'Heslo', + 'success' => 'Tvůj účet byl vytvořen.', + 'failure' => 'Něco je špatně, nelze se registrovat.', + ], + + 'system' => [ + 'update' => 'Je k dispozici nová verze Cachet. Jak provést update najdeš zde!', + ], + + // Modal + 'modal' => [ + 'close' => 'Zavřít', + 'subscribe' => [ + 'title' => 'Přihlásit se k odběru upozornění', + 'body' => 'Zadej svůj email pro odběr upozornění této služby. Pokud již odebíráš upozornění, budeš nadále dostávat emaily pro tuto službu.', + 'button' => 'Přihlásit', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Podrobnosti a aktuální informace o událost :name, ke které došlo :date', + 'schedule' => 'Podrobnosti o plánované údržbě :name od :startDate', + 'subscribe' => 'Přihlaste se k odběru :app, abyste obdrželi aktualizace o událostech a plánované údržbě', + 'overview' => 'Držte krok s nejnovějšími aktualizacemi od: app.', + ], + ], + + // Other + 'home' => 'Hlavní stránka', + 'powered_by' => 'Vytvořeno pomocí Cachet.', + 'timezone' => 'Časová zóna je :timezone.', + 'about_this_site' => 'O tomto webu', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Kanál stavů', + +]; diff --git a/resources/lang/cs-CZ/dashboard.php b/resources/lang/cs-CZ/dashboard.php new file mode 100644 index 000000000000..14b725e1d9f6 --- /dev/null +++ b/resources/lang/cs-CZ/dashboard.php @@ -0,0 +1,304 @@ + 'Řídicí panel', + 'writeable_settings' => 'Nelze zapisovat do složky nastavení Cachet. Ujistěte se, že web server může zapisovat do ./bootstrap/cachet.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidenty & Plán odstávek', + 'incidents' => 'Incidenty', + 'logged' => '{0}Nejsou hlášeny žádné incidenty, dobrá práce.|[1]Zapsali jste jeden incident.|[2,*]Nahlásili jste :count incidentů.', + 'incident-create-template' => 'Vytvořit šablonu', + 'incident-templates' => 'Šablony incidentů', + 'updates' => [ + 'title' => 'Aktualizace incidentu :incident', + 'count' => '{0}žádné aktualizace |[1]jedna aktualizace |[2]dvě aktualizace | [3, *] Několik aktualizací', + 'add' => [ + 'title' => 'Vytvořit novou zprávu k události', + 'success' => 'Vaše aktualizace incidentu byla vytvořena.', + 'failure' => 'Při aktualizaci incidentu se něco pokazilo.', + ], + 'edit' => [ + 'title' => 'Editovat aktualizace incidentu', + 'success' => 'Událost byla aktualizována.', + 'failure' => 'Při aktualizaci incidentu se něco pokazilo', + ], + ], + 'reported_by' => 'Nahlášeno :timestamp od :user', + 'add' => [ + 'title' => 'Nahlásit incident', + 'success' => 'Incident byl přidán.', + 'failure' => 'Došlo k chybě při přidávání události, opakujte akci.', + ], + 'edit' => [ + 'title' => 'Upravit incident', + 'success' => 'Incident aktualizován.', + 'failure' => 'Došlo k chybě při editaci události, opakujte akci.', + ], + 'delete' => [ + 'success' => 'Událost byla odstraněna a už se nebude zobrazovat na stavové stránce.', + 'failure' => 'Událost se nepodařilo smazat, opakujte akci.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Šablony incidentů', + 'add' => [ + 'title' => 'Vytvořit šablonu incidentu', + 'message' => 'Měli byste přidat šablonu události.', + 'success' => 'Byla vytvořena nová šablona události.', + 'failure' => 'Se šablonou události se něco pokazilo.', + ], + 'edit' => [ + 'title' => 'Upravit šablonu', + 'success' => 'Šablona události byla aktualizována.', + 'failure' => 'Při aktualizaci šablony incidentu se něco pokazilo', + ], + 'delete' => [ + 'success' => 'Šablona události byla smazána.', + 'failure' => 'Šablonu události se nepodařilo smazat, opakujte akci.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Plánovaná odstávka', + 'logged' => '{0}Žádná údržba není v plánu, dobrá práce.|[1]Naplánovali jste jednu údržbu.|[2,*]Jsou v plánu :count údržby.', + 'scheduled_at' => 'Naplánováno na :timestamp', + 'add' => [ + 'title' => 'Přidat plánovanou odstávku', + 'success' => 'Odstávka byla přidána.', + 'failure' => 'Něco se pokazilo při přidávání odstávky, zkus to znova.', + ], + 'edit' => [ + 'title' => 'Upravit naplánovanou odstávku', + 'success' => 'Odstávka byla aktualizovaná!', + 'failure' => 'Něco se pokazilo při úpravě odstávky, zkus to znova.', + ], + 'delete' => [ + 'success' => 'Plánovaná odstávka byla smazána a nebude se zobrazovat na hlavní stránce.', + 'failure' => 'Plánovaná odstávka nemohla být smazána, zkus to znova.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Služby', + 'component_statuses' => 'Stavy služeb', + 'listed_group' => 'Seskupeno podle :name', + 'add' => [ + 'title' => 'Přidat službu', + 'message' => 'Měli byste přidat službu.', + 'success' => 'Služba vytvořena.', + 'failure' => 'Něco se pokazilo se skupinou služby, zkus to znova.', + ], + 'edit' => [ + 'title' => 'Upravit službu', + 'success' => 'Služba byla aktualizována.', + 'failure' => 'Něco se pokazilo se skupinou služby, zkus to znova.', + ], + 'delete' => [ + 'success' => 'Služba byla smazána!', + 'failure' => 'Služba nemůže být odstraněna, opakujte akci.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Skupina služeb|Skupiny služeb', + 'no_components' => 'Můžete přidat skupinu služeb.', + 'add' => [ + 'title' => 'Přidat skupinu služeb', + 'success' => 'Skupina služeb byla přidána.', + 'failure' => 'Něco se pokazilo se skupinou služby, zkus to znova.', + ], + 'edit' => [ + 'title' => 'Upravit skupinu komponent', + 'success' => 'Skupina služeb byla aktualizována.', + 'failure' => 'Něco se pokazilo se skupinou služby, zkus to znova.', + ], + 'delete' => [ + 'success' => 'Skupina služeb byla smazána!', + 'failure' => 'Skupina komponent nemohla být smazána, zkus to znova.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metriky', + 'add' => [ + 'title' => 'Vytvořit metriku', + 'message' => 'Měli byste přidat metriku.', + 'success' => 'Metrika vytvořena.', + 'failure' => 'Něco se pokazilo s metrikou, zkus to znova.', + ], + 'edit' => [ + 'title' => 'Upravit metriku', + 'success' => 'Metrika aktualizována.', + 'failure' => 'Něco se pokazilo s metrikou, zkus to znova.', + ], + 'delete' => [ + 'success' => 'Měření bylo smazáno a už se nebude zobrazovat na stavové stránce.', + 'failure' => 'Měření nemohlo být odstraněno, opakujte akci.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Odběratelé', + 'description' => 'Pokud dojde ke vzniku incidentu nebo služby, odběratelé obdrží aktualizace e-mailem.', + 'description_disabled' => 'Chcete-li použít tuto funkci, potřebujete povolit uživatelům registraci pro oznámení.', + 'verified' => 'Ověřeno', + 'not_verified' => 'Neověřeno', + 'subscriber' => ': e-mail, přihlášen: datum', + 'no_subscriptions' => 'Přihlášeno k zasílání všech aktualizací', + 'global' => 'Globálně odebírané', + 'add' => [ + 'title' => 'Přidat nového odběratele', + 'success' => 'Odběratel přidán.', + 'failure' => 'Něco se pokazilo při přidávání odběratele, opakujte akci.', + 'help' => 'Zadejte každého odběratele na nový řádek.', + ], + 'edit' => [ + 'title' => 'Aktualizovat odeběratele', + 'success' => 'Odběratel aktualizován.', + 'failure' => 'Něco se pokazilo při úpravě odběratele, zkus to znova.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Tým', + 'member' => 'Člen', + 'profile' => 'Profil', + 'description' => 'Členové týmu budou schopni přidat nebo upravit komponenty a incidenty.', + 'add' => [ + 'title' => 'Přidat nového člena týmu', + 'success' => 'Nový člen týmu byl přidán.', + 'failure' => 'Člena týmu se nezdařilo přidat, opakujte akci.', + ], + 'edit' => [ + 'title' => 'Aktualizovat profil', + 'success' => 'Profil byl aktualizován.', + 'failure' => 'Něco se pokazilo při aktualizaci profilu, zkus to znova.', + ], + 'delete' => [ + 'success' => 'Člen týmu byl smazán a již nebude mít přístup do řídícího panelu!', + 'failure' => 'Člena týmu se nezdařilo přidat, opakujte akci.', + ], + 'invite' => [ + 'title' => 'Pozvat nového člena týmu', + 'success' => 'Pozvánka byla odeslána', + 'failure' => 'Pozvánka nemohla být odeslána, zkus to znova.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Nastavení', + 'app-setup' => [ + 'app-setup' => 'Nastavení aplikace', + 'images-only' => 'Nahrány mohou být pouze obrázky.', + 'too-big' => 'Soubor, který nahráváte, je příliš velký. Nahrajte obrázek menší než :velikost', + ], + 'analytics' => [ + 'analytics' => 'Monitoring přístupů', + ], + 'log' => [ + 'log' => 'Záznamy', + ], + 'localization' => [ + 'localization' => 'Lokální nastavení', + ], + 'customization' => [ + 'customization' => 'Vlastní nastavení', + 'header' => 'Vlastní hlavička HTML', + 'footer' => 'Vlastní zápatí HTML', + ], + 'mail' => [ + 'mail' => 'E-Mail', + 'test' => 'Vyzkoušet', + 'email' => [ + 'subject' => 'Testovací oznámení z Cachet', + 'body' => 'Toto je testovací oznámení z Cachet.', + ], + ], + 'security' => [ + 'security' => 'Zabezpečení', + 'two-factor' => 'Uživatelé bez dvoufaktorového ověřování', + ], + 'stylesheet' => [ + 'stylesheet' => 'Šablona stylů', + ], + 'theme' => [ + 'theme' => 'Nastavení vzhledu', + ], + 'edit' => [ + 'success' => 'Nastavení uložena.', + 'failure' => 'Nastavení nelze uložit.', + ], + 'credits' => [ + 'credits' => 'Autoři', + 'contributors' => 'Přispěvatelé', + 'license' => 'Cachet je open-sourcový projekt pod BSD-3-licencí, vydávaný Alt Three Services Limited.', + 'backers-title' => 'Podporovatelé a sponzoři', + 'backers' => 'Pokud chcete podpořit další vývoj aplikace, běžte se podívat na kampaň Cachet Patreon.', + 'thank-you' => 'Děkujeme každému z :count přispěvatelů.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Přihlášení', + 'logged_in' => 'Jste přihlášeni.', + 'welcome' => 'Vítejte zpátky!', + 'two-factor' => 'Zadejte prosím váš token.', + ], + + // Sidebar footer + 'help' => 'Nápověda', + 'status_page' => 'Stavová stránka', + 'logout' => 'Odhlásit', + + // Notifications + 'notifications' => [ + 'notifications' => 'Oznámení', + 'awesome' => 'Vynikající.', + 'whoops' => 'Jejda.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Podpořit Cachet', + 'support_subtitle' => 'Mrkněte na náš Patreon page!', + 'news' => 'Poslední novinky', + 'news_subtitle' => 'Získat nejnovější aktualizace', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Vítej na tvé nové Status stránce, :username!', + 'message' => 'Vaše stavová stránka je téměř připravena! Možná budete chtít upravit další nastavení', + 'close' => 'Přejít rovnou do řídícího panelu', + 'steps' => [ + 'component' => 'Vytvoření komponent', + 'incident' => 'Vytvoření incidentů', + 'customize' => 'Přizpůsobit', + 'team' => 'Přidat uživatele', + 'api' => 'Vygenerovat API token', + 'two-factor' => 'Dvoufaktorové ověření', + ], + ], + +]; diff --git a/resources/lang/cs-CZ/forms.php b/resources/lang/cs-CZ/forms.php new file mode 100644 index 000000000000..364e9fc81cea --- /dev/null +++ b/resources/lang/cs-CZ/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'E-mail', + 'username' => 'Uživatelské jméno', + 'password' => 'Heslo', + 'site_name' => 'Název webu', + 'site_domain' => 'Doména webu', + 'site_timezone' => 'Vyberte vaše časové pásmo', + 'site_locale' => 'Vyberte svůj jazyk', + 'enable_google2fa' => 'Povolit dvoufaktorové ověřování Google', + 'cache_driver' => 'Ovladač cache', + 'queue_driver' => 'Řadič fronty', + 'session_driver' => 'Ovladač sezení', + 'mail_driver' => 'Ovladač pro e-mail', + 'mail_host' => 'Host pro Mail', + 'mail_address' => 'Adresa Mailu', + 'mail_username' => 'Uživatelské jméno pro Mail účet', + 'mail_password' => 'Heslo pro Mail účet', + ], + + // Login form fields + 'login' => [ + 'login' => 'Uživatelské jméno nebo e-mail', + 'email' => 'E-mail', + 'password' => 'Heslo', + '2fauth' => 'Ověřovací kód', + 'invalid' => 'Nesprávné uživatelské jméno nebo heslo', + 'invalid-token' => 'Neplatný token', + 'cookies' => 'Pro přihlášení je třeba povolit soubory cookie.', + 'rate-limit' => 'Překročen limit.', + 'remember_me' => 'Zůstat přihlášený', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Jméno', + 'status' => 'Stav', + 'component' => 'Komponenta', + 'component_status' => 'Stavy služeb', + 'message' => 'Zpráva', + 'message-help' => 'Můžete také použít Markdown.', + 'occurred_at' => 'Kdy došlo k incidentu?', + 'notify_subscribers' => 'Oznámit odběratelům?', + 'notify_disabled' => 'Z důvodu plánované údržby budou oznámení o tomto incidentu nebo jeho součástech potlačena.', + 'visibility' => 'Viditelnost incidentu', + 'stick_status' => 'Připnout událost', + 'stickied' => 'Připnuté', + 'not_stickied' => 'Nepřipnuté', + 'public' => 'Viditelné veřejnosti', + 'logged_in_only' => 'Viditelné pouze pro přihlášené uživatele', + 'templates' => [ + 'name' => 'Jméno', + 'template' => 'Šablona', + 'twig' => 'Šablony pro incidenty mohou používat šablonovací jazyk Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Jméno', + 'status' => 'Stav', + 'message' => 'Zpráva', + 'message-help' => 'Můžete také použít Markdown.', + 'scheduled_at' => 'Na kdy je naplánovaná údržba?', + 'completed_at' => 'Kdy bude údržba hotová?', + 'templates' => [ + 'name' => 'Jméno', + 'template' => 'Šablona', + 'twig' => 'Šablony pro incidenty mohou používat šablonovací jazyk Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Jméno', + 'status' => 'Stav', + 'group' => 'Skupina', + 'description' => 'Popis', + 'link' => 'Odkaz', + 'tags' => 'Štítky', + 'tags-help' => 'Oddělené čárkou.', + 'enabled' => 'Je služba povolena?', + + 'groups' => [ + 'name' => 'Jméno', + 'collapsing' => 'Rozbalit nebo sbalit možnosti', + 'visible' => 'Vždy rozbalené', + 'collapsed' => 'Sbalit skupinu ve výchozím nastavení', + 'collapsed_incident' => 'Sbalit skupinu, ale rozšířit, pokud existují problémy', + 'visibility' => 'Viditelnost', + 'visibility_public' => 'Viditelné pro veřejnost', + 'visibility_authenticated' => 'Viditelné pouze pro přihlášené uživatele', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Jméno', + 'description' => 'Popis', + 'start_at' => 'Naplánovat čas spuštění', + 'timezone' => 'Časová zóna', + 'schedule_frequency' => 'Naplánovat frekvenci (ve vteřinách)', + 'completion_latency' => 'Prodleva dokončení (ve vteřinách)', + 'group' => 'Skupina', + 'active' => 'Aktivní?', + 'groups' => [ + 'name' => 'Název skupiny', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Jméno', + 'suffix' => 'Přípona', + 'description' => 'Popis', + 'description-help' => 'Můžete také použít Markdown.', + 'display-chart' => 'Zobrazovat graf na stavové stránce?', + 'default-value' => 'Výchozí hodnota', + 'calc_type' => 'Výpočet metrik', + 'type_sum' => 'Celkem', + 'type_avg' => 'Průměr', + 'places' => 'Počet desetinných míst', + 'default_view' => 'Výchozí zobrazení', + 'threshold' => 'Jak často se mají snímat metrické body?', + 'visibility' => 'Viditelnost', + 'visibility_authenticated' => 'Viditelné přihlášeným uživatelům', + 'visibility_public' => 'Viditelný všem', + 'visibility_hidden' => 'Vždy skrýt', + + 'points' => [ + 'value' => 'Hodnota', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Název webu', + 'site-url' => 'URL adresa webu', + 'display-graphs' => 'Zobrazit grafy na stavové stránce?', + 'about-this-page' => 'O této stránce', + 'days-of-incidents' => 'Kolik dní incidentů zobrazovat?', + 'time_before_refresh' => 'Obnovovací frekvence status stránky (v sekundách)', + 'major_outage_rate' => 'Hlavní doba výpadků (v %)', + 'banner' => 'Obrázek banneru', + 'banner-help' => 'Doručuje se nenahrávat soubory větší než 930 pixelů na šířku', + 'subscribers' => 'Umožnit lidem, aby se přihlašovali k odběru e-mailových upozornění?', + 'suppress_notifications_in_maintenance' => 'Potlačit oznámení dojde-li k události během během času údržby?', + 'skip_subscriber_verification' => 'Přestat ověřovat uživatele? (Pozor na spammery)', + 'automatic_localization' => 'Automaticky lokalizovat stránku do jazyka návštěvníka?', + 'enable_external_dependencies' => 'Povolit závislosti třetích stran (Google písma, Trackery, atd...)', + 'show_timezone' => 'Zobrazit časové pásmo, ve které je zobrazena stavová stránka', + 'only_disrupted_days' => 'Zobrazit na časové ose pouze dny, kdy došlo k incidentu?', + ], + 'analytics' => [ + 'analytics_google' => 'Kód pro Google Analytics', + 'analytics_gosquared' => 'Kód pro GoSquared Analytics', + 'analytics_piwik_url' => 'URL vaší instance Piwik', + 'analytics_piwik_siteid' => 'Id webu Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Časové pásmo webu', + 'site-locale' => 'Jazyk webu', + 'date-format' => 'Formát datumu', + 'incident-date-format' => 'Formát času pro incident', + ], + 'security' => [ + 'allowed-domains' => 'Povolené domény', + 'allowed-domains-help' => 'Oddělené čárkami. Výše uvedené domény jsou ve výchozím nastavení automaticky povoleny.', + 'always-authenticate' => 'Vždy ověřovat', + 'always-authenticate-help' => 'Požadovat přihlášení k zobrazení jakékoli Cachet stránky', + ], + 'stylesheet' => [ + 'custom-css' => 'Vlastní šablona stylů', + ], + 'theme' => [ + 'background-color' => 'Barva pozadí', + 'background-fills' => 'Pozadí výplně (komponenty, incidenty, zápatí)', + 'banner-background-color' => 'Barva pozadí banneru', + 'banner-padding' => 'Odsazení banneru', + 'fullwidth-banner' => 'Povolit banner přes celou obrazovku?', + 'text-color' => 'Barva textu', + 'dashboard-login' => 'Zobrazit tlačítko Řídící panel v zápatí?', + 'reds' => 'Červená (používané pro chyby)', + 'blues' => 'Modrá (používané pro informace)', + 'greens' => 'Zelená (používá se pro vyřešení problémů)', + 'yellows' => 'Žlutá (používá se pro upozornění)', + 'oranges' => 'Oranžová (slouží k oznámení)', + 'metrics' => 'Vyplnění metrik', + 'links' => 'Odkazy', + ], + ], + + 'user' => [ + 'username' => 'Uživatelské jméno', + 'email' => 'E-mail', + 'password' => 'Heslo', + 'api-token' => 'API Token', + 'api-token-help' => 'Přegenerování vašeho API tokenu zabrání současným aplikacím přistupovat ke Cachet.', + 'gravatar' => 'Profilový obrázek si změn na Gravatar.', + 'user_level' => 'Úroveň uživatele', + 'levels' => [ + 'admin' => 'Správce', + 'user' => 'Uživatel', + ], + '2fa' => [ + 'help' => 'Zapnutí dvoufaktorového ověřování zvýší zabezpečení vašeho účtu. Budete muset stáhnout Google Authenticator nebo podobnou aplikaci pro mobilní zařízení. Po přihlášení budete vyzváni k zadání tokenu vygenerovaného aplikací.', + ], + 'team' => [ + 'description' => 'Pozvi uživatele do týmu zadáním emailové adresy.', + 'email' => 'Email #:id', + ], + ], + + 'general' => [ + 'timezone' => 'Vybrat časové pásmo', + ], + + 'seo' => [ + 'title' => 'SEO titulek', + 'description' => 'Popis SEO', + ], + + // Buttons + 'add' => 'Přidat', + 'save' => 'Uložit', + 'update' => 'Aktualizovat', + 'create' => 'Vytvořit', + 'edit' => 'Upravit', + 'delete' => 'Smazat', + 'submit' => 'Potvrdit', + 'cancel' => 'Zrušit', + 'remove' => 'Smazat', + 'invite' => 'Pozvat', + 'signup' => 'Registrovat se', + 'manage_updates' => 'Správa aktualizací', + + // Other + 'optional' => '* Volitelné', +]; diff --git a/resources/lang/cs-CZ/notifications.php b/resources/lang/cs-CZ/notifications.php new file mode 100644 index 000000000000..7da9d8806413 --- /dev/null +++ b/resources/lang/cs-CZ/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Aktualizován stav komponenty', + 'greeting' => 'Stav kompomenty byl aktualizován!', + 'content' => ':name změnil stav z :old_status na :new_status.', + 'action' => 'Zobrazit', + ], + 'slack' => [ + 'title' => 'Aktualizován stav komponenty', + 'content' => ':name změnil stav z :old_status na :new_status.', + ], + 'sms' => [ + 'content' => ':name změnil stav z :old_status na :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nahlášena nová událost', + 'greeting' => 'Nová událost byla nahlášena v :app_name.', + 'content' => 'Událost :name byla nahlášena', + 'action' => 'Zobrazit', + ], + 'slack' => [ + 'title' => 'Událost :name nahlášena', + 'content' => 'Nová událost byla nahlášena v :app_name', + ], + 'sms' => [ + 'content' => 'Nová událost byla nahlášena v :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Událost aktualizována', + 'content' => ':name byl aktualizován', + 'title' => ':name změnil stav na :new_status', + 'action' => 'Zobrazit', + ], + 'slack' => [ + 'title' => ':name byl aktualizován', + 'content' => ':name změnil stav na :new_status', + ], + 'sms' => [ + 'content' => 'Událost :name byla aktualizována', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nový plán vytvořen', + 'content' => ':name bylo naplánováno na :date', + 'title' => 'Nová plánovaná údržba byla vytvořena.', + 'action' => 'Zobrazit', + ], + 'slack' => [ + 'title' => 'Nový plán vytvořen!', + 'content' => ':name bylo naplánováno na :date', + ], + 'sms' => [ + 'content' => ':name bylo naplánováno na :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Potvrďte váš odběr', + 'content' => 'Klikněte pro potvrzení odběru stavové stránky :app_name.', + 'title' => 'Potvrďte svůj odběr stavové stránky :app_name.', + 'action' => 'Ověřit', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Spravovat e-mailové odběry', + 'content' => 'Klikněte pro potvrzení odběru stavové stránky :app_name.', + 'title' => 'Klikněte pro potvrzení odběru stavové stránky :app_name.', + 'action' => 'Spravovat odběry', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping z Cachet!', + 'content' => 'Toto je testovací oznámení z Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Uvnitř najdete pozvánku...', + 'content' => 'Byl jste pozván, abyste se připojil ke stavové stránce :app_name.', + 'title' => 'Jste pozváni, abyste se připojili ke stavové stránce :app_name.', + 'action' => 'Potvrdit', + ], + ], + ], +]; diff --git a/resources/lang/cs-CZ/pagination.php b/resources/lang/cs-CZ/pagination.php new file mode 100644 index 000000000000..f4f458eae98e --- /dev/null +++ b/resources/lang/cs-CZ/pagination.php @@ -0,0 +1,28 @@ + 'Předchozí', + 'next' => 'Další', + +]; diff --git a/resources/lang/cs-CZ/setup.php b/resources/lang/cs-CZ/setup.php new file mode 100644 index 000000000000..311b185cf090 --- /dev/null +++ b/resources/lang/cs-CZ/setup.php @@ -0,0 +1,23 @@ + 'Instalace', + 'title' => 'Instalace Cachet', + 'service_details' => 'Podrobnosti o službě', + 'env_setup' => 'Nastavení prostředí', + 'status_page_setup' => 'Nastavení Stavové stránky', + 'show_support' => 'Zobrazit podporu pro Cachet?', + 'admin_account' => 'Účet správce', + 'complete_setup' => 'Dokončení instalace', + 'completed' => 'Cachet byl úspěšně nakonfigurován!', + 'finish_setup' => 'Přejít na dashboard', +]; diff --git a/resources/lang/cs-CZ/validation.php b/resources/lang/cs-CZ/validation.php new file mode 100644 index 000000000000..43d5e7725796 --- /dev/null +++ b/resources/lang/cs-CZ/validation.php @@ -0,0 +1,122 @@ + 'Je potřeba potvrdit :attribute.', + 'active_url' => ':attribute není platná adresa URL.', + 'after' => ':attribute musí být datum po :date.', + 'alpha' => ':attribute může obsahovat pouze písmena.', + 'alpha_dash' => ':attribute může obsahovat pouze písmena, čísla a pomlčky.', + 'alpha_num' => ':attribute může obsahovat pouze písmena a čísla.', + 'array' => ':attribute musí být textové pole.', + 'before' => ':attribute musí být datum před :date.', + 'between' => [ + 'numeric' => ':attribute musí mít hodnou mezi :min a :max.', + 'file' => ':attribute musí mít velikost v rozmezí :min až :max kilobytů.', + 'string' => ':attribute musí mít délku v rozmezí :min a :max znaků.', + 'array' => ':attribute musí mít mezi :min a :max položkami.', + ], + 'boolean' => ':attribute musí mít hodnotu pravda nebo nepravda.', + 'confirmed' => 'Potvrzení :attribute se neshoduje.', + 'date' => ':attribute není platné datum.', + 'date_format' => ':attribute se neshoduje se správným formátem :format.', + 'different' => ':attribute a :other se musí lišit.', + 'digits' => ':attribute musí obsahovat :digits číslice.', + 'digits_between' => ':attribute musí být v rozmezí :min a :max číslic.', + 'email' => ':attribute musí být platná e-mailová adresa.', + 'exists' => 'Vybraný :attribute je neplatný.', + 'distinct' => ':attribute má duplicitní hodnotu.', + 'filled' => 'Pole :attribute je vyžadováno.', + 'image' => ':attribute musí být obrázek.', + 'in' => 'Vybraný :attribute je neplatný.', + 'in_array' => ':attribute není v :other.', + 'integer' => ':attribute musí být celé číslo.', + 'ip' => ':attribute musí být platná IP adresa.', + 'json' => ': attribute musí být ve formátu JSON.', + 'max' => [ + 'numeric' => ':attribute nesmí být větší než :max.', + 'file' => ':attribute nesmí být větší než :max kb.', + 'string' => ':attribute nesmí být delší než :max znaků.', + 'array' => 'Atribut nesmí mít více než :max položek.', + ], + 'mimes' => ':attribute musí být soubor typu: :values.', + 'min' => [ + 'numeric' => ':attribute musí být alespoň :min.', + 'file' => 'Atribut musí mít alespoň :min kB.', + 'string' => ':attribute musí být dlouhý alespoň :min znaků.', + 'array' => ':attribute musí mít alespoň :min položek.', + ], + 'not_in' => 'Vybraný :attribute je neplatný.', + 'numeric' => 'Pole :attribute musí být číslo.', + 'present' => 'Pole :attribute je vyžadováno.', + 'regex' => 'Formát :attribute je neplatný.', + 'required' => 'Pole :attribute je vyžadováno.', + 'required_if' => 'Pole :attribute je požadováno, když :other je :value.', + 'required_unless' => 'Pole :attribute je požadováno, pokud :other není v :value.', + 'required_with' => 'Pole :attribute je požadováno, když je zadané :values.', + 'required_with_all' => 'Pole :attribute je požadováno, když je zadané :values.', + 'required_without' => 'Pole :attribute je požadováno když :values není k dispozici.', + 'required_without_all' => 'Pole :attribute je požadováno když :values není k dispozici.', + 'same' => ':attribute a: :other se musí shodovat.', + 'size' => [ + 'numeric' => ':attribute musí mít velikost: :size.', + 'file' => 'Atribut musí mít :size kB.', + 'string' => 'Atribut musí mít :size znaků.', + 'array' => ':attribute musí obsahovat :size položek.', + ], + 'string' => ':attribute musí být text.', + 'timezone' => ':attribute musí být platná zóna.', + 'unique' => ':attribute byl už použit.', + 'url' => 'Formát :attribute je neplatný.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'vlastní zpráva', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/cs/forms.php b/resources/lang/cs/forms.php index fd39862d93d9..84af93c8df84 100644 --- a/resources/lang/cs/forms.php +++ b/resources/lang/cs/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Jméno', 'template' => 'Šablona', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/da-DK/cachet.php b/resources/lang/da-DK/cachet.php new file mode 100644 index 000000000000..4b93cc66f96b --- /dev/null +++ b/resources/lang/da-DK/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Sidst opdateret :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Normal', + 2 => 'Hastighedsproblemer', + 3 => 'Nogen udfald', + 4 => 'Store problemer', + ], + 'group' => [ + 'other' => 'Andre komponenter', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Ingen hændelser er rapporteret', + 'past' => 'Tidligere hændelser', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', planlagt til :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Undersøger', + 2 => 'Identificeret', + 3 => 'Overvåger', + 4 => 'Rettet', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Generer en ny API nøgle', + 'revoke' => 'Tilbagekald API nøgle', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Sidste time', + 'hourly' => 'Sidste 12 timer', + 'weekly' => 'Ugentlig', + 'monthly' => 'Månedlig', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Abonner', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifikationer', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Du abonner i øjeblikket på alle opdateringer.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Du abonnere i øjeblikket på følgende opdateringer.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Abonner på email opdateringer.', + 'subscribed' => 'Du er blevet tilmeldt email notifikationer. Vi har sendt dig en bekræftelse på den indtastede email-adresse.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Din tilmelding er nu blevet bekræftet, tak.', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Afmeld email notifikationer.', + 'unsubscribed' => 'Du er nu blevet frameldt vores emailnotifikationer.', + 'failure' => 'Noget gik galt med bekræftelsen.', + 'already-subscribed' => 'Kan ikke abonnere da :email allerede er tilmeldt.', + ], + ], + + 'signup' => [ + 'title' => 'Tilmeld', + 'username' => 'Brugernavn', + 'email' => 'Email', + 'password' => 'Adgangskode', + 'success' => 'Din konto er nu oprettet.', + 'failure' => 'Noget gik galt under tilmeldingen.', + ], + + 'system' => [ + 'update' => 'Der er en nyere version af Cachet tilgængelig. Du kan læse mere om hvordan du opdatere her!', + ], + + // Modal + 'modal' => [ + 'close' => 'Luk', + 'subscribe' => [ + 'title' => 'Abonner på komponent opdateringer', + 'body' => 'Indtast din email adresse for at abonnere på opdateringer angående dette komponent. Hvis du allerede er tilmeldt, vil du modtage emails angående dette komponent.', + 'button' => 'Abonner', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Hold dig opdateret med de seneste opdateringer fra :app.', + ], + ], + + // Other + 'home' => 'Hjem', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Om denne side', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/da-DK/dashboard.php b/resources/lang/da-DK/dashboard.php new file mode 100644 index 000000000000..67bb6687b349 --- /dev/null +++ b/resources/lang/da-DK/dashboard.php @@ -0,0 +1,304 @@ + 'Oversigt', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Opret hændelse', + 'success' => 'Hændelse tilføjet.', + 'failure' => 'Der opstod en fejl i forsøget på at tilføje hændelsen. Prøv venligst igen.', + ], + 'edit' => [ + 'title' => 'Redigér hændelse', + 'success' => 'Hændelse opdateret.', + 'failure' => 'Der opstod en fejl under forsøget på at redigere hændelsen. Prøv venligst igen.', + ], + 'delete' => [ + 'success' => 'Hændelsen er blevet slettet og vil ikke blive vist på din statusside.', + 'failure' => 'Hændelsen kunne ikke slettes. Prøv venligst igen.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Opret hændelses skabelon', + 'message' => 'Create your first incident template.', + 'success' => 'Din nye hændelses skabelon er blevet oprettet.', + 'failure' => 'En fejl er opstået med hændelses skabelonen.', + ], + 'edit' => [ + 'title' => 'Redigér skabelon', + 'success' => 'Hændelses skabelonen er blevet opdateret.', + 'failure' => 'Der opstod en fejl under forsøget på at opdatere hændelses skabelonen', + ], + 'delete' => [ + 'success' => 'Hændelses skabelonen er blevet slettet.', + 'failure' => 'Hændelses skabelonen kunne ikke slettes. Prøv venligst igen.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Planlagt til :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Komponentstatus', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Tilføj komponent', + 'message' => 'Du bør tilføje en komponent.', + 'success' => 'Komponent oprettet.', + 'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.', + ], + 'edit' => [ + 'title' => 'Redigér komponent', + 'success' => 'Komponent opdateret.', + 'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.', + ], + 'delete' => [ + 'success' => 'Komponentet er blevet slettet!', + 'failure' => 'Komponentet kunne ikke slettes. Prøv venligst igen.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Komponentgruppe|Komponentgrupper', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Tilføj komponentgruppe', + 'success' => 'Komponent gruppe tilføjet.', + 'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.', + ], + 'edit' => [ + 'title' => 'Redigér komponentgruppe', + 'success' => 'Komponent gruppe opdateret.', + 'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.', + ], + 'delete' => [ + 'success' => 'Komponent gruppen er blevet slettet!', + 'failure' => 'Komponent gruppen kunne ikke slettes. Prøv venligst igen.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Grafer', + 'add' => [ + 'title' => 'Opret graf', + 'message' => 'Du bør tilføje en graf.', + 'success' => 'Graf oprettet.', + 'failure' => 'Noget gik galt med graffen. Prøv venligst igen.', + ], + 'edit' => [ + 'title' => 'Redigér graf', + 'success' => 'Graf opdateret.', + 'failure' => 'Noget gik galt med graffen. Prøv venligst igen.', + ], + 'delete' => [ + 'success' => 'Grafen er blevet slette og vil ikke længere blive vist på din status side.', + 'failure' => 'Grafen kunne ikke slettes. Prøv venligst igen.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Abonnenter vil modtage notifikationer når hændelser oprettes eller komponenter opdateres.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Bekræftet', + 'not_verified' => 'Ej bekræftet', + 'subscriber' => ':email, abonnerede :date', + 'no_subscriptions' => 'Abonnere på alle opdateringer', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Tilføj abonnent', + 'success' => 'Subscriber added.', + 'failure' => 'Noget gik galt under forsøget på at tilføje en abonnent. Prøv venligst igen.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Redigér abonnent', + 'success' => 'Subscriber updated.', + 'failure' => 'Noget gik galt under forsøget på at redigere abonnenten. Prøv venligst igen.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Brugere', + 'member' => 'Bruger', + 'profile' => 'Profile', + 'description' => 'Brugere kan oprette og rette komponenter og hændelser.', + 'add' => [ + 'title' => 'Tilføj bruger', + 'success' => 'Bruger tilføjet.', + 'failure' => 'Brugeren kunne ikke tilføjes. Prøv venligst igen.', + ], + 'edit' => [ + 'title' => 'Redigér profil', + 'success' => 'Profil opdateret.', + 'failure' => 'Noget gik galt under forsøget på at opdatere profilen. Prøv venligst igen.', + ], + 'delete' => [ + 'success' => 'Slet bruger.', + 'failure' => 'Brugeren kunne ikke tilføjes. Prøv venligst igen.', + ], + 'invite' => [ + 'title' => 'Invite a New Team Member', + 'success' => 'The users invited.', + 'failure' => 'Invitationen kunne ikke sendes. Prøv venligst igen.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Applikationssetup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'Filen du prøvede at uploade er for stort, billet skal være mindre end :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Tilpasning', + 'header' => 'Brugerdefineret header HTML', + 'footer' => 'Brugerdefineret footer html', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Sikkerhed', + 'two-factor' => 'Brugere uden totrinsbekræftelse', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Tema', + ], + 'edit' => [ + 'success' => 'Indstillingerne er gemt.', + 'failure' => 'Indstillingerne kunne ikke gemmes.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Log ind', + 'logged_in' => 'Du er logget ind.', + 'welcome' => 'Velkommen tilbage!', + 'two-factor' => 'Indtast venligst din totrins bekræftelses nøgle.', + ], + + // Sidebar footer + 'help' => 'Hjælp', + 'status_page' => 'Status side', + 'logout' => 'Log ud', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifikationer', + 'awesome' => 'Fantastisk.', + 'whoops' => 'Hov.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Velkommen til din statusside!', + 'message' => 'Din status side er næsten klar! Du ønsker måske at konfigurere disse ekstra indstillinger', + 'close' => 'Til oversigtssiden tak.', + 'steps' => [ + 'component' => 'Opret Komponent', + 'incident' => 'Opret hændelser', + 'customize' => 'Tilpas', + 'team' => 'Tilføj bruger', + 'api' => 'Generer API nøgle', + 'two-factor' => 'Totrinsbekræftelse', + ], + ], + +]; diff --git a/resources/lang/da-DK/forms.php b/resources/lang/da-DK/forms.php new file mode 100644 index 000000000000..3b3ae58e63a2 --- /dev/null +++ b/resources/lang/da-DK/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Brugernavn', + 'password' => 'Adgangskode', + 'site_name' => 'Sidenavn', + 'site_domain' => 'Sidens domæne', + 'site_timezone' => 'Vælg din tidszone', + 'site_locale' => 'Vælg dit sprog', + 'enable_google2fa' => 'Aktiver Googles to-trins bekræftelse', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Brugernavn eller email', + 'email' => 'Email', + 'password' => 'Adgangskode', + '2fauth' => 'Bekræftelseskode', + 'invalid' => 'Ugyldigt brugernavn eller adgangskode', + 'invalid-token' => 'Ugyldig token', + 'cookies' => 'Du skal tillade cookies for at logge ind.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'component' => 'Komponent', + 'component_status' => 'Component Status', + 'message' => 'Besked', + 'message-help' => 'Du kan benytte Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Underret abonnenter', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Hændelses synlighed', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Kan ses af alle', + 'logged_in_only' => 'Kun synlig for brugere der er logget ind', + 'templates' => [ + 'name' => 'Navn', + 'template' => 'Skabelon', + 'twig' => 'Hændelse skabeloner kan gøre brug af Twigs skabelon sprog.', + ], + ], + + 'schedules' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'message' => 'Besked', + 'message-help' => 'Du kan benytte Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Navn', + 'template' => 'Skabelon', + 'twig' => 'Hændelse skabeloner kan gøre brug af Twigs skabelon sprog.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'group' => 'Gruppe', + 'description' => 'Beskrivelse', + 'link' => 'Link', + 'tags' => 'Mærkat', + 'tags-help' => 'Komma adskilt.', + 'enabled' => 'Komponent er aktivt', + + 'groups' => [ + 'name' => 'Navn', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Altid åben', + 'collapsed' => 'Minimer gruppen som standard', + 'collapsed_incident' => 'Minimer gruppen, men hold den åben hvis der er fejl', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Navn', + 'description' => 'Beskrivelse', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Gruppe', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Navn', + 'suffix' => 'Endelse', + 'description' => 'Beskrivelse', + 'description-help' => 'Du kan benytte Markdown.', + 'display-chart' => 'Vis graf på statussiden?', + 'default-value' => 'Standard værdi', + 'calc_type' => 'Beregning af grafer', + 'type_sum' => 'Sum', + 'type_avg' => 'Gennemsnit', + 'places' => 'Antal decimaler', + 'default_view' => 'Standardvisning', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Værdi', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Sidenavn', + 'site-url' => 'Sidens URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'Om', + 'days-of-incidents' => 'Hvor mange dage skal der vises hændelser for?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner billede', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Tillad folk at tilmelde sig email underretninger?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics kode', + 'analytics_gosquared' => 'GoSquared Analytics kode', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Tidszone', + 'site-locale' => 'Sprog på siden', + 'date-format' => 'Datoformat', + 'incident-date-format' => 'Datoformat for hændelser', + ], + 'security' => [ + 'allowed-domains' => 'Tilladte domæner', + 'allowed-domains-help' => 'Komma adskilt. Domænet ovenfor har automatisk adgang.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Tilpasset CSS', + ], + 'theme' => [ + 'background-color' => 'Baggrundsfarve', + 'background-fills' => 'Baggrundsfyld (Komponenter, hændelser og footer)', + 'banner-background-color' => 'Baggrundsfarve bag banneret', + 'banner-padding' => 'Banner Padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Tekstfarve', + 'dashboard-login' => 'Vis oversigtsside ikon i bunden af siden?', + 'reds' => 'Rød (Brugt til fejl)', + 'blues' => 'Blå (Brugt til information)', + 'greens' => 'Grøn (Brugt til success)', + 'yellows' => 'Gul (Brugt til advarsler)', + 'oranges' => 'Orange (Brugt til noter)', + 'metrics' => 'Graffyld', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Brugernavn', + 'email' => 'Email', + 'password' => 'Adgangskode', + 'api-token' => 'API nøgle', + 'api-token-help' => 'Hvis du regenerere din API nøgle vil eksisterende applikationer ikke kunne tilgå API\'et.', + 'gravatar' => 'Ændre dit profilbillede hos Gravatar.', + 'user_level' => 'Brugertype', + 'levels' => [ + 'admin' => 'Administrator', + 'user' => 'Bruger', + ], + '2fa' => [ + 'help' => 'Brug totrinsbekræftelse for større sikkerhed på din konto. Du skal installere Google Authenticator eller en lignende app på din mobile enhed, for at kunne logge ind med nøgler fra appen.', + ], + 'team' => [ + 'description' => 'Inviter brugere, ved at indtaste dere email adresser her.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Tilføj', + 'save' => 'Gem', + 'update' => 'Opdatér', + 'create' => 'Opret', + 'edit' => 'Rediger', + 'delete' => 'Slet', + 'submit' => 'Send', + 'cancel' => 'Afbryd', + 'remove' => 'Fjern', + 'invite' => 'Inviter', + 'signup' => 'Tilmeld', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* ikke påkrævet', +]; diff --git a/resources/lang/da-DK/notifications.php b/resources/lang/da-DK/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/da-DK/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/da-DK/pagination.php b/resources/lang/da-DK/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/da-DK/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/da-DK/setup.php b/resources/lang/da-DK/setup.php new file mode 100644 index 000000000000..7bf6b18a9738 --- /dev/null +++ b/resources/lang/da-DK/setup.php @@ -0,0 +1,23 @@ + 'Opsætning', + 'title' => 'Indstil Cachet', + 'service_details' => 'Tjenestesdetaljer', + 'env_setup' => 'Opsætning af miljø', + 'status_page_setup' => 'Status side opsætning', + 'show_support' => 'Vis støtte til Cachet?', + 'admin_account' => 'Administratorkonto', + 'complete_setup' => 'Gennemfør opsætning', + 'completed' => 'Cachet er nu sat op og er klar til brug!', + 'finish_setup' => 'Gå til oversigtssiden', +]; diff --git a/resources/lang/da-DK/validation.php b/resources/lang/da-DK/validation.php new file mode 100644 index 000000000000..100398e03207 --- /dev/null +++ b/resources/lang/da-DK/validation.php @@ -0,0 +1,122 @@ + ':attribute skal accepteres.', + 'active_url' => ':attribute er ikke en valid URL.', + 'after' => ':attribute skal være efter den :date.', + 'alpha' => ':attribute må kun indeholde bogstaver.', + 'alpha_dash' => ':attribute må kun indeholde bogstaver, tal og bindestreger.', + 'alpha_num' => ':attribute må kun indeholde tal og bogstaver.', + 'array' => ':attribute skal være et array.', + 'before' => ':attribute skal være før den :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attribute skal have mellem :min og :max emner.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute skal være et billede.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute skal være en gyldig JSON streng.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute må ikke have mere end :max emner.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute skal være mindst :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => ':attribute feltet er påkrævet, medmindre :other er i :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute skal være :size kilobytes.', + 'string' => ':attribute skal være :size karakterer.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute skal være en gyldig zone.', + 'unique' => ':attribute er allerede i brug.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'tilpasset-besked', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/da/forms.php b/resources/lang/da/forms.php index f9f2e60220cd..06e0e7c1e061 100644 --- a/resources/lang/da/forms.php +++ b/resources/lang/da/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Navn', 'template' => 'Skabelon', - 'twig' => 'Hændelse skabeloner kan gøre brug af Twigs skabelon sprog.', + 'twig' => 'Hændelse skabeloner kan gøre brug af Twigs skabelon sprog.', ], ], diff --git a/resources/lang/de-DE/cachet.php b/resources/lang/de-DE/cachet.php new file mode 100644 index 000000000000..77779632d563 --- /dev/null +++ b/resources/lang/de-DE/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Letztes Update :timestamp', + 'status' => [ + 0 => 'Unbekannt', + 1 => 'Funktionsfähig', + 2 => 'Leistungsprobleme', + 3 => 'Teilweiser Ausfall', + 4 => 'Schwerer Ausfall', + ], + 'group' => [ + 'other' => 'Andere Komponenten', + ], + 'select_all' => 'Alles auswählen', + 'deselect_all' => 'Alles abwählen', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Es liegen keine Ereignisse vor', + 'past' => 'Vergangene Ereignisse', + 'stickied' => 'Angepinnte Vorfälle', + 'scheduled' => 'Wartungsarbeiten', + 'scheduled_at' => ', geplant :timestamp', + 'posted' => 'Veröffentlicht :timestamp von :username', + 'posted_at' => 'Veröffentlicht am :timestamp', + 'status' => [ + 1 => 'Untersuchungen laufen', + 2 => 'Identifiziert', + 3 => 'Unter Beobachtung', + 4 => 'Behoben', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Bevorstehend', + 1 => 'In Bearbeitung', + 2 => 'Abgeschlossen', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System funktioniert|[2,*]Alle Systeme funktionieren', + 'bad' => '[0,1] Das System hat momentan Probleme|[2,*] Mehrere Systeme haben momentan Probleme', + 'major' => '[0,1] Das System hat ein schwerwiegendes Problem|[2,*] Mehrere Systeme haben ein schwerwiegendes Problem', + ], + + 'api' => [ + 'regenerate' => 'API-Schlüssel erneuern', + 'revoke' => 'API-Schlüssel widerrufen', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Letzte Stunde', + 'hourly' => 'Letzte 12 Stunden', + 'weekly' => 'Wöchentlich', + 'monthly' => 'Monatlich', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Abonniere Status- und Vorfalländerungen', + 'unsubscribe' => 'Abmelden', + 'button' => 'Abonnieren', + 'manage_subscription' => 'Abonnements verwalten', + 'manage' => [ + 'notifications' => 'Benachrichtigungen', + 'notifications_for' => 'Verwalten von Benachrichtigungen für', + 'no_subscriptions' => 'Du hast im Augenblick alle Updates abonniert.', + 'update_subscription' => 'Aktualisieren', + 'my_subscriptions' => 'Du hast im Augenblick folgende Updates abonniert.', + 'manage_at_link' => 'Verwalte deine Abonnements unter :link', + ], + 'email' => [ + 'manage_subscription' => 'Wir haben Ihnen eine E-Mail gesendet. Klicken Sie bitte auf den Link, um Ihr Abonnement zu verwalten.', + 'subscribe' => 'Aktualisierungen per E-Mail abonnieren.', + 'subscribed' => 'Sie haben die E-Mail-Benachrichtigungen bestätigt.', + 'updated-subscribe' => 'Abonnement erfolgreich aktualisiert', + 'verified' => 'Ihre E-Mail-Abonnement ist bestätigt worden. Danke!', + 'manage' => 'Verwalte deine Abonnements', + 'unsubscribe' => 'Abonnement widerrufen.', + 'unsubscribed' => 'Ihre E-Mail-Abonnement wurde beendet.', + 'failure' => 'Beim Aktivieren des Abonnements ist ein Fehler aufgetreten.', + 'already-subscribed' => 'Abonnement für :email konnte nicht registriert werden, da die E-Mail-Adresse bereits registriert ist.', + ], + ], + + 'signup' => [ + 'title' => 'Registrieren', + 'username' => 'Benutzername', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'success' => 'Ihr Konto wurde erfolgreich erstellt.', + 'failure' => 'Bei der Registrierung ist etwas schief gelaufen.', + ], + + 'system' => [ + 'update' => 'Es ist eine neuere Version von Cachet verfügbar. Erfahre hier!, wie du aktualisieren kannst!', + ], + + // Modal + 'modal' => [ + 'close' => 'Schließen', + 'subscribe' => [ + 'title' => 'Abonniere die Komponenten-Updates', + 'body' => 'Gib deine E-Mail-Adresse ein, um Updates für diese Komponente(n) zu erhalten. Wenn du bereits Abonnent bist, erhältst du automatisch Updates.', + 'button' => 'Abonnieren', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details und Aktualisierung über den :name Vorfall, die am :date aufgetreten sind', + 'schedule' => 'Details zu den geplanten Wartungszeitraum :name beginnend ab :startDate', + 'subscribe' => 'Abonniere :app um Updates von Vorfällen und geplanten Wartungszeiten zu erhalten', + 'overview' => 'Bleiben sie auf dem Laufenden mit den neuesten Service-Updates von :app.', + ], + ], + + // Other + 'home' => 'Startseite', + 'powered_by' => 'Unterstützt von Cachet.', + 'timezone' => 'Uhrzeiten werden in :timezone angezeigt.', + 'about_this_site' => 'Über diese Seite', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status-Feed', + +]; diff --git a/resources/lang/de-DE/dashboard.php b/resources/lang/de-DE/dashboard.php new file mode 100644 index 000000000000..32bbc5ff60c7 --- /dev/null +++ b/resources/lang/de-DE/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'Das Cachet-Konfigurationsverzeichnis ist nicht beschreibbar. Bitte stellen Sie sicher, dass ./ bootstrap/cachet vom Webserver beschreibbar ist.', + + // Incidents + 'incidents' => [ + 'title' => 'Vorfälle & Wartungsarbeiten', + 'incidents' => 'Ereignisse', + 'logged' => '{0}Es gibt keine Ereignisse, gute Arbeit.|[1]Du hast ein Ereignis gemeldet.|[2,*]Du hast :count Ereignisse gemeldet.', + 'incident-create-template' => 'Vorlage erstellen', + 'incident-templates' => 'Ereignis-Vorlagen', + 'updates' => [ + 'title' => 'Vorfall-Updates für :incident', + 'count' => '{0}Keine Updates|[1]Ein Update|[2]Zwei Updates|[3,*]Mehrere Updates', + 'add' => [ + 'title' => 'Vorfall-Update erstellen', + 'success' => 'Dein Vorfall-Update wurde erstellt.', + 'failure' => 'Beim Erstellen des Vorfalls ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Vorfall-Update bearbeiten', + 'success' => 'Vorfall wurde aktualisiert.', + 'failure' => 'Beim Bearbeiten des Vorfalls ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + 'reported_by' => 'Veröffentlicht :timestamp von :user', + 'add' => [ + 'title' => 'Ereignis hinzufügen', + 'success' => 'Ereignis hinzugefügt.', + 'failure' => 'Beim Erstellen des Ereignisses ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Ereignis bearbeiten', + 'success' => 'Ereignis aktualisiert.', + 'failure' => 'Beim Bearbeiten des Ereignisses ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Das Ereignis wurde gelöscht und wird nicht mehr angezeigt.', + 'failure' => 'Beim Löschen des Ereignisses ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Ereignis-Vorlagen', + 'add' => [ + 'title' => 'Ereignisvorlage erstellen', + 'message' => 'Noch keine Ereignis-Vorlage erstellt.', + 'success' => 'Deine neue Ereignis-Vorlage wurde angelegt.', + 'failure' => 'Beim Erstellen der Ereignis-Vorlage ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Vorlage bearbeiten', + 'success' => 'Die Ereignis-Vorlage wurde aktualisiert.', + 'failure' => 'Beim Bearbeiten der Ereignis-Vorlage ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Die Ereignis-Vorlage wurde gelöscht.', + 'failure' => 'Beim Löschen der Ereignis-Vorlage ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Wartungsarbeiten', + 'logged' => '{0}Es gibt keine geplanten Wartungen, gute Arbeit.|[1]Du hast einen Eintrag erstellt.|[2,*]Du hast :count Einträge erstellt.', + 'scheduled_at' => 'Geplant am :timestamp', + 'add' => [ + 'title' => 'Wartungsarbeiten hinzufügen', + 'success' => 'Wartungsarbeiten hinzugefügt.', + 'failure' => 'Beim Erstellen des Zeitplans ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Planmäßige Wartung bearbeiten', + 'success' => 'Wartungsarbeiten wurden aktualisiert!', + 'failure' => 'Beim Bearbeiten des Zeitplans ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Der Zeitplan wurde gelöscht und wird nicht auf Ihrer Statusseite angezeigt.', + 'failure' => 'Beim Löschen des Zeitplans ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Komponenten', + 'component_statuses' => 'Komponentenstatus', + 'listed_group' => 'Gruppenname :name', + 'add' => [ + 'title' => 'Komponente hinzufügen', + 'message' => 'Sie sollten eine Komponente erstellen.', + 'success' => 'Komponente erstellt.', + 'failure' => 'Beim Erstellen der Komponente ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Komponente bearbeiten', + 'success' => 'Komponente aktualisiert.', + 'failure' => 'Beim Bearbeiten der Komponente ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Die Komponente wurde gelöscht!', + 'failure' => 'Beim Löschen der Komponente ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Komponentengruppe|Komponentengruppen', + 'no_components' => 'Sie sollten eine Komponentengruppe hinzufügen.', + 'add' => [ + 'title' => 'Eine Komponentengruppe hinzufügen', + 'success' => 'Komponentengruppe hinzugefügt.', + 'failure' => 'Beim Erstellen der Komponentengruppe ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Komponentengruppe bearbeiten', + 'success' => 'Komponentengruppe aktualisiert.', + 'failure' => 'Beim Bearbeiten der Komponentengruppe ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Die Komponentengruppe wurde gelöscht!', + 'failure' => 'Beim Löschen der Komponentengruppe ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metriken', + 'add' => [ + 'title' => 'Metrik erstellen', + 'message' => 'Noch keine Metrik erstellt.', + 'success' => 'Metrik erstellt.', + 'failure' => 'Beim Erstellen der Metrik ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Metrik bearbeiten', + 'success' => 'Metrik aktualisiert.', + 'failure' => 'Beim Bearbeiten der Metrik ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Die Metrik wurde gelöscht und wird nicht mehr angezeigt.', + 'failure' => 'Beim Löschen der Metrik ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Abonnenten', + 'description' => 'Abonnenten erhalten E-Mail Updates, wenn Vorfälle erstellt oder Komponenten bearbeitet werden.', + 'description_disabled' => 'Um diese Funktion nutzen zu können, musst du zulassen, dass sich Personen für Benachrichtigungen anmelden dürfen.', + 'verified' => 'Bestätigt', + 'not_verified' => 'Nicht bestätigt', + 'subscriber' => ':email, abonniert am :date', + 'no_subscriptions' => 'Aktualisierungen per E-Mail abonnieren', + 'global' => 'Alles abonniert', + 'add' => [ + 'title' => 'Einen neuen Abonnenten hinzufügen', + 'success' => 'Abonnent hinzugefügt.', + 'failure' => 'Beim Hinzufügen des Abonnenten ist ein Fehler aufgetreten. Versuche es bitte erneut.', + 'help' => 'Gib jeden Abonnenten in eine neue Zeile ein.', + ], + 'edit' => [ + 'title' => 'Abonnent aktualisieren', + 'success' => 'Abonnent aktualisiert.', + 'failure' => 'Beim Bearbeiten des Abonnenten ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Mitglied', + 'profile' => 'Profil', + 'description' => 'Teammitglieder werden die Möglichkeit haben, Komponente sowie Vorfälle hinzuzufügen und zu verändern.', + 'add' => [ + 'title' => 'Neues Teammitglied hinzufügen', + 'success' => 'Teammitglied hinzugefügt.', + 'failure' => 'Beim Hinzufügen des Teammitglieds ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'edit' => [ + 'title' => 'Profil aktualisieren', + 'success' => 'Profil aktualisiert.', + 'failure' => 'Beim Bearbeiten des Teammitglieds ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'delete' => [ + 'success' => 'Benutzer aktualisiert.', + 'failure' => 'Beim Löschen des Teammitglieds ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + 'invite' => [ + 'title' => 'Ein neues Teammitglied einladen', + 'success' => 'Eine Einladung wurde verschickt', + 'failure' => 'Beim Einladen des Teammitglieds ist ein Fehler aufgetreten. Versuche es bitte erneut.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Einstellungen', + 'app-setup' => [ + 'app-setup' => 'Anwendungsinstallation', + 'images-only' => 'Es können nur Bilder hochgeladen werden.', + 'too-big' => 'Die hochgeladene Datei ist zu groß. Es sind nur Dateien mit einer Maximalgröße von :size erlaubt.', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Verlauf', + ], + 'localization' => [ + 'localization' => 'Standort', + ], + 'customization' => [ + 'customization' => 'Individualisierung', + 'header' => 'Benutzerdefinierter HTML Header', + 'footer' => 'Benutzerdefinierter HTML Footer', + ], + 'mail' => [ + 'mail' => 'E-Mail-Einstellungen', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test-Benachrichtigung von Cachet', + 'body' => 'Dies ist eine Test-Benachrichtigung von Cachet.', + ], + ], + 'security' => [ + 'security' => 'Sicherheit', + 'two-factor' => 'Nutzer ohne Zwei-Faktor-Authentifizierung', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Einstellungen gespeichert.', + 'failure' => 'Beim Speichern der Einstellungen ist ein Fehler aufgetreten.', + ], + 'credits' => [ + 'credits' => 'Danksagungen', + 'contributors' => 'Unterstützer', + 'license' => 'Cachet ist ein BSD-3-lizensiertes Open Source-Projekt, veröffentlicht von Alt Three Services Limited.', + 'backers-title' => 'Unterstützer & Sponsoren', + 'backers' => 'Wenn Du die Entwicklung der Software unterstützen möchtest, kannst Du unter Cachet Patreon einen Beitrag leisten.', + 'thank-you' => 'Vielen Dank an jeden der :count Unterstützer.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Einloggen', + 'logged_in' => 'Sie sind eingeloggt.', + 'welcome' => 'Willkommen zurück!', + 'two-factor' => 'Zwei-Faktor-Authentifizierung', + ], + + // Sidebar footer + 'help' => 'Hilfe', + 'status_page' => 'Statusseite', + 'logout' => 'Abmelden', + + // Notifications + 'notifications' => [ + 'notifications' => 'Benachrichtigungen', + 'awesome' => 'Großartig.', + 'whoops' => 'Hoppla.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Cachet unterstützen', + 'support_subtitle' => 'Unterstütze uns auf Patreon!', + 'news' => 'Aktuelle Neuigkeiten', + 'news_subtitle' => 'Erhalte die neusten Nachrichten', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Willkommen zu Deiner Status Seite!', + 'message' => 'Deine Statusseite ist fast fertig! Vielleicht möchtest Du diese zusätzlichen Einstellungen konfigurieren.', + 'close' => 'Gehe einfach direkt zu meinem Dashboard', + 'steps' => [ + 'component' => 'Komponenten erstellen', + 'incident' => 'Ereignis erstellen', + 'customize' => 'Seite anpassen', + 'team' => 'Benutzer hinzufügen', + 'api' => 'API Token generieren', + 'two-factor' => 'Zwei-Faktor-Authentifizierung', + ], + ], + +]; diff --git a/resources/lang/de-DE/forms.php b/resources/lang/de-DE/forms.php new file mode 100644 index 000000000000..445e3ae48a94 --- /dev/null +++ b/resources/lang/de-DE/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'E-Mail', + 'username' => 'Benutzername', + 'password' => 'Passwort', + 'site_name' => 'Seitenname', + 'site_domain' => 'Domain ihrer Seite', + 'site_timezone' => 'Wählen Sie Ihre Zeitzone', + 'site_locale' => 'Wählen Sie Ihre Sprache', + 'enable_google2fa' => 'Google Zwei-Faktor-Authentifizierung aktivieren', + 'cache_driver' => 'Cache-Treiber', + 'queue_driver' => 'Queue-Treiber', + 'session_driver' => 'Sitzungs-Treiber', + 'mail_driver' => 'Mail Protokoll', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Absenderadresse', + 'mail_username' => 'Mail Nutzername', + 'mail_password' => 'Mail Passwort', + ], + + // Login form fields + 'login' => [ + 'login' => 'Nutzername oder E-Mail', + 'email' => 'E-Mail', + 'password' => 'Passwort', + '2fauth' => 'Authentifizierungscode', + 'invalid' => 'Benutzername oder Passwort ungültig', + 'invalid-token' => 'Token ist ungültig', + 'cookies' => 'Sie müssen Cookies aktivieren um sich anzumelden.', + 'rate-limit' => 'Maximale Anzahl von Bewertungen erreicht.', + 'remember_me' => 'Eingeloggt bleiben', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Komponente', + 'component_status' => 'Komponentenstatus', + 'message' => 'Nachricht', + 'message-help' => 'Sie können auch Markdown verwenden.', + 'occurred_at' => 'Wann ist dieser Vorfall aufgetreten?', + 'notify_subscribers' => 'Abonnenten benachrichtigen', + 'notify_disabled' => 'Aufgrund von Wartungsarbeiten werden Benachrichtigungen über diesen Vorfall oder seiner Komponenten unterdrückt.', + 'visibility' => 'Ereignis Sichtbarkeit', + 'stick_status' => 'Vorfall anpinnen', + 'stickied' => 'Angepinnt', + 'not_stickied' => 'Nicht angepinnt', + 'public' => 'Öffentlich sichtbar', + 'logged_in_only' => 'Nur für angemeldete Benutzer sichtbar', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Vorlage', + 'twig' => 'Ereignis-Vorlagen können den Twig Syntax nutzen.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Nachricht', + 'message-help' => 'Sie können auch Markdown verwenden.', + 'scheduled_at' => 'Für wann ist die Wartungsarbeit geplant?', + 'completed_at' => 'Wann wurde diese Wartungsarbeit abgeschlossen?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Vorlage', + 'twig' => 'Ereignis-Vorlagen können den Twig Syntax nutzen.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Gruppe', + 'description' => 'Beschreibung', + 'link' => 'Link', + 'tags' => 'Schlagwörter', + 'tags-help' => 'Durch Kommata trennen.', + 'enabled' => 'Komponente aktiv?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Optionen Anzeigen/Ausblenden', + 'visible' => 'Immer erweitert', + 'collapsed' => 'Die Gruppe standardmäßig ausblenden', + 'collapsed_incident' => 'Die Gruppe standardmäßig ausblenden, aber erweitern wenn es Probleme gibt', + 'visibility' => 'Sichtbarkeit', + 'visibility_public' => 'Öffentlich sichtbar', + 'visibility_authenticated' => 'Nur für angemeldete Benutzer sichtbar', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Beschreibung', + 'start_at' => 'Startzeit festlegen', + 'timezone' => 'Zeitzone', + 'schedule_frequency' => 'Häufigkeit festlegen (in Sekunden)', + 'completion_latency' => 'Wartezeit bis zur Fertigstellung (in Sekunden)', + 'group' => 'Gruppe', + 'active' => 'Aktiv?', + 'groups' => [ + 'name' => 'Gruppen Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Beschreibung', + 'description-help' => 'Sie können auch Markdown verwenden.', + 'display-chart' => 'Diagramm auf der Statusseite anzeigen?', + 'default-value' => 'Standardwert', + 'calc_type' => 'Berechnung der Metrik', + 'type_sum' => 'Summe', + 'type_avg' => 'Durchschnitt', + 'places' => 'Nachkommastellen', + 'default_view' => 'Standardansicht', + 'threshold' => 'Wie viele Minuten soll der Abstand zwischen den Messpunkten sein?', + 'visibility' => 'Sichtbarkeit', + 'visibility_authenticated' => 'Sichtbar für angemeldete Nutzer', + 'visibility_public' => 'Sichtbar für alle', + 'visibility_hidden' => 'Immer ausgeblendet', + + 'points' => [ + 'value' => 'Wert', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Seitenname', + 'site-url' => 'URL ihrer Seite', + 'display-graphs' => 'Graphen auf der Statusseite anzeigen?', + 'about-this-page' => 'Über diese Seite', + 'days-of-incidents' => 'Wie viele Tage mit Vorfällen sollen gezeigt werden?', + 'time_before_refresh' => 'Aktualisierungsrate der Statusseite (in Sekunden)', + 'major_outage_rate' => 'Grenzwert für schwerwiegende Ausfälle (in %)', + 'banner' => 'Banner Bild', + 'banner-help' => 'Es wird empfohlen, dass Sie keine Dateien, die breiter als 930 Pixel sind, hochladen', + 'subscribers' => 'Personen die Anmeldung für E-Mail-Benachrichtigung erlauben?', + 'suppress_notifications_in_maintenance' => 'Möchten Sie Benachrichtigungen über einen Vorfall während des Zeitraumes der Wartungsarbeiten unterdrücken?', + 'skip_subscriber_verification' => 'Verifizierung der Nutzer überspringen? (Warnung, du könntest gespammt werden)', + 'automatic_localization' => 'Die Status-Seite automatisch auf die Sprache deiner Besucher anpassen?', + 'enable_external_dependencies' => 'Drittanbieter Abhängigkeiten erlauben (Google Schriftarten, Tracker, etc...)', + 'show_timezone' => 'Zeitzone in der sich die Status-Seite befindet anzeigen', + 'only_disrupted_days' => 'Im Verlauf nur Tage mit Vorfällen anzeigen?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics Code', + 'analytics_gosquared' => 'GoSquared Analytics Code', + 'analytics_piwik_url' => 'URL der Piwik-Instanz', + 'analytics_piwik_siteid' => 'Piwik\'s Seiten-ID', + ], + 'localization' => [ + 'site-timezone' => 'Zeitzone ihrer Seite', + 'site-locale' => 'Sprache ihrer Seite', + 'date-format' => 'Datumsformat', + 'incident-date-format' => 'Ereignis Uhrzeit Format', + ], + 'security' => [ + 'allowed-domains' => 'Erlaubte Domains', + 'allowed-domains-help' => 'Durch Kommata trennen. Die oben genannte Domain ist standardmäßig erlaubt.', + 'always-authenticate' => 'Immer anmelden', + 'always-authenticate-help' => 'Anmeldung für alle Cachet Seiten erzwingen', + ], + 'stylesheet' => [ + 'custom-css' => 'Benutzerdefiniertes Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Hintergrundfarbe', + 'background-fills' => 'Hintergrunddateien (Komponenten, Vorfälle, Footer)', + 'banner-background-color' => 'Banner Background Color', + 'banner-padding' => 'Banner Padding', + 'fullwidth-banner' => 'Banner über komplette Breite?', + 'text-color' => 'Schriftfarbe', + 'dashboard-login' => 'Dashboard-Button im Footer anzeigen?', + 'reds' => 'Rot (Genutzt für Fehler)', + 'blues' => 'Blau (Genutzt für Informationen)', + 'greens' => 'Grün (Genutzt für Erfolgreich)', + 'yellows' => 'Gelb (Genutzt für Warnungen)', + 'oranges' => 'Orange (Genutzt für Nachrichten)', + 'metrics' => 'Kennzahlen-Füllung', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Benutzername', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'api-token' => 'API Token', + 'api-token-help' => 'Wenn sie ihren API-Token neu generieren, können bestehende Anwendungen nicht mehr auf Cachet zugreifen.', + 'gravatar' => 'Ändern Sie Ihr Profilbild bei Gravatar.', + 'user_level' => 'Benutzerebene', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'Benutzer', + ], + '2fa' => [ + 'help' => 'Die Zwei-Faktor-Authentifizierung erhöht die Sicherheit Ihres Kontos. Sie benötigen Google Authenticator oder eine ähnliche App auf Ihrem Mobilgerät. Beim Anmelden werden sie aufgefordert, einen Token einzugeben, der von der App generiert wird.', + ], + 'team' => [ + 'description' => 'Laden Sie Ihre Teammitglieder ein, indem Sie deren E-Mail-Adressen hier eingeben.', + 'email' => 'E-Mail-Adresse des Teammitgliedes', + ], + ], + + 'general' => [ + 'timezone' => 'Zeitzone wählen', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Hinzufügen', + 'save' => 'Speichern', + 'update' => 'Aktualisieren', + 'create' => 'Erstellen', + 'edit' => 'Bearbeiten', + 'delete' => 'Löschen', + 'submit' => 'Abschicken', + 'cancel' => 'Abbrechen', + 'remove' => 'Entfernen', + 'invite' => 'Einladen', + 'signup' => 'Registrieren', + 'manage_updates' => 'Updates verwalten', + + // Other + 'optional' => '* optional', +]; diff --git a/resources/lang/de-DE/notifications.php b/resources/lang/de-DE/notifications.php new file mode 100644 index 000000000000..9ee1d429bd04 --- /dev/null +++ b/resources/lang/de-DE/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Status der Komponente aktualisiert', + 'greeting' => 'Ein Komponentenstatus wurde aktualisiert!', + 'content' => ':name Status wurde von :old_status zu :new_status geändert.', + 'action' => 'Anzeigen', + ], + 'slack' => [ + 'title' => 'Status der Komponente aktualisiert', + 'content' => ':name Status wurde von :old_status zu :new_status geändert.', + ], + 'sms' => [ + 'content' => ':name Status wurde von :old_status zu :new_status geändert.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Neuer Vorfall gemeldet', + 'greeting' => 'Ein neuer Vorfall wurde auf der :app_name Status Seite gemeldet.', + 'content' => 'Vorfall :name wurde gemeldet', + 'action' => 'Anzeigen', + ], + 'slack' => [ + 'title' => 'Vorfall :name gemeldet', + 'content' => 'Ein neuer Vorfall wurde auf der :app_name Status Seite gemeldet', + ], + 'sms' => [ + 'content' => 'Ein neuer Vorfall wurde auf der :app_name Status Seite gemeldet.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Vorfall aktualisiert', + 'content' => ':name wurde aktualisiert', + 'title' => ':name wurde auf :new_status aktualisiert', + 'action' => 'Anzeigen', + ], + 'slack' => [ + 'title' => ':name aktualisiert', + 'content' => ':name wurde auf :new_status aktualisiert', + ], + 'sms' => [ + 'content' => 'Vorfall :name wurde aktualisiert', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Neuer Zeitplan erstellt', + 'content' => ':name wurde für :date geplant', + 'title' => 'Eine neue geplante Wartung wurde erstellt.', + 'action' => 'Anzeigen', + ], + 'slack' => [ + 'title' => 'Neuer Zeitplan erstellt!', + 'content' => ':name wurde für :date geplant', + ], + 'sms' => [ + 'content' => ':name wurde für :date geplant', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Bitte bestätigen Sie Ihr Abonnement', + 'content' => 'Klicken Sie, um Ihr Abonnement von :app_name Statusseite zu bestätigen.', + 'title' => 'Bestätigen Sie Ihr Abonnement für die :app_name Statusseite.', + 'action' => 'Bestätigen', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Verwaltung Ihres Abonnements', + 'content' => 'Klicken, um Ihr Abonnement für die Statusseite :app_name zu verwalten.', + 'title' => 'Klicken, um Ihr Abonnement für die Statusseite :app_name zu verwalten.', + 'action' => 'Abonnements verwalten', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping von Cachet!', + 'content' => 'Dies ist eine Test-Benachrichtigung von Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Ihre Einladung wartet auf Sie...', + 'content' => 'Sie wurden eingeladen, um der :app_name Statusseite beizutreten.', + 'title' => 'Sie sind dazu eingeladen, der :app_name Statusseite beizutreten.', + 'action' => 'Akzeptieren', + ], + ], + ], +]; diff --git a/resources/lang/de-DE/pagination.php b/resources/lang/de-DE/pagination.php new file mode 100644 index 000000000000..b52dd5ce6f2b --- /dev/null +++ b/resources/lang/de-DE/pagination.php @@ -0,0 +1,28 @@ + 'Vorherige', + 'next' => 'Nächste', + +]; diff --git a/resources/lang/de-DE/setup.php b/resources/lang/de-DE/setup.php new file mode 100644 index 000000000000..ccda3bfa3fae --- /dev/null +++ b/resources/lang/de-DE/setup.php @@ -0,0 +1,23 @@ + 'Installation', + 'title' => 'Cachet installieren', + 'service_details' => 'Servicedetails', + 'env_setup' => 'Einrichtung der Systemumgebung', + 'status_page_setup' => 'Statusseite einrichten', + 'show_support' => 'Möchten Sie Cachet unterstützen?', + 'admin_account' => 'Administrator Konto', + 'complete_setup' => 'Installation abschließen', + 'completed' => 'Cachet wurde erfolgreich konfiguriert!', + 'finish_setup' => 'Zum Dashboard wechseln', +]; diff --git a/resources/lang/de-DE/validation.php b/resources/lang/de-DE/validation.php new file mode 100644 index 000000000000..9483f4187ef8 --- /dev/null +++ b/resources/lang/de-DE/validation.php @@ -0,0 +1,122 @@ + ':attribute muss akzeptiert werden.', + 'active_url' => ':attribute ist keine gültige Internet-Adresse.', + 'after' => ':attribute muss ein Datum nach dem :date sein.', + 'alpha' => ':attribute darf nur aus Buchstaben bestehen.', + 'alpha_dash' => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen. Umlaute (ä, ö, ü) und Eszett (ß) sind nicht erlaubt.', + 'alpha_num' => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen. Umlaute (ä, ö, ü) und Eszett (ß) sind nicht erlaubt.', + 'array' => ':attribute muss ein Array sein.', + 'before' => ':attribute muss ein Datum vor dem :date sein.', + 'between' => [ + 'numeric' => ':attribute muss zwischen :min und :max liegen.', + 'file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.', + 'string' => ':attribute muss zwischen :min und :max Zeichen lang sein.', + 'array' => ':attribute muss zwischen :min & :max Elemente haben.', + ], + 'boolean' => ':attribute Feld muss true oder false sein.', + 'confirmed' => ':attribute Bestätigung stimmt nicht überein.', + 'date' => ':attribute ist kein gültiges Datum.', + 'date_format' => ':attribute entspricht nicht dem Format :format.', + 'different' => ':attribute und :other dürfen nicht identisch sein.', + 'digits' => ':attribute muss :digits Zeichen lang sein.', + 'digits_between' => ':attribute muss zwischen :min und :max Zeichen lang sein.', + 'email' => ':attribute muss eine gültige E-Mail-Ad­res­se sein.', + 'exists' => 'Das ausgewählte :attribute ist ungültig.', + 'distinct' => ':attribute hat doppelte Werte.', + 'filled' => 'Das Feld :attribute ist erforderlich.', + 'image' => ':attribute muss ein Bild sein.', + 'in' => 'Das ausgewählte :attribute ist ungültig.', + 'in_array' => ':attribute existiert nicht in :other.', + 'integer' => ':attribute muss eine ganze Zahl sein.', + 'ip' => ':attribute muss eine gültige IP-Adresse sein.', + 'json' => ':attribut muss ein gültiger JSON-String sein.', + 'max' => [ + 'numeric' => ':attribute darf nicht größer sein als :max.', + 'file' => ':attribute darf nicht größer sein als :max kilobytes.', + 'string' => ':attribute darf maximal :max Zeichen haben.', + 'array' => ':attribute darf nicht mehr als :max Elemente haben.', + ], + 'mimes' => ':attribute muss einem der Dateitypen: :values entsprechen.', + 'min' => [ + 'numeric' => ':attribute muss mindestens :min sein.', + 'file' => ':attribute muss mindestens :min Kilobytes groß sein.', + 'string' => ':attribute muss mindestens :min Zeichen enthalten.', + 'array' => ':attribute muss mindestens :min Elemente haben.', + ], + 'not_in' => 'Das ausgewählte :attribute ist ungültig.', + 'numeric' => ':attribute muss eine Zahl sein.', + 'present' => ':attribute muss ausgefüllt sein.', + 'regex' => 'Das Format von :attribute ist ungültig.', + 'required' => 'Das Feld :attribute ist erforderlich.', + 'required_if' => ':attribute wird benötigt wenn :other :value entspricht.', + 'required_unless' => 'Das :attribute Feld ist erforderlich außer :other hat den Wert :values.', + 'required_with' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.', + 'required_with_all' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.', + 'required_without' => ':attribute muss angegeben werden, wenn :values nicht angegeben wurde.', + 'required_without_all' => ':attribute ist erforderlich, wenn keiner von :values vorhanden sind.', + 'same' => ':attribute und :other müssen übereinstimmen.', + 'size' => [ + 'numeric' => ':attribute muss :size sein.', + 'file' => ':attribute muss :size Kilobytes groß sein.', + 'string' => ':attribute muss :size Zeichen lang sein.', + 'array' => ':attribute muss :size Elemente beinhalten.', + ], + 'string' => 'Das :attribute muss eine Zeichenfolge sein.', + 'timezone' => ':attribute muss eine gültige Zeitzone sein.', + 'unique' => ':attribute ist schon vergeben.', + 'url' => 'Das Format von :attribute ist ungültig.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'Individuelle Nachricht', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/de/forms.php b/resources/lang/de/forms.php index 26e51de85029..72a32ee55a00 100644 --- a/resources/lang/de/forms.php +++ b/resources/lang/de/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Vorlage', - 'twig' => 'Vorfall Vorlagen können den Twig Syntax nutzen.', + 'twig' => 'Vorfall Vorlagen können den Twig Syntax nutzen.', ], ], diff --git a/resources/lang/el-GR/cachet.php b/resources/lang/el-GR/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/el-GR/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/el-GR/dashboard.php b/resources/lang/el-GR/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/el-GR/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/el-GR/forms.php b/resources/lang/el-GR/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/el-GR/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/el-GR/notifications.php b/resources/lang/el-GR/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/el-GR/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/el-GR/pagination.php b/resources/lang/el-GR/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/el-GR/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/el-GR/setup.php b/resources/lang/el-GR/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/el-GR/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/el-GR/validation.php b/resources/lang/el-GR/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/el-GR/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/el/forms.php b/resources/lang/el/forms.php index 3eade08765b9..c31433ed0fe7 100644 --- a/resources/lang/el/forms.php +++ b/resources/lang/el/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/en-UD/cachet.php b/resources/lang/en-UD/cachet.php index 974b32d87fa7..0072aa245cb9 100644 --- a/resources/lang/en-UD/cachet.php +++ b/resources/lang/en-UD/cachet.php @@ -12,133 +12,129 @@ return [ // Components 'components' => [ - 'last_updated' => 'crwdns721:0crwdne721:0', + 'last_updated' => 'crwdns877:0crwdne877:0', 'status' => [ - 1 => 'crwdns265:0crwdne265:0', - 2 => 'crwdns293:0crwdne293:0', - 3 => 'crwdns294:0crwdne294:0', - 4 => 'crwdns295:0crwdne295:0', + 0 => 'crwdns878:0crwdne878:0', + 1 => 'crwdns879:0crwdne879:0', + 2 => 'crwdns880:0crwdne880:0', + 3 => 'crwdns881:0crwdne881:0', + 4 => 'crwdns882:0crwdne882:0', ], 'group' => [ - 'other' => 'crwdns659:0crwdne659:0', + 'other' => 'crwdns883:0crwdne883:0', ], ], // Incidents 'incidents' => [ - 'none' => 'crwdns657:0crwdne657:0', - 'past' => 'crwdns542:0crwdne542:0', - 'previous_week' => 'crwdns543:0crwdne543:0', - 'next_week' => 'crwdns544:0crwdne544:0', - 'scheduled' => 'crwdns438:0crwdne438:0', - 'scheduled_at' => 'crwdns439:0crwdne439:0', - 'status' => [ - 0 => 'crwdns440:0crwdne440:0', // TODO: Hopefully remove this. - 1 => 'crwdns299:0crwdne299:0', - 2 => 'crwdns300:0crwdne300:0', - 3 => 'crwdns301:0crwdne301:0', - 4 => 'crwdns302:0crwdne302:0', + 'none' => 'crwdns884:0crwdne884:0', + 'past' => 'crwdns885:0crwdne885:0', + 'stickied' => 'crwdns888:0crwdne888:0', + 'scheduled' => 'crwdns1395:0crwdne1395:0', + 'scheduled_at' => 'crwdns890:0crwdne890:0', + 'posted' => 'crwdns891:0crwdne891:0', + 'posted_at' => 'crwdns1396:0crwdne1396:0', + 'status' => [ + 1 => 'crwdns892:0crwdne892:0', + 2 => 'crwdns893:0crwdne893:0', + 3 => 'crwdns894:0crwdne894:0', + 4 => 'crwdns895:0crwdne895:0', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'crwdns896:0crwdne896:0', + 1 => 'crwdns897:0crwdne897:0', + 2 => 'crwdns898:0crwdne898:0', ], ], // Service Status 'service' => [ - 'good' => 'crwdns622:0crwdne622:0', - 'bad' => 'crwdns623:0crwdne623:0', - 'major' => 'crwdns624:0crwdne624:0', + 'good' => 'crwdns1437:0crwdne1437:0', + 'bad' => 'crwdns1398:0crwdne1398:0', + 'major' => 'crwdns1399:0crwdne1399:0', ], 'api' => [ - 'regenerate' => 'crwdns271:0crwdne271:0', - 'revoke' => 'crwdns304:0crwdne304:0', + 'regenerate' => 'crwdns902:0crwdne902:0', + 'revoke' => 'crwdns903:0crwdne903:0', ], // Metrics 'metrics' => [ 'filter' => [ - 'last_hour' => 'crwdns625:0crwdne625:0', - 'hourly' => 'crwdns548:0crwdne548:0', - 'weekly' => 'crwdns549:0crwdne549:0', - 'monthly' => 'crwdns550:0crwdne550:0', + 'last_hour' => 'crwdns904:0crwdne904:0', + 'hourly' => 'crwdns905:0crwdne905:0', + 'weekly' => 'crwdns906:0crwdne906:0', + 'monthly' => 'crwdns907:0crwdne907:0', ], ], // Subscriber 'subscriber' => [ - 'subscribe' => 'crwdns551:0crwdne551:0', - 'button' => 'crwdns490:0crwdne490:0', - 'manage' => [ - 'no_subscriptions' => 'crwdns660:0crwdne660:0', - 'my_subscriptions' => 'crwdns661:0crwdne661:0', + 'subscribe' => 'crwdns908:0crwdne908:0', + 'unsubscribe' => 'crwdns1352:0crwdne1352:0', + 'button' => 'crwdns909:0crwdne909:0', + 'manage' => [ + 'no_subscriptions' => 'crwdns910:0crwdne910:0', + 'my_subscriptions' => 'crwdns911:0crwdne911:0', + 'manage_at_link' => 'crwdns1432:0crwdne1432:0', ], 'email' => [ - 'subscribe' => 'crwdns491:0crwdne491:0', - 'subscribed' => 'crwdns492:0crwdne492:0', - 'verified' => 'crwdns493:0crwdne493:0', - 'manage' => 'crwdns775:0crwdne775:0', - 'unsubscribe' => 'crwdns552:0crwdne552:0', - 'unsubscribed' => 'crwdns495:0crwdne495:0', - 'failure' => 'crwdns496:0crwdne496:0', - 'already-subscribed' => 'crwdns626:0crwdne626:0', - 'verify' => [ - 'text' => 'crwdns776:0crwdne776:0', - 'html' => 'crwdns777:0crwdne777:0', - 'button' => 'crwdns778:0crwdne778:0', - ], - 'maintenance' => [ - 'subject' => 'crwdns779:0crwdne779:0', - ], - 'incident' => [ - 'subject' => 'crwdns780:0:status:crwdne780:0', - ], - 'component' => [ - 'subject' => 'crwdns627:0crwdne627:0', - 'text' => 'crwdns628:0crwdne628:0', - 'html' => 'crwdns630:0crwdne630:0', - 'tooltip-title' => 'crwdns631:0crwdne631:0', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => 'crwdns553:0crwdne553:0', - 'html' => 'crwdns555:0crwdne555:0', - ], + 'subscribe' => 'crwdns912:0crwdne912:0', + 'subscribed' => 'crwdns913:0crwdne913:0', + 'verified' => 'crwdns914:0crwdne914:0', + 'manage' => 'crwdns915:0crwdne915:0', + 'unsubscribe' => 'crwdns916:0crwdne916:0', + 'unsubscribed' => 'crwdns917:0crwdne917:0', + 'failure' => 'crwdns918:0crwdne918:0', + 'already-subscribed' => 'crwdns919:0crwdne919:0', ], ], 'signup' => [ - 'title' => 'crwdns556:0crwdne556:0', - 'username' => 'crwdns557:0crwdne557:0', - 'email' => 'crwdns558:0crwdne558:0', - 'password' => 'crwdns559:0crwdne559:0', - 'success' => 'crwdns560:0crwdne560:0', - 'failure' => 'crwdns561:0crwdne561:0', + 'title' => 'crwdns931:0crwdne931:0', + 'username' => 'crwdns932:0crwdne932:0', + 'email' => 'crwdns933:0crwdne933:0', + 'password' => 'crwdns934:0crwdne934:0', + 'success' => 'crwdns935:0crwdne935:0', + 'failure' => 'crwdns936:0crwdne936:0', ], 'system' => [ - 'update' => 'crwdns632:0crwdne632:0', + 'update' => 'crwdns937:0crwdne937:0', ], // Modal 'modal' => [ - 'close' => 'crwdns633:0crwdne633:0', + 'close' => 'crwdns938:0crwdne938:0', 'subscribe' => [ - 'title' => 'crwdns634:0crwdne634:0', - 'body' => 'crwdns658:0crwdne658:0', - 'button' => 'crwdns636:0crwdne636:0', + 'title' => 'crwdns939:0crwdne939:0', + 'body' => 'crwdns940:0crwdne940:0', + 'button' => 'crwdns941:0crwdne941:0', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'crwdns1428:0crwdne1428:0', + 'schedule' => 'crwdns1429:0crwdne1429:0', + 'subscribe' => 'crwdns1430:0crwdne1430:0', + 'overview' => 'crwdns1431:0crwdne1431:0', ], ], // Other - 'home' => 'crwdns722:0crwdne722:0', - 'description' => 'crwdns663:0crwdne663:0', - 'powered_by' => 'crwdns723:0crwdne723:0', - 'about_this_site' => 'crwdns563:0crwdne563:0', - 'rss-feed' => 'crwdns506:0crwdne506:0', - 'atom-feed' => 'crwdns507:0crwdne507:0', - 'feed' => 'crwdns275:0crwdne275:0', + 'home' => 'crwdns942:0crwdne942:0', + 'powered_by' => 'crwdns944:0crwdne944:0', + 'timezone' => 'crwdns945:0crwdne945:0', + 'about_this_site' => 'crwdns946:0crwdne946:0', + 'rss-feed' => 'crwdns947:0crwdne947:0', + 'atom-feed' => 'crwdns948:0crwdne948:0', + 'feed' => 'crwdns949:0crwdne949:0', ]; diff --git a/resources/lang/en-UD/dashboard.php b/resources/lang/en-UD/dashboard.php index f35edc96aba3..46ec0e9a4f6d 100644 --- a/resources/lang/en-UD/dashboard.php +++ b/resources/lang/en-UD/dashboard.php @@ -11,264 +11,293 @@ return [ - 'dashboard' => 'crwdns152:0crwdne152:0', + 'dashboard' => 'crwdns950:0crwdne950:0', + 'writeable_settings' => 'crwdns951:0crwdne951:0', // Incidents 'incidents' => [ - 'title' => 'crwdns444:0crwdne444:0', - 'incidents' => 'crwdns153:0crwdne153:0', - 'logged' => 'crwdns305:0{0}crwdne305:0', - 'incident-create-template' => 'crwdns306:0crwdne306:0', - 'incident-templates' => 'crwdns307:0crwdne307:0', + 'title' => 'crwdns1400:0crwdne1400:0', + 'incidents' => 'crwdns953:0crwdne953:0', + 'logged' => 'crwdns1441:0{0}crwdnd1441:0[1]crwdne1441:0', + 'incident-create-template' => 'crwdns955:0crwdne955:0', + 'incident-templates' => 'crwdns956:0crwdne956:0', + 'updates' => [ + 'title' => 'crwdns1402:0crwdne1402:0', + 'count' => 'crwdns1439:0{0}crwdnd1439:0[1]crwdnd1439:0[2]crwdne1439:0', + 'add' => [ + 'title' => 'crwdns1404:0crwdne1404:0', + 'success' => 'crwdns1405:0crwdne1405:0', + 'failure' => 'crwdns1406:0crwdne1406:0', + ], + 'edit' => [ + 'title' => 'crwdns1407:0crwdne1407:0', + 'success' => 'crwdns1408:0crwdne1408:0', + 'failure' => 'crwdns1409:0crwdne1409:0', + ], + ], + 'reported_by' => 'crwdns1433:0crwdne1433:0', 'add' => [ - 'title' => 'crwdns564:0crwdne564:0', - 'success' => 'crwdns664:0crwdne664:0', - 'failure' => 'crwdns665:0crwdne665:0', + 'title' => 'crwdns958:0crwdne958:0', + 'success' => 'crwdns959:0crwdne959:0', + 'failure' => 'crwdns960:0crwdne960:0', ], 'edit' => [ - 'title' => 'crwdns565:0crwdne565:0', - 'success' => 'crwdns312:0crwdne312:0', - 'failure' => 'crwdns666:0crwdne666:0', + 'title' => 'crwdns961:0crwdne961:0', + 'success' => 'crwdns962:0crwdne962:0', + 'failure' => 'crwdns963:0crwdne963:0', ], 'delete' => [ - 'success' => 'crwdns637:0crwdne637:0', - 'failure' => 'crwdns667:0crwdne667:0', + 'success' => 'crwdns964:0crwdne964:0', + 'failure' => 'crwdns965:0crwdne965:0', ], // Incident templates 'templates' => [ - 'title' => 'crwdns314:0crwdne314:0', + 'title' => 'crwdns968:0crwdne968:0', 'add' => [ - 'title' => 'crwdns566:0crwdne566:0', - 'message' => 'crwdns639:0crwdne639:0', - 'success' => 'crwdns668:0crwdne668:0', - 'failure' => 'crwdns669:0crwdne669:0', + 'title' => 'crwdns969:0crwdne969:0', + 'message' => 'crwdns1443:0crwdne1443:0', + 'success' => 'crwdns971:0crwdne971:0', + 'failure' => 'crwdns972:0crwdne972:0', ], 'edit' => [ - 'title' => 'crwdns567:0crwdne567:0', - 'success' => 'crwdns670:0crwdne670:0', - 'failure' => 'crwdns671:0crwdne671:0', + 'title' => 'crwdns973:0crwdne973:0', + 'success' => 'crwdns974:0crwdne974:0', + 'failure' => 'crwdns975:0crwdne975:0', ], 'delete' => [ - 'success' => 'crwdns640:0crwdne640:0', - 'failure' => 'crwdns672:0crwdne672:0', + 'success' => 'crwdns976:0crwdne976:0', + 'failure' => 'crwdns977:0crwdne977:0', ], ], ], // Incident Maintenance 'schedule' => [ - 'schedule' => 'crwdns445:0crwdne445:0', - 'logged' => 'crwdns642:0{0}crwdne642:0', - 'scheduled_at' => 'crwdns446:0crwdne446:0', + 'schedule' => 'crwdns1410:0crwdne1410:0', + 'logged' => 'crwdns1440:0{0}crwdnd1440:0[1]crwdne1440:0', + 'scheduled_at' => 'crwdns980:0crwdne980:0', 'add' => [ - 'title' => 'crwdns673:0crwdne673:0', - 'success' => 'crwdns674:0crwdne674:0', - 'failure' => 'crwdns675:0crwdne675:0', + 'title' => 'crwdns1412:0crwdne1412:0', + 'success' => 'crwdns1413:0crwdne1413:0', + 'failure' => 'crwdns1414:0crwdne1414:0', ], 'edit' => [ - 'title' => 'crwdns676:0crwdne676:0', - 'success' => 'crwdns677:0crwdne677:0', - 'failure' => 'crwdns678:0crwdne678:0', + 'title' => 'crwdns1415:0crwdne1415:0', + 'success' => 'crwdns1416:0crwdne1416:0', + 'failure' => 'crwdns1417:0crwdne1417:0', ], 'delete' => [ - 'success' => 'crwdns679:0crwdne679:0', - 'failure' => 'crwdns680:0crwdne680:0', + 'success' => 'crwdns1418:0crwdne1418:0', + 'failure' => 'crwdns1419:0crwdne1419:0', ], ], // Components 'components' => [ - 'components' => 'crwdns431:0crwdne431:0', - 'component_statuses' => 'crwdns321:0crwdne321:0', - 'listed_group' => 'crwdns473:0crwdne473:0', + 'components' => 'crwdns989:0crwdne989:0', + 'component_statuses' => 'crwdns990:0crwdne990:0', + 'listed_group' => 'crwdns991:0crwdne991:0', 'add' => [ - 'title' => 'crwdns568:0crwdne568:0', - 'message' => 'crwdns323:0crwdne323:0', - 'success' => 'crwdns681:0crwdne681:0', - 'failure' => 'crwdns682:0crwdne682:0', + 'title' => 'crwdns992:0crwdne992:0', + 'message' => 'crwdns993:0crwdne993:0', + 'success' => 'crwdns994:0crwdne994:0', + 'failure' => 'crwdns995:0crwdne995:0', ], 'edit' => [ - 'title' => 'crwdns569:0crwdne569:0', - 'success' => 'crwdns683:0crwdne683:0', - 'failure' => 'crwdns684:0crwdne684:0', + 'title' => 'crwdns996:0crwdne996:0', + 'success' => 'crwdns997:0crwdne997:0', + 'failure' => 'crwdns998:0crwdne998:0', ], 'delete' => [ - 'success' => 'crwdns643:0crwdne643:0', - 'failure' => 'crwdns685:0crwdne685:0', + 'success' => 'crwdns999:0crwdne999:0', + 'failure' => 'crwdns1000:0crwdne1000:0', ], // Component groups 'groups' => [ - 'groups' => 'crwdns329:0crwdne329:0', - 'no_components' => 'crwdns478:0crwdne478:0', + 'groups' => 'crwdns1001:0crwdne1001:0', + 'no_components' => 'crwdns1002:0crwdne1002:0', 'add' => [ - 'title' => 'crwdns570:0crwdne570:0', - 'success' => 'crwdns686:0crwdne686:0', - 'failure' => 'crwdns687:0crwdne687:0', + 'title' => 'crwdns1003:0crwdne1003:0', + 'success' => 'crwdns1004:0crwdne1004:0', + 'failure' => 'crwdns1005:0crwdne1005:0', ], 'edit' => [ - 'title' => 'crwdns571:0crwdne571:0', - 'success' => 'crwdns688:0crwdne688:0', - 'failure' => 'crwdns689:0crwdne689:0', + 'title' => 'crwdns1006:0crwdne1006:0', + 'success' => 'crwdns1007:0crwdne1007:0', + 'failure' => 'crwdns1008:0crwdne1008:0', ], 'delete' => [ - 'success' => 'crwdns645:0crwdne645:0', - 'failure' => 'crwdns690:0crwdne690:0', + 'success' => 'crwdns1009:0crwdne1009:0', + 'failure' => 'crwdns1010:0crwdne1010:0', ], ], ], // Metrics 'metrics' => [ - 'metrics' => 'crwdns178:0crwdne178:0', + 'metrics' => 'crwdns1011:0crwdne1011:0', 'add' => [ - 'title' => 'crwdns572:0crwdne572:0', - 'message' => 'crwdns647:0crwdne647:0', - 'success' => 'crwdns691:0crwdne691:0', - 'failure' => 'crwdns692:0crwdne692:0', + 'title' => 'crwdns1012:0crwdne1012:0', + 'message' => 'crwdns1013:0crwdne1013:0', + 'success' => 'crwdns1014:0crwdne1014:0', + 'failure' => 'crwdns1015:0crwdne1015:0', ], 'edit' => [ - 'title' => 'crwdns573:0crwdne573:0', - 'success' => 'crwdns693:0crwdne693:0', - 'failure' => 'crwdns694:0crwdne694:0', + 'title' => 'crwdns1016:0crwdne1016:0', + 'success' => 'crwdns1017:0crwdne1017:0', + 'failure' => 'crwdns1018:0crwdne1018:0', ], 'delete' => [ - 'success' => 'crwdns648:0crwdne648:0', - 'failure' => 'crwdns695:0crwdne695:0', + 'success' => 'crwdns1019:0crwdne1019:0', + 'failure' => 'crwdns1020:0crwdne1020:0', ], ], // Subscribers 'subscribers' => [ - 'subscribers' => 'crwdns522:0crwdne522:0', - 'description' => 'crwdns696:0crwdne696:0', - 'verified' => 'crwdns524:0crwdne524:0', - 'not_verified' => 'crwdns525:0crwdne525:0', - 'subscriber' => 'crwdns697:0crwdne697:0', - 'no_subscriptions' => 'crwdns698:0crwdne698:0', - 'add' => [ - 'title' => 'crwdns574:0crwdne574:0', - 'success' => 'crwdns527:0crwdne527:0', - 'failure' => 'crwdns699:0crwdne699:0', - 'help' => 'crwdns724:0crwdne724:0', + 'subscribers' => 'crwdns1021:0crwdne1021:0', + 'description' => 'crwdns1022:0crwdne1022:0', + 'description_disabled' => 'crwdns1420:0crwdne1420:0', + 'verified' => 'crwdns1023:0crwdne1023:0', + 'not_verified' => 'crwdns1024:0crwdne1024:0', + 'subscriber' => 'crwdns1025:0crwdne1025:0', + 'no_subscriptions' => 'crwdns1026:0crwdne1026:0', + 'global' => 'crwdns1421:0crwdne1421:0', + 'add' => [ + 'title' => 'crwdns1027:0crwdne1027:0', + 'success' => 'crwdns1028:0crwdne1028:0', + 'failure' => 'crwdns1029:0crwdne1029:0', + 'help' => 'crwdns1030:0crwdne1030:0', ], 'edit' => [ - 'title' => 'crwdns575:0crwdne575:0', - 'success' => 'crwdns530:0crwdne530:0', - 'failure' => 'crwdns700:0crwdne700:0', + 'title' => 'crwdns1031:0crwdne1031:0', + 'success' => 'crwdns1032:0crwdne1032:0', + 'failure' => 'crwdns1033:0crwdne1033:0', ], ], // Team 'team' => [ - 'team' => 'crwdns182:0crwdne182:0', - 'member' => 'crwdns336:0crwdne336:0', - 'profile' => 'crwdns337:0crwdne337:0', - 'description' => 'crwdns338:0crwdne338:0', + 'team' => 'crwdns1034:0crwdne1034:0', + 'member' => 'crwdns1035:0crwdne1035:0', + 'profile' => 'crwdns1036:0crwdne1036:0', + 'description' => 'crwdns1325:0crwdne1325:0', 'add' => [ - 'title' => 'crwdns576:0crwdne576:0', - 'success' => 'crwdns701:0crwdne701:0', - 'failure' => 'crwdns702:0crwdne702:0', + 'title' => 'crwdns1038:0crwdne1038:0', + 'success' => 'crwdns1039:0crwdne1039:0', + 'failure' => 'crwdns1040:0crwdne1040:0', ], 'edit' => [ - 'title' => 'crwdns578:0crwdne578:0', - 'success' => 'crwdns703:0crwdne703:0', - 'failure' => 'crwdns704:0crwdne704:0', + 'title' => 'crwdns1041:0crwdne1041:0', + 'success' => 'crwdns1042:0crwdne1042:0', + 'failure' => 'crwdns1043:0crwdne1043:0', ], 'delete' => [ - 'success' => 'crwdns579:0crwdne579:0', - 'failure' => 'crwdns705:0crwdne705:0', + 'success' => 'crwdns1044:0crwdne1044:0', + 'failure' => 'crwdns1045:0crwdne1045:0', ], 'invite' => [ - 'title' => 'crwdns580:0crwdne580:0', - 'success' => 'crwdns581:0crwdne581:0', - 'failure' => 'crwdns706:0crwdne706:0', + 'title' => 'crwdns1046:0crwdne1046:0', + 'success' => 'crwdns1047:0crwdne1047:0', + 'failure' => 'crwdns1048:0crwdne1048:0', ], ], // Settings 'settings' => [ - 'settings' => 'crwdns192:0crwdne192:0', + 'settings' => 'crwdns1049:0crwdne1049:0', 'app-setup' => [ - 'app-setup' => 'crwdns345:0crwdne345:0', - 'images-only' => 'crwdns346:0crwdne346:0', - 'too-big' => 'crwdns347:0crwdne347:0', + 'app-setup' => 'crwdns1050:0crwdne1050:0', + 'images-only' => 'crwdns1051:0crwdne1051:0', + 'too-big' => 'crwdns1052:0crwdne1052:0', ], 'analytics' => [ - 'analytics' => 'crwdns583:0crwdne583:0', + 'analytics' => 'crwdns1053:0crwdne1053:0', + ], + 'log' => [ + 'log' => 'crwdns1054:0crwdne1054:0', ], 'localization' => [ - 'localization' => 'crwdns584:0crwdne584:0', + 'localization' => 'crwdns1055:0crwdne1055:0', ], 'customization' => [ - 'customization' => 'crwdns707:0crwdne707:0', - 'header' => 'crwdns708:0crwdne708:0', - 'footer' => 'crwdns709:0crwdne709:0', + 'customization' => 'crwdns1056:0crwdne1056:0', + 'header' => 'crwdns1057:0crwdne1057:0', + 'footer' => 'crwdns1058:0crwdne1058:0', + ], + 'mail' => [ + 'mail' => 'crwdns1059:0crwdne1059:0', + 'test' => 'crwdns1060:0crwdne1060:0', + 'email' => [ + 'subject' => 'crwdns1061:0crwdne1061:0', + 'body' => 'crwdns1062:0crwdne1062:0', + ], ], 'security' => [ - 'security' => 'crwdns348:0crwdne348:0', - 'two-factor' => 'crwdns474:0crwdne474:0', + 'security' => 'crwdns1063:0crwdne1063:0', + 'two-factor' => 'crwdns1064:0crwdne1064:0', ], 'stylesheet' => [ - 'stylesheet' => 'crwdns349:0crwdne349:0', + 'stylesheet' => 'crwdns1065:0crwdne1065:0', ], 'theme' => [ - 'theme' => 'crwdns350:0crwdne350:0', + 'theme' => 'crwdns1066:0crwdne1066:0', ], 'edit' => [ - 'success' => 'crwdns351:0crwdne351:0', - 'failure' => 'crwdns352:0crwdne352:0', + 'success' => 'crwdns1067:0crwdne1067:0', + 'failure' => 'crwdns1068:0crwdne1068:0', ], 'credits' => [ - 'credits' => 'crwdns765:0crwdne765:0', - 'contributors' => 'crwdns766:0crwdne766:0', - 'license' => 'crwdns767:0%20Ccrwdnd767:0%20Dcrwdne767:0', - 'backers-title' => 'crwdns768:0crwdne768:0', - 'backers' => 'crwdns769:0crwdne769:0', - 'thank-you' => 'crwdns770:0crwdne770:0', + 'credits' => 'crwdns1069:0crwdne1069:0', + 'contributors' => 'crwdns1070:0crwdne1070:0', + 'license' => 'crwdns1071:0%20Ccrwdnd1071:0%20crwdne1071:0', + 'backers-title' => 'crwdns1072:0crwdne1072:0', + 'backers' => 'crwdns1073:0crwdne1073:0', + 'thank-you' => 'crwdns1074:0crwdne1074:0', ], ], // Login 'login' => [ - 'login' => 'crwdns199:0crwdne199:0', - 'logged_in' => 'crwdns353:0crwdne353:0', - 'welcome' => 'crwdns354:0crwdne354:0', - 'two-factor' => 'crwdns355:0crwdne355:0', + 'login' => 'crwdns1075:0crwdne1075:0', + 'logged_in' => 'crwdns1076:0crwdne1076:0', + 'welcome' => 'crwdns1077:0crwdne1077:0', + 'two-factor' => 'crwdns1078:0crwdne1078:0', ], // Sidebar footer - 'help' => 'crwdns202:0crwdne202:0', - 'status_page' => 'crwdns203:0crwdne203:0', - 'logout' => 'crwdns204:0crwdne204:0', + 'help' => 'crwdns1079:0crwdne1079:0', + 'status_page' => 'crwdns1080:0crwdne1080:0', + 'logout' => 'crwdns1081:0crwdne1081:0', // Notifications 'notifications' => [ - 'notifications' => 'crwdns205:0crwdne205:0', - 'awesome' => 'crwdns356:0crwdne356:0', - 'whoops' => 'crwdns357:0crwdne357:0', + 'notifications' => 'crwdns1082:0crwdne1082:0', + 'awesome' => 'crwdns1083:0crwdne1083:0', + 'whoops' => 'crwdns1084:0crwdne1084:0', ], // Widgets 'widgets' => [ - 'support' => 'crwdns771:0crwdne771:0', - 'support_subtitle' => 'crwdns772:0crwdne772:0', - 'news' => 'crwdns773:0crwdne773:0', - 'news_subtitle' => 'crwdns774:0crwdne774:0', + 'support' => 'crwdns1085:0crwdne1085:0', + 'support_subtitle' => 'crwdns1086:0crwdne1086:0', + 'news' => 'crwdns1087:0crwdne1087:0', + 'news_subtitle' => 'crwdns1088:0crwdne1088:0', ], // Welcome modal 'welcome' => [ - 'welcome' => 'crwdns650:0crwdne650:0', - 'message' => 'crwdns359:0crwdne359:0', - 'close' => 'crwdns710:0crwdne710:0', + 'welcome' => 'crwdns1089:0crwdne1089:0', + 'message' => 'crwdns1090:0crwdne1090:0', + 'close' => 'crwdns1091:0crwdne1091:0', 'steps' => [ - 'component' => 'crwdns361:0crwdne361:0', - 'incident' => 'crwdns362:0crwdne362:0', - 'customize' => 'crwdns432:0crwdne432:0', - 'team' => 'crwdns433:0crwdne433:0', - 'api' => 'crwdns434:0crwdne434:0', - 'two-factor' => 'crwdns479:0crwdne479:0', + 'component' => 'crwdns1092:0crwdne1092:0', + 'incident' => 'crwdns1093:0crwdne1093:0', + 'customize' => 'crwdns1094:0crwdne1094:0', + 'team' => 'crwdns1095:0crwdne1095:0', + 'api' => 'crwdns1096:0crwdne1096:0', + 'two-factor' => 'crwdns1097:0crwdne1097:0', ], ], diff --git a/resources/lang/en-UD/forms.php b/resources/lang/en-UD/forms.php index 3fe82aea955b..36c814b099f7 100644 --- a/resources/lang/en-UD/forms.php +++ b/resources/lang/en-UD/forms.php @@ -13,175 +13,236 @@ // Setup form fields 'setup' => [ - 'email' => 'crwdns212:0crwdne212:0', - 'username' => 'crwdns374:0crwdne374:0', - 'password' => 'crwdns375:0crwdne375:0', - 'site_name' => 'crwdns376:0crwdne376:0', - 'site_domain' => 'crwdns377:0crwdne377:0', - 'site_timezone' => 'crwdns378:0crwdne378:0', - 'site_locale' => 'crwdns379:0crwdne379:0', - 'enable_google2fa' => 'crwdns380:0crwdne380:0', - 'cache_driver' => 'crwdns508:0crwdne508:0', - 'session_driver' => 'crwdns509:0crwdne509:0', + 'email' => 'crwdns1098:0crwdne1098:0', + 'username' => 'crwdns1099:0crwdne1099:0', + 'password' => 'crwdns1100:0crwdne1100:0', + 'site_name' => 'crwdns1101:0crwdne1101:0', + 'site_domain' => 'crwdns1102:0crwdne1102:0', + 'site_timezone' => 'crwdns1103:0crwdne1103:0', + 'site_locale' => 'crwdns1104:0crwdne1104:0', + 'enable_google2fa' => 'crwdns1105:0crwdne1105:0', + 'cache_driver' => 'crwdns1106:0crwdne1106:0', + 'queue_driver' => 'crwdns1107:0crwdne1107:0', + 'session_driver' => 'crwdns1108:0crwdne1108:0', + 'mail_driver' => 'crwdns1109:0crwdne1109:0', + 'mail_host' => 'crwdns1110:0crwdne1110:0', + 'mail_address' => 'crwdns1111:0crwdne1111:0', + 'mail_username' => 'crwdns1112:0crwdne1112:0', + 'mail_password' => 'crwdns1113:0crwdne1113:0', ], // Login form fields 'login' => [ - 'login' => 'crwdns651:0crwdne651:0', - 'email' => 'crwdns217:0crwdne217:0', - 'password' => 'crwdns381:0crwdne381:0', - '2fauth' => 'crwdns382:0crwdne382:0', - 'invalid' => 'crwdns652:0crwdne652:0', - 'invalid-token' => 'crwdns384:0crwdne384:0', - 'cookies' => 'crwdns480:0crwdne480:0', - 'rate-limit' => 'crwdns781:0crwdne781:0', + 'login' => 'crwdns1114:0crwdne1114:0', + 'email' => 'crwdns1115:0crwdne1115:0', + 'password' => 'crwdns1116:0crwdne1116:0', + '2fauth' => 'crwdns1117:0crwdne1117:0', + 'invalid' => 'crwdns1118:0crwdne1118:0', + 'invalid-token' => 'crwdns1119:0crwdne1119:0', + 'cookies' => 'crwdns1120:0crwdne1120:0', + 'rate-limit' => 'crwdns1121:0crwdne1121:0', + 'remember_me' => 'crwdns1122:0crwdne1122:0', ], // Incidents form fields 'incidents' => [ - 'name' => 'crwdns219:0crwdne219:0', - 'status' => 'crwdns385:0crwdne385:0', - 'component' => 'crwdns386:0crwdne386:0', - 'message' => 'crwdns387:0crwdne387:0', - 'message-help' => 'crwdns388:0crwdne388:0', - 'scheduled_at' => 'crwdns464:0crwdne464:0', - 'incident_time' => 'crwdns481:0crwdne481:0', - 'notify_subscribers' => 'crwdns585:0crwdne585:0', - 'visibility' => 'crwdns711:0crwdne711:0', - 'public' => 'crwdns483:0crwdne483:0', - 'logged_in_only' => 'crwdns586:0crwdne586:0', + 'name' => 'crwdns1123:0crwdne1123:0', + 'status' => 'crwdns1124:0crwdne1124:0', + 'component' => 'crwdns1125:0crwdne1125:0', + 'component_status' => 'crwdns1425:0crwdne1425:0', + 'message' => 'crwdns1126:0crwdne1126:0', + 'message-help' => 'crwdns1127:0crwdne1127:0', + 'occurred_at' => 'crwdns1128:0crwdne1128:0', + 'notify_subscribers' => 'crwdns1129:0crwdne1129:0', + 'notify_disabled' => 'crwdns1426:0crwdne1426:0', + 'visibility' => 'crwdns1130:0crwdne1130:0', + 'stick_status' => 'crwdns1131:0crwdne1131:0', + 'stickied' => 'crwdns1132:0crwdne1132:0', + 'not_stickied' => 'crwdns1133:0crwdne1133:0', + 'public' => 'crwdns1134:0crwdne1134:0', + 'logged_in_only' => 'crwdns1135:0crwdne1135:0', 'templates' => [ - 'name' => 'crwdns389:0crwdne389:0', - 'template' => 'crwdns390:0crwdne390:0', - 'twig' => 'crwdns653:0crwdne653:0', + 'name' => 'crwdns1136:0crwdne1136:0', + 'template' => 'crwdns1137:0crwdne1137:0', + 'twig' => 'crwdns1138:0crwdne1138:0', + ], + ], + + 'schedules' => [ + 'name' => 'crwdns1139:0crwdne1139:0', + 'status' => 'crwdns1140:0crwdne1140:0', + 'message' => 'crwdns1141:0crwdne1141:0', + 'message-help' => 'crwdns1142:0crwdne1142:0', + 'scheduled_at' => 'crwdns1143:0crwdne1143:0', + 'completed_at' => 'crwdns1144:0crwdne1144:0', + 'templates' => [ + 'name' => 'crwdns1145:0crwdne1145:0', + 'template' => 'crwdns1146:0crwdne1146:0', + 'twig' => 'crwdns1147:0crwdne1147:0', ], ], // Components form fields 'components' => [ - 'name' => 'crwdns225:0crwdne225:0', - 'status' => 'crwdns391:0crwdne391:0', - 'group' => 'crwdns392:0crwdne392:0', - 'description' => 'crwdns393:0crwdne393:0', - 'link' => 'crwdns394:0crwdne394:0', - 'tags' => 'crwdns395:0crwdne395:0', - 'tags-help' => 'crwdns396:0crwdne396:0', - 'enabled' => 'crwdns587:0crwdne587:0', + 'name' => 'crwdns1148:0crwdne1148:0', + 'status' => 'crwdns1149:0crwdne1149:0', + 'group' => 'crwdns1150:0crwdne1150:0', + 'description' => 'crwdns1151:0crwdne1151:0', + 'link' => 'crwdns1152:0crwdne1152:0', + 'tags' => 'crwdns1153:0crwdne1153:0', + 'tags-help' => 'crwdns1154:0crwdne1154:0', + 'enabled' => 'crwdns1155:0crwdne1155:0', 'groups' => [ - 'name' => 'crwdns397:0crwdne397:0', - 'collapsing' => 'crwdns712:0crwdne712:0', - 'visible' => 'crwdns713:0crwdne713:0', - 'collapsed' => 'crwdns714:0crwdne714:0', - 'collapsed_incident' => 'crwdns715:0crwdne715:0', + 'name' => 'crwdns1156:0crwdne1156:0', + 'collapsing' => 'crwdns1157:0crwdne1157:0', + 'visible' => 'crwdns1158:0crwdne1158:0', + 'collapsed' => 'crwdns1159:0crwdne1159:0', + 'collapsed_incident' => 'crwdns1160:0crwdne1160:0', + 'visibility' => 'crwdns1161:0crwdne1161:0', + 'visibility_public' => 'crwdns1162:0crwdne1162:0', + 'visibility_authenticated' => 'crwdns1163:0crwdne1163:0', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'crwdns1164:0crwdne1164:0', + 'description' => 'crwdns1165:0crwdne1165:0', + 'start_at' => 'crwdns1166:0crwdne1166:0', + 'timezone' => 'crwdns1167:0crwdne1167:0', + 'schedule_frequency' => 'crwdns1168:0crwdne1168:0', + 'completion_latency' => 'crwdns1169:0crwdne1169:0', + 'group' => 'crwdns1170:0crwdne1170:0', + 'active' => 'crwdns1171:0crwdne1171:0', + 'groups' => [ + 'name' => 'crwdns1172:0crwdne1172:0', ], ], // Metric form fields 'metrics' => [ - 'name' => 'crwdns465:0crwdne465:0', - 'suffix' => 'crwdns466:0crwdne466:0', - 'description' => 'crwdns467:0crwdne467:0', - 'description-help' => 'crwdns468:0crwdne468:0', - 'display-chart' => 'crwdns469:0crwdne469:0', - 'default-value' => 'crwdns588:0crwdne588:0', - 'calc_type' => 'crwdns589:0crwdne589:0', - 'type_sum' => 'crwdns476:0crwdne476:0', - 'type_avg' => 'crwdns477:0crwdne477:0', - 'places' => 'crwdns590:0crwdne590:0', - 'default_view' => 'crwdns655:0crwdne655:0', - 'threshold' => 'crwdns725:0crwdne725:0', + 'name' => 'crwdns1173:0crwdne1173:0', + 'suffix' => 'crwdns1174:0crwdne1174:0', + 'description' => 'crwdns1175:0crwdne1175:0', + 'description-help' => 'crwdns1176:0crwdne1176:0', + 'display-chart' => 'crwdns1177:0crwdne1177:0', + 'default-value' => 'crwdns1178:0crwdne1178:0', + 'calc_type' => 'crwdns1179:0crwdne1179:0', + 'type_sum' => 'crwdns1180:0crwdne1180:0', + 'type_avg' => 'crwdns1181:0crwdne1181:0', + 'places' => 'crwdns1182:0crwdne1182:0', + 'default_view' => 'crwdns1183:0crwdne1183:0', + 'threshold' => 'crwdns1184:0crwdne1184:0', + 'visibility' => 'crwdns1185:0crwdne1185:0', + 'visibility_authenticated' => 'crwdns1186:0crwdne1186:0', + 'visibility_public' => 'crwdns1187:0crwdne1187:0', + 'visibility_hidden' => 'crwdns1188:0crwdne1188:0', 'points' => [ - 'value' => 'crwdns471:0crwdne471:0', + 'value' => 'crwdns1189:0crwdne1189:0', ], ], // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => 'crwdns716:0crwdne716:0', - 'site-url' => 'crwdns398:0crwdne398:0', - 'display-graphs' => 'crwdns472:0crwdne472:0', - 'about-this-page' => 'crwdns402:0crwdne402:0', - 'days-of-incidents' => 'crwdns403:0crwdne403:0', - 'banner' => 'crwdns717:0crwdne717:0', - 'banner-help' => 'crwdns405:0crwdne405:0', - 'subscribers' => 'crwdns513:0crwdne513:0', - 'automatic_localization' => 'crwdns726:0crwdne726:0', + 'site-name' => 'crwdns1190:0crwdne1190:0', + 'site-url' => 'crwdns1191:0crwdne1191:0', + 'display-graphs' => 'crwdns1192:0crwdne1192:0', + 'about-this-page' => 'crwdns1193:0crwdne1193:0', + 'days-of-incidents' => 'crwdns1194:0crwdne1194:0', + 'time_before_refresh' => 'crwdns1434:0crwdne1434:0', + 'major_outage_rate' => 'crwdns1444:0crwdne1444:0', + 'banner' => 'crwdns1195:0crwdne1195:0', + 'banner-help' => 'crwdns1435:0crwdne1435:0', + 'subscribers' => 'crwdns1197:0crwdne1197:0', + 'suppress_notifications_in_maintenance' => 'crwdns1427:0crwdne1427:0', + 'skip_subscriber_verification' => 'crwdns1198:0crwdne1198:0', + 'automatic_localization' => 'crwdns1199:0crwdne1199:0', + 'enable_external_dependencies' => 'crwdns1200:0crwdne1200:0', + 'show_timezone' => 'crwdns1436:0crwdne1436:0', + 'only_disrupted_days' => 'crwdns1202:0crwdne1202:0', ], 'analytics' => [ - 'analytics_google' => 'crwdns591:0crwdne591:0', - 'analytics_gosquared' => 'crwdns592:0crwdne592:0', - 'analytics_piwik_url' => 'crwdns593:0crwdne593:0', - 'analytics_piwik_siteid' => 'crwdns594:0crwdne594:0', + 'analytics_google' => 'crwdns1203:0crwdne1203:0', + 'analytics_gosquared' => 'crwdns1204:0crwdne1204:0', + 'analytics_piwik_url' => 'crwdns1205:0crwdne1205:0', + 'analytics_piwik_siteid' => 'crwdns1206:0crwdne1206:0', ], 'localization' => [ - 'site-timezone' => 'crwdns595:0crwdne595:0', - 'site-locale' => 'crwdns596:0crwdne596:0', - 'date-format' => 'crwdns597:0crwdne597:0', - 'incident-date-format' => 'crwdns598:0crwdne598:0', + 'site-timezone' => 'crwdns1207:0crwdne1207:0', + 'site-locale' => 'crwdns1208:0crwdne1208:0', + 'date-format' => 'crwdns1209:0crwdne1209:0', + 'incident-date-format' => 'crwdns1210:0crwdne1210:0', ], 'security' => [ - 'allowed-domains' => 'crwdns599:0crwdne599:0', - 'allowed-domains-help' => 'crwdns408:0crwdne408:0', + 'allowed-domains' => 'crwdns1211:0crwdne1211:0', + 'allowed-domains-help' => 'crwdns1212:0crwdne1212:0', + 'always-authenticate' => 'crwdns1445:0crwdne1445:0', + 'always-authenticate-help' => 'crwdns1446:0crwdne1446:0', ], 'stylesheet' => [ - 'custom-css' => 'crwdns718:0crwdne718:0', + 'custom-css' => 'crwdns1213:0crwdne1213:0', ], 'theme' => [ - 'background-color' => 'crwdns719:0crwdne719:0', - 'background-fills' => 'crwdns600:0crwdne600:0', - 'banner-background-color' => 'crwdns601:0crwdne601:0', - 'banner-padding' => 'crwdns602:0crwdne602:0', - 'fullwidth-banner' => 'crwdns603:0crwdne603:0', - 'text-color' => 'crwdns720:0crwdne720:0', - 'dashboard-login' => 'crwdns604:0crwdne604:0', - 'reds' => 'crwdns605:0crwdne605:0', - 'blues' => 'crwdns606:0crwdne606:0', - 'greens' => 'crwdns607:0crwdne607:0', - 'yellows' => 'crwdns608:0crwdne608:0', - 'oranges' => 'crwdns609:0crwdne609:0', - 'metrics' => 'crwdns610:0crwdne610:0', - 'links' => 'crwdns611:0crwdne611:0', + 'background-color' => 'crwdns1214:0crwdne1214:0', + 'background-fills' => 'crwdns1215:0crwdne1215:0', + 'banner-background-color' => 'crwdns1216:0crwdne1216:0', + 'banner-padding' => 'crwdns1217:0crwdne1217:0', + 'fullwidth-banner' => 'crwdns1442:0crwdne1442:0', + 'text-color' => 'crwdns1219:0crwdne1219:0', + 'dashboard-login' => 'crwdns1220:0crwdne1220:0', + 'reds' => 'crwdns1221:0crwdne1221:0', + 'blues' => 'crwdns1222:0crwdne1222:0', + 'greens' => 'crwdns1223:0crwdne1223:0', + 'yellows' => 'crwdns1224:0crwdne1224:0', + 'oranges' => 'crwdns1225:0crwdne1225:0', + 'metrics' => 'crwdns1226:0crwdne1226:0', + 'links' => 'crwdns1227:0crwdne1227:0', ], ], 'user' => [ - 'username' => 'crwdns244:0crwdne244:0', - 'email' => 'crwdns412:0crwdne412:0', - 'password' => 'crwdns413:0crwdne413:0', - 'api-token' => 'crwdns414:0crwdne414:0', - 'api-token-help' => 'crwdns436:0crwdne436:0', - 'gravatar' => 'crwdns612:0crwdne612:0', - 'user_level' => 'crwdns613:0crwdne613:0', + 'username' => 'crwdns1228:0crwdne1228:0', + 'email' => 'crwdns1229:0crwdne1229:0', + 'password' => 'crwdns1230:0crwdne1230:0', + 'api-token' => 'crwdns1231:0crwdne1231:0', + 'api-token-help' => 'crwdns1232:0crwdne1232:0', + 'gravatar' => 'crwdns1233:0crwdne1233:0', + 'user_level' => 'crwdns1234:0crwdne1234:0', 'levels' => [ - 'admin' => 'crwdns614:0crwdne614:0', - 'user' => 'crwdns615:0crwdne615:0', + 'admin' => 'crwdns1235:0crwdne1235:0', + 'user' => 'crwdns1236:0crwdne1236:0', ], '2fa' => [ - 'help' => 'crwdns416:0crwdne416:0', + 'help' => 'crwdns1237:0crwdne1237:0', ], 'team' => [ - 'description' => 'crwdns616:0crwdne616:0', - 'email' => 'crwdns617:0crwdne617:0', + 'description' => 'crwdns1238:0crwdne1238:0', + 'email' => 'crwdns1423:0crwdne1423:0', ], ], + 'general' => [ + 'timezone' => 'crwdns1240:0crwdne1240:0', + ], + // Buttons - 'add' => 'crwdns249:0crwdne249:0', - 'save' => 'crwdns250:0crwdne250:0', - 'update' => 'crwdns251:0crwdne251:0', - 'create' => 'crwdns252:0crwdne252:0', - 'edit' => 'crwdns253:0crwdne253:0', - 'delete' => 'crwdns254:0crwdne254:0', - 'submit' => 'crwdns255:0crwdne255:0', - 'cancel' => 'crwdns256:0crwdne256:0', - 'remove' => 'crwdns257:0crwdne257:0', - 'invite' => 'crwdns618:0crwdne618:0', - 'signup' => 'crwdns619:0crwdne619:0', + 'add' => 'crwdns1241:0crwdne1241:0', + 'save' => 'crwdns1242:0crwdne1242:0', + 'update' => 'crwdns1243:0crwdne1243:0', + 'create' => 'crwdns1244:0crwdne1244:0', + 'edit' => 'crwdns1245:0crwdne1245:0', + 'delete' => 'crwdns1246:0crwdne1246:0', + 'submit' => 'crwdns1247:0crwdne1247:0', + 'cancel' => 'crwdns1248:0crwdne1248:0', + 'remove' => 'crwdns1249:0crwdne1249:0', + 'invite' => 'crwdns1250:0crwdne1250:0', + 'signup' => 'crwdns1251:0crwdne1251:0', + 'manage_updates' => 'crwdns1424:0crwdne1424:0', // Other - 'optional' => 'crwdns417:0crwdne417:0', + 'optional' => 'crwdns1252:0crwdne1252:0', ]; diff --git a/resources/lang/en-UD/notifications.php b/resources/lang/en-UD/notifications.php new file mode 100644 index 000000000000..5bbb05e74456 --- /dev/null +++ b/resources/lang/en-UD/notifications.php @@ -0,0 +1,108 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'crwdns1354:0crwdne1354:0', + 'greeting' => 'crwdns1355:0crwdne1355:0', + 'content' => 'crwdns1356:0crwdne1356:0', + 'action' => 'crwdns1357:0crwdne1357:0', + ], + 'slack' => [ + 'title' => 'crwdns1358:0crwdne1358:0', + 'content' => 'crwdns1359:0crwdne1359:0', + ], + 'sms' => [ + 'content' => 'crwdns1360:0crwdne1360:0', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'crwdns1361:0crwdne1361:0', + 'greeting' => 'crwdns1362:0crwdne1362:0', + 'content' => 'crwdns1363:0crwdne1363:0', + 'action' => 'crwdns1364:0crwdne1364:0', + ], + 'slack' => [ + 'title' => 'crwdns1365:0crwdne1365:0', + 'content' => 'crwdns1366:0crwdne1366:0', + ], + 'sms' => [ + 'content' => 'crwdns1367:0crwdne1367:0', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'crwdns1368:0crwdne1368:0', + 'content' => 'crwdns1369:0crwdne1369:0', + 'title' => 'crwdns1370:0crwdne1370:0', + 'action' => 'crwdns1371:0crwdne1371:0', + ], + 'slack' => [ + 'title' => 'crwdns1372:0crwdne1372:0', + 'content' => 'crwdns1373:0crwdne1373:0', + ], + 'sms' => [ + 'content' => 'crwdns1374:0crwdne1374:0', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'crwdns1375:0crwdne1375:0', + 'content' => 'crwdns1376:0crwdne1376:0', + 'title' => 'crwdns1377:0crwdne1377:0', + 'action' => 'crwdns1378:0crwdne1378:0', + ], + 'slack' => [ + 'title' => 'crwdns1379:0crwdne1379:0', + 'content' => 'crwdns1380:0crwdne1380:0', + ], + 'sms' => [ + 'content' => 'crwdns1381:0crwdne1381:0', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'crwdns1382:0crwdne1382:0', + 'content' => 'crwdns1383:0crwdne1383:0', + 'title' => 'crwdns1384:0crwdne1384:0', + 'action' => 'crwdns1385:0crwdne1385:0', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'crwdns1386:0crwdne1386:0', + 'content' => 'crwdns1387:0crwdne1387:0', + 'title' => 'crwdns1388:0crwdne1388:0', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'crwdns1389:0crwdne1389:0', + 'content' => 'crwdns1390:0crwdne1390:0', + 'title' => 'crwdns1391:0crwdne1391:0', + 'action' => 'crwdns1392:0crwdne1392:0', + ], + ], + ], +]; diff --git a/resources/lang/en-UD/pagination.php b/resources/lang/en-UD/pagination.php index 08fa787b25c0..325882060d06 100644 --- a/resources/lang/en-UD/pagination.php +++ b/resources/lang/en-UD/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => 'crwdns89:0crwdne89:0', - 'next' => 'crwdns90:0crwdne90:0', + 'previous' => 'crwdns1393:0crwdne1393:0', + 'next' => 'crwdns1394:0crwdne1394:0', ]; diff --git a/resources/lang/en-UD/setup.php b/resources/lang/en-UD/setup.php index 754a9d1cabbd..4f7bbbeed144 100644 --- a/resources/lang/en-UD/setup.php +++ b/resources/lang/en-UD/setup.php @@ -10,14 +10,14 @@ */ return [ - 'setup' => 'crwdns258:0crwdne258:0', - 'title' => 'crwdns259:0crwdne259:0', - 'service_details' => 'crwdns260:0crwdne260:0', - 'env_setup' => 'crwdns514:0crwdne514:0', - 'status_page_setup' => 'crwdns261:0crwdne261:0', - 'show_support' => 'crwdns488:0crwdne488:0', - 'admin_account' => 'crwdns263:0crwdne263:0', - 'complete_setup' => 'crwdns264:0crwdne264:0', - 'completed' => 'crwdns291:0crwdne291:0', - 'finish_setup' => 'crwdns292:0crwdne292:0', + 'setup' => 'crwdns1255:0crwdne1255:0', + 'title' => 'crwdns1256:0crwdne1256:0', + 'service_details' => 'crwdns1257:0crwdne1257:0', + 'env_setup' => 'crwdns1258:0crwdne1258:0', + 'status_page_setup' => 'crwdns1259:0crwdne1259:0', + 'show_support' => 'crwdns1260:0crwdne1260:0', + 'admin_account' => 'crwdns1261:0crwdne1261:0', + 'complete_setup' => 'crwdns1262:0crwdne1262:0', + 'completed' => 'crwdns1263:0crwdne1263:0', + 'finish_setup' => 'crwdns1264:0crwdne1264:0', ]; diff --git a/resources/lang/en-UD/validation.php b/resources/lang/en-UD/validation.php index 0dc3076b34ac..8a727c3857da 100644 --- a/resources/lang/en-UD/validation.php +++ b/resources/lang/en-UD/validation.php @@ -22,72 +22,72 @@ | */ - 'accepted' => 'crwdns96:0crwdne96:0', - 'active_url' => 'crwdns97:0crwdne97:0', - 'after' => 'crwdns98:0crwdne98:0', - 'alpha' => 'crwdns99:0crwdne99:0', - 'alpha_dash' => 'crwdns100:0crwdne100:0', - 'alpha_num' => 'crwdns101:0crwdne101:0', - 'array' => 'crwdns102:0crwdne102:0', - 'before' => 'crwdns103:0crwdne103:0', + 'accepted' => 'crwdns1265:0crwdne1265:0', + 'active_url' => 'crwdns1266:0crwdne1266:0', + 'after' => 'crwdns1267:0crwdne1267:0', + 'alpha' => 'crwdns1268:0crwdne1268:0', + 'alpha_dash' => 'crwdns1269:0crwdne1269:0', + 'alpha_num' => 'crwdns1270:0crwdne1270:0', + 'array' => 'crwdns1271:0crwdne1271:0', + 'before' => 'crwdns1272:0crwdne1272:0', 'between' => [ - 'numeric' => 'crwdns727:0crwdne727:0', - 'file' => 'crwdns728:0crwdne728:0', - 'string' => 'crwdns729:0crwdne729:0', - 'array' => 'crwdns420:0crwdne420:0', + 'numeric' => 'crwdns1273:0crwdne1273:0', + 'file' => 'crwdns1274:0crwdne1274:0', + 'string' => 'crwdns1275:0crwdne1275:0', + 'array' => 'crwdns1276:0crwdne1276:0', ], - 'boolean' => 'crwdns730:0crwdne730:0', - 'confirmed' => 'crwdns731:0crwdne731:0', - 'date' => 'crwdns732:0crwdne732:0', - 'date_format' => 'crwdns733:0crwdne733:0', - 'different' => 'crwdns734:0crwdne734:0', - 'digits' => 'crwdns735:0crwdne735:0', - 'digits_between' => 'crwdns736:0crwdne736:0', - 'email' => 'crwdns737:0crwdne737:0', - 'exists' => 'crwdns738:0crwdne738:0', - 'distinct' => 'crwdns739:0crwdne739:0', - 'filled' => 'crwdns740:0crwdne740:0', - 'image' => 'crwdns117:0crwdne117:0', - 'in' => 'crwdns741:0crwdne741:0', - 'in_array' => 'crwdns742:0crwdne742:0', - 'integer' => 'crwdns743:0crwdne743:0', - 'ip' => 'crwdns744:0crwdne744:0', - 'json' => 'crwdns621:0crwdne621:0', + 'boolean' => 'crwdns1277:0crwdne1277:0', + 'confirmed' => 'crwdns1278:0crwdne1278:0', + 'date' => 'crwdns1279:0crwdne1279:0', + 'date_format' => 'crwdns1280:0crwdne1280:0', + 'different' => 'crwdns1281:0crwdne1281:0', + 'digits' => 'crwdns1282:0crwdne1282:0', + 'digits_between' => 'crwdns1283:0crwdne1283:0', + 'email' => 'crwdns1284:0crwdne1284:0', + 'exists' => 'crwdns1285:0crwdne1285:0', + 'distinct' => 'crwdns1286:0crwdne1286:0', + 'filled' => 'crwdns1287:0crwdne1287:0', + 'image' => 'crwdns1288:0crwdne1288:0', + 'in' => 'crwdns1289:0crwdne1289:0', + 'in_array' => 'crwdns1290:0crwdne1290:0', + 'integer' => 'crwdns1291:0crwdne1291:0', + 'ip' => 'crwdns1292:0crwdne1292:0', + 'json' => 'crwdns1293:0crwdne1293:0', 'max' => [ - 'numeric' => 'crwdns745:0crwdne745:0', - 'file' => 'crwdns746:0crwdne746:0', - 'string' => 'crwdns747:0crwdne747:0', - 'array' => 'crwdns423:0crwdne423:0', + 'numeric' => 'crwdns1294:0crwdne1294:0', + 'file' => 'crwdns1295:0crwdne1295:0', + 'string' => 'crwdns1296:0crwdne1296:0', + 'array' => 'crwdns1297:0crwdne1297:0', ], - 'mimes' => 'crwdns748:0crwdne748:0', + 'mimes' => 'crwdns1298:0crwdne1298:0', 'min' => [ - 'numeric' => 'crwdns749:0crwdne749:0', - 'file' => 'crwdns424:0crwdne424:0', - 'string' => 'crwdns750:0crwdne750:0', - 'array' => 'crwdns751:0crwdne751:0', + 'numeric' => 'crwdns1299:0crwdne1299:0', + 'file' => 'crwdns1300:0crwdne1300:0', + 'string' => 'crwdns1301:0crwdne1301:0', + 'array' => 'crwdns1302:0crwdne1302:0', ], - 'not_in' => 'crwdns752:0crwdne752:0', - 'numeric' => 'crwdns753:0crwdne753:0', - 'present' => 'crwdns754:0crwdne754:0', - 'regex' => 'crwdns755:0crwdne755:0', - 'required' => 'crwdns756:0crwdne756:0', - 'required_if' => 'crwdns757:0crwdne757:0', - 'required_unless' => 'crwdns656:0crwdne656:0', - 'required_with' => 'crwdns758:0crwdne758:0', - 'required_with_all' => 'crwdns136:0crwdne136:0', - 'required_without' => 'crwdns759:0crwdne759:0', - 'required_without_all' => 'crwdns760:0crwdne760:0', - 'same' => 'crwdns761:0crwdne761:0', + 'not_in' => 'crwdns1303:0crwdne1303:0', + 'numeric' => 'crwdns1304:0crwdne1304:0', + 'present' => 'crwdns1305:0crwdne1305:0', + 'regex' => 'crwdns1306:0crwdne1306:0', + 'required' => 'crwdns1307:0crwdne1307:0', + 'required_if' => 'crwdns1308:0crwdne1308:0', + 'required_unless' => 'crwdns1309:0crwdne1309:0', + 'required_with' => 'crwdns1310:0crwdne1310:0', + 'required_with_all' => 'crwdns1311:0crwdne1311:0', + 'required_without' => 'crwdns1312:0crwdne1312:0', + 'required_without_all' => 'crwdns1313:0crwdne1313:0', + 'same' => 'crwdns1314:0crwdne1314:0', 'size' => [ - 'numeric' => 'crwdns762:0crwdne762:0', - 'file' => 'crwdns427:0crwdne427:0', - 'string' => 'crwdns428:0crwdne428:0', - 'array' => 'crwdns763:0crwdne763:0', + 'numeric' => 'crwdns1315:0crwdne1315:0', + 'file' => 'crwdns1316:0crwdne1316:0', + 'string' => 'crwdns1317:0crwdne1317:0', + 'array' => 'crwdns1318:0crwdne1318:0', ], - 'string' => 'crwdns764:0crwdne764:0', - 'timezone' => 'crwdns146:0crwdne146:0', - 'unique' => 'crwdns144:0crwdne144:0', - 'url' => 'crwdns145:0crwdne145:0', + 'string' => 'crwdns1319:0crwdne1319:0', + 'timezone' => 'crwdns1320:0crwdne1320:0', + 'unique' => 'crwdns1321:0crwdne1321:0', + 'url' => 'crwdns1322:0crwdne1322:0', /* |-------------------------------------------------------------------------- @@ -102,7 +102,7 @@ 'custom' => [ 'attribute-name' => [ - 'rule-name' => 'crwdns147:0crwdne147:0', + 'rule-name' => 'crwdns1323:0crwdne1323:0', ], ], diff --git a/resources/lang/en-US/cachet.php b/resources/lang/en-US/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/en-US/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/en-US/dashboard.php b/resources/lang/en-US/dashboard.php new file mode 100644 index 000000000000..a07a2e4a276d --- /dev/null +++ b/resources/lang/en-US/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome Back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new Status page!', + 'message' => 'Your status page is almost ready! You might want to configure these extra settings', + 'close' => 'Take me straight to my dashboard', + 'steps' => [ + 'component' => 'Create components', + 'incident' => 'Create incidents', + 'customize' => 'Customize', + 'team' => 'Add users', + 'api' => 'Generate API token', + 'two-factor' => 'Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/en-US/forms.php b/resources/lang/en-US/forms.php new file mode 100644 index 000000000000..c3630ab2c01d --- /dev/null +++ b/resources/lang/en-US/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background Color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text Color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/en-US/notifications.php b/resources/lang/en-US/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/en-US/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/en-US/pagination.php b/resources/lang/en-US/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/en-US/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/en-US/setup.php b/resources/lang/en-US/setup.php new file mode 100644 index 000000000000..044cf2e2aa44 --- /dev/null +++ b/resources/lang/en-US/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Setup Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/en-US/validation.php b/resources/lang/en-US/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/en-US/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/en/cachet.php b/resources/lang/en/cachet.php index d7eeb8e0fb27..cb24fc10e7c8 100644 --- a/resources/lang/en/cachet.php +++ b/resources/lang/en/cachet.php @@ -23,20 +23,20 @@ 'group' => [ 'other' => 'Other Components', ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', ], // Incidents 'incidents' => [ - 'none' => 'No incidents reported', - 'past' => 'Past Incidents', - 'previous_week' => 'Previous week', - 'next_week' => 'Next week', - 'stickied' => 'Stickied Incidents', - 'scheduled' => 'Scheduled Maintenance', - 'scheduled_at' => ', scheduled :timestamp', - 'posted' => 'Posted :timestamp', - 'status' => [ - 0 => 'Scheduled', // TODO: Hopefully remove this. + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ 1 => 'Investigating', 2 => 'Identified', 3 => 'Watching', @@ -44,11 +44,20 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] System operational|[2,Inf] All systems are operational', - 'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues', - 'major' => '[0,1] The service is experiencing a major outage|[2,Inf] Some systems are experiencing a major outage', + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', ], 'api' => [ @@ -68,47 +77,29 @@ // Subscriber 'subscriber' => [ - 'subscribe' => 'Subscribe to get the updates', - 'button' => 'Subscribe', - 'manage' => [ - 'no_subscriptions' => 'You\'re currently subscribed to all updates.', - 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', ], 'email' => [ - 'subscribe' => 'Subscribe to email updates.', - 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', - 'verified' => 'Your email subscription has been confirmed. Thank you!', - 'manage' => 'Manage your subscription', - 'unsubscribe' => 'Unsubscribe from email updates.', - 'unsubscribed' => 'Your email subscription has been cancelled.', - 'failure' => 'Something went wrong with the subscription.', - 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', - 'verify' => [ - 'text' => "Please confirm your email subscription to :app_name status updates.\n:link", - 'html' => '

          Please confirm your email subscription to :app_name status updates.

          ', - 'button' => 'Confirm Subscription', - ], - 'maintenance' => [ - 'subject' => '[Maintenance Scheduled] :name', - ], - 'incident' => [ - 'subject' => '[New Incident] :status: :name', - ], - 'component' => [ - 'subject' => 'Component Status Update', - 'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name', - 'html' => '

          The component :component_name has seen a status change. The component is now at :component_human_status.

          Thank you, :app_name

          ', - 'tooltip-title' => 'Subscribe to notifications for :component_name.', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name", - 'html' => '

          You have been invited to the team :app_name status page, to sign up follow the next link.

          :link

          Thank you, :app_name

          ', - ], + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', ], ], @@ -135,9 +126,18 @@ ], ], + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + // Other 'home' => 'Home', - 'description' => 'Stay up to date with the latest service updates from :app.', 'powered_by' => 'Powered by Cachet.', 'timezone' => 'Times are shown in :timezone.', 'about_this_site' => 'About This Site', diff --git a/resources/lang/en/dashboard.php b/resources/lang/en/dashboard.php index d019e51d3293..7dc9af669deb 100644 --- a/resources/lang/en/dashboard.php +++ b/resources/lang/en/dashboard.php @@ -11,16 +11,31 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => 'Incidents & Schedule', + 'title' => 'Incidents & Maintenance', 'incidents' => 'Incidents', - 'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported :count incidents.', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', 'incident-create-template' => 'Create Template', 'incident-templates' => 'Incident Templates', - 'updates' => '{0} Zero Updates|One Update|:count Updates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', 'add' => [ 'title' => 'Report an incident', 'success' => 'Incident added.', @@ -35,17 +50,13 @@ 'success' => 'The incident has been deleted and will not show on your status page.', 'failure' => 'The incident could not be deleted, please try again.', ], - 'update' => [ - 'title' => 'Create new incident update', - 'subtitle' => 'Add an update to :incident', - ], // Incident templates 'templates' => [ 'title' => 'Incident Templates', 'add' => [ 'title' => 'Create an incident template', - 'message' => 'You should add an incident template.', + 'message' => 'Create your first incident template.', 'success' => 'Your new incident template has been created.', 'failure' => 'Something went wrong with the incident template.', ], @@ -63,22 +74,22 @@ // Incident Maintenance 'schedule' => [ - 'schedule' => 'Scheduled Maintenance', - 'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported :count schedules.', + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', 'scheduled_at' => 'Scheduled at :timestamp', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', ], ], @@ -145,13 +156,15 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Subscribers', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => 'Verified', - 'not_verified' => 'Not verified', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', - 'add' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ 'title' => 'Add a new subscriber', 'success' => 'Subscriber has been added!', 'failure' => 'Something went wrong adding the subscriber, please try again.', @@ -169,7 +182,7 @@ 'team' => 'Team', 'member' => 'Member', 'profile' => 'Profile', - 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ 'title' => 'Add a new team member', 'success' => 'Team member added.', @@ -213,6 +226,14 @@ 'header' => 'Custom Header HTML', 'footer' => 'Custom Footer HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Security', 'two-factor' => 'Users without two-factor authentication', diff --git a/resources/lang/en/forms.php b/resources/lang/en/forms.php index cc85c86ae22c..075b7588a9cd 100644 --- a/resources/lang/en/forms.php +++ b/resources/lang/en/forms.php @@ -49,11 +49,12 @@ 'name' => 'Name', 'status' => 'Status', 'component' => 'Component', + 'component_status' => 'Component Status', 'message' => 'Message', 'message-help' => 'You may also use Markdown.', - 'scheduled_at' => 'When to schedule the maintenance for?', - 'incident_time' => 'When did this incident occur?', + 'occurred_at' => 'When did this incident occur?', 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', 'visibility' => 'Incident Visibility', 'stick_status' => 'Stick Incident', 'stickied' => 'Stickied', @@ -63,7 +64,21 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], @@ -107,18 +122,22 @@ // Metric form fields 'metrics' => [ - 'name' => 'Name', - 'suffix' => 'Suffix', - 'description' => 'Description', - 'description-help' => 'You may also use Markdown.', - 'display-chart' => 'Display chart on status page?', - 'default-value' => 'Default value', - 'calc_type' => 'Calculation of metrics', - 'type_sum' => 'Sum', - 'type_avg' => 'Average', - 'places' => 'Decimal places', - 'default_view' => 'Default view', - 'threshold' => 'How many minutes of threshold between metric points?', + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', 'points' => [ 'value' => 'Value', @@ -129,24 +148,27 @@ 'settings' => [ // Application setup 'app-setup' => [ - 'site-name' => 'Site Name', - 'site-url' => 'Site URL', - 'display-graphs' => 'Display graphs on status page?', - 'about-this-page' => 'About this page', - 'days-of-incidents' => 'How many days of incidents to show?', - 'banner' => 'Banner Image', - 'banner-help' => "It's recommended that you upload files no bigger than 930px wide .", - 'subscribers' => 'Allow people to signup to email notifications?', - 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', - 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', - 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', - 'show_timezone' => 'Show the timezone the status page is running in.', - 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', ], 'analytics' => [ 'analytics_google' => 'Google Analytics code', 'analytics_gosquared' => 'GoSquared Analytics code', - 'analytics_piwik_url' => 'URL of your Piwik instance (without http(s)://)', + 'analytics_piwik_url' => 'URL of your Piwik instance', 'analytics_piwik_siteid' => 'Piwik\'s site id', ], 'localization' => [ @@ -156,8 +178,10 @@ 'incident-date-format' => 'Incident timestamp format', ], 'security' => [ - 'allowed-domains' => 'Allowed domains', - 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', ], 'stylesheet' => [ 'custom-css' => 'Custom Stylesheet', @@ -167,7 +191,7 @@ 'background-fills' => 'Background fills (components, incidents, footer)', 'banner-background-color' => 'Banner background color', 'banner-padding' => 'Banner padding', - 'fullwidth-banner' => 'Enable fullwidth banner?', + 'fullwidth-banner' => 'Enable full width banner?', 'text-color' => 'Text color', 'dashboard-login' => 'Show dashboard button in the footer?', 'reds' => 'Red (used for errors)', @@ -197,7 +221,7 @@ ], 'team' => [ 'description' => 'Invite your team members by entering their email addresses here.', - 'email' => 'Email #:id', + 'email' => 'Your Team Members Email Address', ], ], @@ -205,18 +229,24 @@ 'timezone' => 'Select Timezone', ], + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + // Buttons - 'add' => 'Add', - 'save' => 'Save', - 'update' => 'Update', - 'create' => 'Create', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'submit' => 'Submit', - 'cancel' => 'Cancel', - 'remove' => 'Remove', - 'invite' => 'Invite', - 'signup' => 'Sign Up', + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', // Other 'optional' => '* Optional', diff --git a/resources/lang/en/notifications.php b/resources/lang/en/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/en/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php index add1092a8784..0ee724cf086b 100644 --- a/resources/lang/en/pagination.php +++ b/resources/lang/en/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« Previous', - 'next' => 'Next »', + 'previous' => 'Previous', + 'next' => 'Next', ]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index fb52c2f333ac..7d196d984dd0 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -31,60 +31,60 @@ 'array' => 'The :attribute must be an array.', 'before' => 'The :attribute must be a date before :date.', 'between' => [ - 'numeric' => 'The :attribute must be a date before :date.', - 'file' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', 'array' => 'The :attribute must have between :min and :max items.', ], - 'boolean' => 'The :attribute must have between :min and :max items.', - 'confirmed' => 'The :attribute field must be true or false.', - 'date' => 'The :attribute confirmation does not match.', - 'date_format' => 'The :attribute is not a valid date.', - 'different' => 'The :attribute does not match the format :format.', - 'digits' => 'The :attribute and :other must be different.', - 'digits_between' => 'The :attribute must be :digits digits.', - 'email' => 'The :attribute must be between :min and :max digits.', - 'exists' => 'The :attribute must be a valid email address.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', 'distinct' => 'The :attribute field has a duplicate value.', - 'filled' => 'The :attribute format is invalid.', + 'filled' => 'The :attribute field is required.', 'image' => 'The :attribute must be an image.', - 'in' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The selected :attribute is invalid.', - 'ip' => 'The :attribute must be an integer.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', 'json' => 'The :attribute must be a valid JSON string.', 'max' => [ - 'numeric' => 'The :attribute must be a valid IP address.', - 'file' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max kilobytes.', + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', 'array' => 'The :attribute may not have more than :max items.', ], - 'mimes' => 'The :attribute may not have more than :max items.', + 'mimes' => 'The :attribute must be a file of type: :values.', 'min' => [ - 'numeric' => 'The :attribute must be a file of type: :values.', + 'numeric' => 'The :attribute must be at least :min.', 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min kilobytes.', - 'array' => 'The :attribute must be at least :min characters.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', ], - 'not_in' => 'The :attribute must have at least :min items.', - 'numeric' => 'The selected :attribute is invalid.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute must be a number.', - 'required' => 'The :attribute format is invalid.', - 'required_if' => 'The :attribute field is required.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'The :attribute field is required when :values is present.', 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is present.', - 'required_without_all' => 'The :attribute field is required when :values is not present.', - 'same' => 'The :attribute field is required when none of :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', 'size' => [ - 'numeric' => 'The :attribute and :other must match.', + 'numeric' => 'The :attribute must be :size.', 'file' => 'The :attribute must be :size kilobytes.', 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', ], - 'string' => 'The :attribute must contain :size items.', + 'string' => 'The :attribute must be a string.', 'timezone' => 'The :attribute must be a valid zone.', 'unique' => 'The :attribute has already been taken.', 'url' => 'The :attribute format is invalid.', diff --git a/resources/lang/es-ES/cachet.php b/resources/lang/es-ES/cachet.php new file mode 100644 index 000000000000..4af5ce204849 --- /dev/null +++ b/resources/lang/es-ES/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Última actualización :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operacional', + 2 => 'Problemas de rendimiento', + 3 => 'Interrupción parcial', + 4 => 'Interrupción mayor', + ], + 'group' => [ + 'other' => 'Otros componentes', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Ningún incidente reportado', + 'past' => 'Incidencias anteriores', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', programado para :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigando', + 2 => 'Identificado', + 3 => 'Observando', + 4 => 'Corregido', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1] El sistema está actualmente experimentando problemas|[2,Inf] Algunos sistemas están experimentando problemas', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerar API Key', + 'revoke' => 'Revocar API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Última hora', + 'hourly' => 'Últimas 12 horas', + 'weekly' => 'Semana', + 'monthly' => 'Mes', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Suscríbete', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notificaciones', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Actualmente estás suscrito a todas las actualizaciones.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Actualmente estás suscrito a las siguientes actualizaciones.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Suscríbete para recibir actualizaciones por correo electrónico.', + 'subscribed' => 'Te has subscrito a las notificaciones por correo electrónico, por favor verifica tu correo electrónico para confirmar tu subscripción.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Tu subscripción por correo electrónico ha sido confirmada. Gracias!', + 'manage' => 'Administre su suscripción', + 'unsubscribe' => 'Darse de baja de alertas.', + 'unsubscribed' => 'Tu subscripción de correo electrónico ha sido cancelada.', + 'failure' => 'Algo salió mal con la subscripción.', + 'already-subscribed' => 'No se puede suscribir :email porque ya esta suscrito.', + ], + ], + + 'signup' => [ + 'title' => 'Registrarse', + 'username' => 'Nombre de usuario', + 'email' => 'Correo electrónico', + 'password' => 'Contraseña', + 'success' => 'Tu cuenta ha sido creada.', + 'failure' => 'Hubo algún error al registrarse.', + ], + + 'system' => [ + 'update' => 'Hay disponible una versión de Cachet más nueva. Puedes aprender sobre cómo actualizarla aquí!', + ], + + // Modal + 'modal' => [ + 'close' => 'Cerrar', + 'subscribe' => [ + 'title' => 'Subscribirse a actualizaciones de componentes', + 'body' => 'Introduce tu dirección de correo electrónico para subscribirte a las actualizaciones de este componente. Si ya estás subscrito, ya recibirás los correos electrónicos para este componente.', + 'button' => 'Suscríbete', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Mantente informado con las últimas actualizaciones de servicio de :app.', + ], + ], + + // Other + 'home' => 'Inicio', + 'powered_by' => 'La página de estado de :app está proporcionada por Cachet.', + 'timezone' => 'Los horarios son mostrados en :timezone.', + 'about_this_site' => 'Acerca de este sitio', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Estado del Feed', + +]; diff --git a/resources/lang/es-ES/dashboard.php b/resources/lang/es-ES/dashboard.php new file mode 100644 index 000000000000..b41b10f31670 --- /dev/null +++ b/resources/lang/es-ES/dashboard.php @@ -0,0 +1,304 @@ + 'Panel de Control', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidentes', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Crear plantilla', + 'incident-templates' => 'Plantillas de incidente', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Reportar incidente', + 'success' => 'Incidente agregado.', + 'failure' => 'Hubo un error agregando el incidente, por favor intente de nuevo.', + ], + 'edit' => [ + 'title' => 'Editar un incidente', + 'success' => 'Incidente actualizado.', + 'failure' => 'Hubo un error editando el incidente, por favor intente de nuevo.', + ], + 'delete' => [ + 'success' => 'El incidente se ha eliminado y no se mostrará en tu página de estado.', + 'failure' => 'El incidente no se pudo eliminar, por favor intente de nuevo.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Plantillas de incidente', + 'add' => [ + 'title' => 'Crear una plantilla de incidente', + 'message' => 'Create your first incident template.', + 'success' => 'Su nueva plantilla de incidentes ha sido creada.', + 'failure' => 'Algo salió mal con la plantilla de incidente.', + ], + 'edit' => [ + 'title' => 'Editar plantilla', + 'success' => 'La plantilla de incidente ha sido actualizada.', + 'failure' => 'Algo salió mal actualizando la plantilla de incidente', + ], + 'delete' => [ + 'success' => 'La plantilla de incidente se ha eliminado.', + 'failure' => 'La plantilla de incidente no se pudo eliminar. Por favor, inténtalo de nuevo.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Programado para :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Componentes', + 'component_statuses' => 'Estatus de los componentes', + 'listed_group' => 'Agrupado bajo :nombre', + 'add' => [ + 'title' => 'Agregar componente', + 'message' => 'Deberías agregar un componente.', + 'success' => 'Componente creado.', + 'failure' => 'Algo salió mal con el componente, por favor intente de nuevo.', + ], + 'edit' => [ + 'title' => 'Editar componente', + 'success' => 'Componente actualizado.', + 'failure' => 'Algo salió mal con el componente, por favor intente de nuevo.', + ], + 'delete' => [ + 'success' => 'El componente se ha eliminado!', + 'failure' => 'El componente no pudo ser eliminado, por favor, inténtelo de nuevo.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Grupo de componente|Grupos de componente', + 'no_components' => 'Usted debería agregar un grupo de componentes.', + 'add' => [ + 'title' => 'Agregar un grupo de componentes', + 'success' => 'Grupo de componentes agregado.', + 'failure' => 'Algo salió mal con el componente, por favor intente de nuevo.', + ], + 'edit' => [ + 'title' => 'Editar un grupo de componentes', + 'success' => 'Grupo de componentes actualizado.', + 'failure' => 'Algo salió mal con el componente, por favor intente de nuevo.', + ], + 'delete' => [ + 'success' => 'El grupo de componentes se ha eliminado!', + 'failure' => 'El grupo de componentes no pudo ser eliminado, por favor, inténtelo de nuevo.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Métricas', + 'add' => [ + 'title' => 'Crear una métrica o indicador', + 'message' => 'Deberías añadir una métrica.', + 'success' => 'Métrica creada.', + 'failure' => 'Algo salió mal con la métrica, por favor, inténtelo de nuevo.', + ], + 'edit' => [ + 'title' => 'Editar una métrica', + 'success' => 'Métrica actualizada.', + 'failure' => 'Algo salió mal con la métrica, por favor, inténtelo de nuevo.', + ], + 'delete' => [ + 'success' => 'La métrica se ha eliminado y no se mostrará más en tu página de estado.', + 'failure' => 'La métrica no pudo ser eliminada, por favor, inténtelo de nuevo.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Suscriptores', + 'description' => 'Los suscriptores recibirán actualizaciones por correo electrónico cuando se creen incidentes o se actualicen componentes.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verificado', + 'not_verified' => 'No confirmado', + 'subscriber' => ':email, suscrito :date', + 'no_subscriptions' => 'Suscrito a todas las actualizaciones', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Agregar un nuevo subscriptor', + 'success' => 'Subscriptor agregado.', + 'failure' => 'Algo salió mal al agregar el suscriptor, por favor, inténtelo de nuevo.', + 'help' => 'Agregue cada subscriptor en una línea nueva.', + ], + 'edit' => [ + 'title' => 'Actualizar subscriptor', + 'success' => 'Subscriptor actualizado.', + 'failure' => 'Algo salió mal al editar el suscriptor, por favor, inténtelo de nuevo.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Equipo', + 'member' => 'Miembro', + 'profile' => 'Perfil', + 'description' => 'Los miembros del equipo será capaces de añadir, modificar y editar componentes e incidentes.', + 'add' => [ + 'title' => 'Añadir a un nuevo miembro de equipo', + 'success' => 'Miembro del equipo agregado.', + 'failure' => 'No se pudo agregar el miembro del equipo, por favor vuelva a intentarlo.', + ], + 'edit' => [ + 'title' => 'Actualizar perfil', + 'success' => 'Perfil actualizado.', + 'failure' => 'Algo salió mal actualizando el perfil, por favor intente de nuevo.', + ], + 'delete' => [ + 'success' => 'El miembro del equipo ha sido eliminado y ya no tendrán acceso al Pane de Control!', + 'failure' => 'No se pudo agregar el miembro del equipo, por favor vuelva a intentarlo.', + ], + 'invite' => [ + 'title' => 'Invitar a un nuevo miembro al equipo', + 'success' => 'Se ha enviado una invitación', + 'failure' => 'La invitación no pudo ser enviada, por favor intente de nuevo.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Ajustes', + 'app-setup' => [ + 'app-setup' => 'Configuración de aplicación', + 'images-only' => 'Sólo puedes subir imágenes.', + 'too-big' => 'El archivo subido es demasiado grande. Sube una imagen con tamaño menor a: tamaño', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localización', + ], + 'customization' => [ + 'customization' => 'Personalización', + 'header' => 'Cabecera HTML personalizada', + 'footer' => 'Pie HTML personalizado', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Seguridad', + 'two-factor' => 'Usuarios sin autenticación de dos factores', + ], + 'stylesheet' => [ + 'stylesheet' => 'Hoja de estilo', + ], + 'theme' => [ + 'theme' => 'Tema', + ], + 'edit' => [ + 'success' => 'Configuración guardada.', + 'failure' => 'La configuración no se podido guardar.', + ], + 'credits' => [ + 'credits' => 'Créditos', + 'contributors' => 'Colaboradores', + 'license' => 'Cachet es un proyecto de código libre bajo la licencia BSD-3, liberado por Alt Three Services Limited.', + 'backers-title' => 'Patrocinadores', + 'backers' => 'Si desea apoyar futuros desarrollos, ingrese a la campaña de Cachet Patreon.', + 'thank-you' => 'Gracias a todos y cada uno de los :count colaboradores.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Iniciar Sesión', + 'logged_in' => 'Estás conectado.', + 'welcome' => '¡Bienvenido!', + 'two-factor' => 'Por favor ingresa tu token.', + ], + + // Sidebar footer + 'help' => 'Ayuda', + 'status_page' => 'Página de estado', + 'logout' => 'Salir', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notificaciones', + 'awesome' => 'Excelente.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Apoye Cachet', + 'support_subtitle' => '¡Visite nuestro proyecto en la página de Patreon!', + 'news' => 'Últimas noticias', + 'news_subtitle' => 'Obtener las actualizaciones más recientes', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Bienvenido a tu página de estado!', + 'message' => 'La página de estado está casi lista! Tal vez quieras configurar estos ajustes adicionales', + 'close' => 'Llévame directamente a mi dashboard', + 'steps' => [ + 'component' => 'Crear componentes', + 'incident' => 'Crear incidentes', + 'customize' => 'Personalizar', + 'team' => 'Agregar Usuarios', + 'api' => 'Generar token API', + 'two-factor' => 'Autenticación de dos factores', + ], + ], + +]; diff --git a/resources/lang/es-ES/forms.php b/resources/lang/es-ES/forms.php new file mode 100644 index 000000000000..21780e6da435 --- /dev/null +++ b/resources/lang/es-ES/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Correo electrónico', + 'username' => 'Nombre de usuario', + 'password' => 'Contraseña', + 'site_name' => 'Nombre del sitio', + 'site_domain' => 'Dominio de sitio', + 'site_timezone' => 'Selecciona tu zona horaria', + 'site_locale' => 'Selecciona tu idioma', + 'enable_google2fa' => 'Habilitar la verificación en dos pasos de Google', + 'cache_driver' => 'Controlador de Memoria Cache', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Controlador de Sesion', + 'mail_driver' => 'Valora al conductor', + 'mail_host' => 'Host de correo', + 'mail_address' => 'Dirección de Correo Físico', + 'mail_username' => 'Nombre de usuario de correo', + 'mail_password' => 'Contraseña de correo', + ], + + // Login form fields + 'login' => [ + 'login' => 'Nombre de usuario o dirección de correo electrónico', + 'email' => 'Correo electrónico', + 'password' => 'Contraseña', + '2fauth' => 'Código de Autenticación', + 'invalid' => 'Nombre de usuario o contraseña incorrecto', + 'invalid-token' => 'Token inválido', + 'cookies' => 'Usted debe habilitar cookies para logearse o iniciar sesion.', + 'rate-limit' => 'Límite de transferencia excedido.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nombre', + 'status' => 'Estado', + 'component' => 'Componente', + 'component_status' => 'Component Status', + 'message' => 'Mensaje', + 'message-help' => 'También puedes usar Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => '¿Notificar a los suscriptores?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Visibilidad del incidente', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Visible por el público', + 'logged_in_only' => 'Solo visible para usuarios logeados', + 'templates' => [ + 'name' => 'Nombre', + 'template' => 'Plantilla', + 'twig' => 'Las plantillas de incidentes pueden hacer uso del lenguaje de plantillas Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nombre', + 'status' => 'Estado', + 'message' => 'Mensaje', + 'message-help' => 'También puedes usar Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nombre', + 'template' => 'Plantilla', + 'twig' => 'Las plantillas de incidentes pueden hacer uso del lenguaje de plantillas Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nombre', + 'status' => 'Estado', + 'group' => 'Grupo', + 'description' => 'Descripción', + 'link' => 'Enlace', + 'tags' => 'Etiquetas', + 'tags-help' => 'Separado por comas.', + 'enabled' => '¿Componente habilitado?', + + 'groups' => [ + 'name' => 'Nombre', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Siempre expandido', + 'collapsed' => 'Contraer el grupo por defecto', + 'collapsed_incident' => 'Contraer el grupo, pero ampliar si hay problemas', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nombre', + 'description' => 'Descripción', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Grupo', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nombre', + 'suffix' => 'Sufijo', + 'description' => 'Descripción', + 'description-help' => 'También puedes usar Markdown.', + 'display-chart' => '¿Mostrar gráficas en la pagina de estado?', + 'default-value' => 'Valor predeterminado', + 'calc_type' => 'Cálculo de métricas', + 'type_sum' => 'Suma', + 'type_avg' => 'Promedio', + 'places' => 'Cantidad de decimales', + 'default_view' => 'Vista predeterminada', + 'threshold' => '¿Cuántos minutos de umbral entre púntos de métrica?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Valor', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nombre del sitio', + 'site-url' => 'URL del sitio', + 'display-graphs' => '¿Mostrar gráficas en la pagina de estado?', + 'about-this-page' => 'Sobre esta página', + 'days-of-incidents' => '¿Cuántos días de incidentes mostrar?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Imagen del banner', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => '¿Permitir a la gente inscribirse mediante noficiacion por correo electronico?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => '¿Traducir automáticamente la página de estado según el lenguaje del visitante?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Código de Google Analytics', + 'analytics_gosquared' => 'Código de GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Id de tu sitio Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Zona horaria del sitio', + 'site-locale' => 'Idioma del sitio', + 'date-format' => 'Formato de la fecha', + 'incident-date-format' => 'Formato de fecha de incidente', + ], + 'security' => [ + 'allowed-domains' => 'Dominios permitidos', + 'allowed-domains-help' => 'Separados por coma. El dominio establecido en la configuración del sitio formará automáticamente parte de los dominios permitidos.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Hoja de estilo personalizada', + ], + 'theme' => [ + 'background-color' => 'Color de fondo', + 'background-fills' => 'Relleno del fondo (componentes, incidentes, pie)', + 'banner-background-color' => 'Color de fondo del banner', + 'banner-padding' => 'Padding del banner', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Color del texto', + 'dashboard-login' => '¿Mostrar el botón de Panel de Control en el pie?', + 'reds' => 'Rojo (usado para errores)', + 'blues' => 'Azul (usado para información)', + 'greens' => 'Verde (usado para operaciones correctas)', + 'yellows' => 'Amarillo (usado para alertas)', + 'oranges' => 'Naranja (usado para avisos)', + 'metrics' => 'Relleno de las métricas', + 'links' => 'Enlaces', + ], + ], + + 'user' => [ + 'username' => 'Nombre de usuario', + 'email' => 'Correo electrónico', + 'password' => 'Contraseña', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerando tu token de API evitaras que las aplicaciones existentes puedan acceder a Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'Nivel de usuario', + 'levels' => [ + 'admin' => 'Administrador', + 'user' => 'Usuario', + ], + '2fa' => [ + 'help' => 'Habilitar autenticación de dos pasos aumenta la seguridad de tu cuenta. Necesitarás descargar Google Authenticator o una aplicación similar a su dispositivo móvil. Al iniciar sesión, te pedirá proporcionar un token generado por la aplicación.', + ], + 'team' => [ + 'description' => 'Invita a los miembros de equipo introduciendo sus direcciones de correo electrónico aquí.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Agregar', + 'save' => 'Guardar', + 'update' => 'Actualizar', + 'create' => 'Crear', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'submit' => 'Enviar', + 'cancel' => 'Cancelar', + 'remove' => 'Remover', + 'invite' => 'Invitar', + 'signup' => 'Registrarse', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Opcional', +]; diff --git a/resources/lang/es-ES/notifications.php b/resources/lang/es-ES/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/es-ES/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/es-ES/pagination.php b/resources/lang/es-ES/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/es-ES/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/es-ES/setup.php b/resources/lang/es-ES/setup.php new file mode 100644 index 000000000000..1438ce137977 --- /dev/null +++ b/resources/lang/es-ES/setup.php @@ -0,0 +1,23 @@ + 'Configurar', + 'title' => 'Configurar Cachet', + 'service_details' => 'Detalles del servicio', + 'env_setup' => 'Configuracion de entorno', + 'status_page_setup' => 'Configuración de la página de estado', + 'show_support' => '¿Deseas mostrar tu apoyo a Cachet?', + 'admin_account' => 'Cuenta de administrador', + 'complete_setup' => 'Completar configuración', + 'completed' => '¡Cachet se ha configurado correctamente!', + 'finish_setup' => 'Ir a Panel de control', +]; diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php new file mode 100644 index 000000000000..da4aaf080cc4 --- /dev/null +++ b/resources/lang/es-ES/validation.php @@ -0,0 +1,122 @@ + 'El :attribute debe ser aceptado.', + 'active_url' => 'El :attribute no es un enlace válido.', + 'after' => 'El :attribute debe ser una fecha después de :date.', + 'alpha' => 'El :attribute sólo puede contener letras.', + 'alpha_dash' => 'El :attribute sólo puede contener letras, números y guiones.', + 'alpha_num' => 'El :attribute sólo puede contener letras y números.', + 'array' => 'El :attribute debe ser una matriz.', + 'before' => 'El :attribute debe ser una fecha antes de :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'El :attribute debe tener entre :min y :max objetos.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'El campo :attribute tiene un valor duplicado.', + 'filled' => 'The :attribute field is required.', + 'image' => 'El :attribute debe ser una imagen.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'El campo :attribute no existe en :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'El :attribute debe ser una cadena JSON válida.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'El :attribute no puede tener más de :max objetos.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'El :attribute debe tener al menos :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'El campo :attribute debe estar presente.', + 'regex' => 'El formato :attribute es inválido.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'El campo :attribute es obligatorio a no ser que :other se encuentre en :values.', + 'required_with' => 'El campo del :attribute se requiere cuando :values es presente.', + 'required_with_all' => 'El campo del :attribute se requiere cuando :values es presente.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'El :attribute debe ser :size kilobytes.', + 'string' => 'El :attribute debe tener :size caracteres.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'El :attribute debe ser una zona válida.', + 'unique' => 'El :attribute ya ha sido usado.', + 'url' => 'El formato :attribute es inválido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'mensaje-personalizado', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/es/cachet.php b/resources/lang/es/cachet.php index e7e4e9e0ef7e..83b4853b1690 100644 --- a/resources/lang/es/cachet.php +++ b/resources/lang/es/cachet.php @@ -43,9 +43,9 @@ // Service Status 'service' => [ - 'good' => '[0,1] Sistema operativo | [2,Inf] Todos los sistemas están operativos', - 'bad' => '[0,1] El sistema está actualmente experimentando problemas | [2,Inf] Algunos sistemas están experimentando problemas', - 'major' => '[0,1] El servicio está experimentando una interrupción mayor | [2, Inf] Algunos sistemas están experimentando una interrupción mayor', + 'good' => '[0,1] Sistema operativo|[2,Inf] Todos los sistemas están operativos', + 'bad' => '[0,1] El sistema está actualmente experimentando problemas|[2,Inf] Algunos sistemas están experimentando problemas', + 'major' => '[0,1] El servicio está experimentando una interrupción mayor|[2, Inf] Algunos sistemas están experimentando una interrupción mayor', ], 'api' => [ @@ -111,7 +111,7 @@ 'signup' => [ 'title' => 'Registrarse', - 'username' => 'Nombre de usario', + 'username' => 'Nombre de usuario', 'email' => 'Correo electrónico', 'password' => 'Contraseña', 'success' => 'Tu cuenta ha sido creada.', diff --git a/resources/lang/es/forms.php b/resources/lang/es/forms.php index 8525a5dd96b4..e304406a62b5 100644 --- a/resources/lang/es/forms.php +++ b/resources/lang/es/forms.php @@ -14,7 +14,7 @@ // Setup form fields 'setup' => [ 'email' => 'Correo electrónico', - 'username' => 'Nombre de usario', + 'username' => 'Nombre de usuario', 'password' => 'Contraseña', 'site_name' => 'Nombre del sitio', 'site_domain' => 'Dominio de sitio', @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nombre', 'template' => 'Plantilla', - 'twig' => 'Las plantillas de incidentes pueden hacer uso del lenguaje de plantillas Twig.', + 'twig' => 'Las plantillas de incidentes pueden hacer uso del lenguaje de plantillas Twig.', ], ], @@ -149,7 +149,7 @@ ], 'user' => [ - 'username' => 'Nombre de usario', + 'username' => 'Nombre de usuario', 'email' => 'Correo electrónico', 'password' => 'Contraseña', 'api-token' => 'API Token', diff --git a/resources/lang/et-EE/cachet.php b/resources/lang/et-EE/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/et-EE/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/et-EE/dashboard.php b/resources/lang/et-EE/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/et-EE/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/et-EE/forms.php b/resources/lang/et-EE/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/et-EE/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/et-EE/notifications.php b/resources/lang/et-EE/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/et-EE/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/et-EE/pagination.php b/resources/lang/et-EE/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/et-EE/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/et-EE/setup.php b/resources/lang/et-EE/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/et-EE/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/et-EE/validation.php b/resources/lang/et-EE/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/et-EE/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/fa-IR/cachet.php b/resources/lang/fa-IR/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/fa-IR/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/fa-IR/dashboard.php b/resources/lang/fa-IR/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/fa-IR/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/fa-IR/forms.php b/resources/lang/fa-IR/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/fa-IR/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/fa-IR/notifications.php b/resources/lang/fa-IR/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/fa-IR/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/fa-IR/pagination.php b/resources/lang/fa-IR/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/fa-IR/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/fa-IR/setup.php b/resources/lang/fa-IR/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/fa-IR/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/fa-IR/validation.php b/resources/lang/fa-IR/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/fa-IR/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/fa/forms.php b/resources/lang/fa/forms.php index b4d8f9971d71..d232db3f9e80 100644 --- a/resources/lang/fa/forms.php +++ b/resources/lang/fa/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/fi-FI/cachet.php b/resources/lang/fi-FI/cachet.php new file mode 100644 index 000000000000..7c1d6ccd0919 --- /dev/null +++ b/resources/lang/fi-FI/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/fi-FI/dashboard.php b/resources/lang/fi-FI/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/fi-FI/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/fi-FI/forms.php b/resources/lang/fi-FI/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/fi-FI/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/fi-FI/notifications.php b/resources/lang/fi-FI/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/fi-FI/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/fi-FI/pagination.php b/resources/lang/fi-FI/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/fi-FI/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/fi-FI/setup.php b/resources/lang/fi-FI/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/fi-FI/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/fi-FI/validation.php b/resources/lang/fi-FI/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/fi-FI/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/fi/forms.php b/resources/lang/fi/forms.php index 24953e2712f5..173b87ac7902 100644 --- a/resources/lang/fi/forms.php +++ b/resources/lang/fi/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nimi', 'template' => 'Malli', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/fr-FR/cachet.php b/resources/lang/fr-FR/cachet.php new file mode 100644 index 000000000000..a87d328f50ca --- /dev/null +++ b/resources/lang/fr-FR/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Dernière mise-à-jour le :timestamp', + 'status' => [ + 0 => 'Inconnu', + 1 => 'Opérationnel', + 2 => 'Problèmes de performances', + 3 => 'Panne partielle', + 4 => 'Panne majeure', + ], + 'group' => [ + 'other' => 'Autres services', + ], + 'select_all' => 'Tout sélectionner', + 'deselect_all' => 'Tout désélectionner', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Aucun incident signalé', + 'past' => 'Incidents antérieurs', + 'stickied' => 'Incidents épinglés', + 'scheduled' => 'Maintenance planifiée', + 'scheduled_at' => ', planifé le :timestamp', + 'posted' => 'Signalé :timestamp par :username', + 'posted_at' => 'Signalé :timestamp', + 'status' => [ + 1 => 'En cours d’investigation', + 2 => 'Identifié', + 3 => 'Sous surveillance', + 4 => 'Corrigé', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Imminent', + 1 => 'En cours', + 2 => 'Terminé', + ], + ], + + // Service Status + 'service' => [ + 'good' => 'Aucun incident signalé', + 'bad' => 'Incident en cours', + 'major' => 'Incident majeur en cours', + ], + + 'api' => [ + 'regenerate' => 'Régénérer la clé API', + 'revoke' => 'Révoquer la clé API', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Dernière heure', + 'hourly' => 'Les 12 dernières heures', + 'weekly' => 'Semaine', + 'monthly' => 'Mois', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Être informé des nouveaux signalements d’incidents et changements de statut', + 'unsubscribe' => 'Se désabonner', + 'button' => 'S’abonner', + 'manage_subscription' => 'Gérer l’abonnement', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Gérer les notifications pour', + 'no_subscriptions' => 'Vous êtes actuellement abonné à toutes les mises-à-jour.', + 'update_subscription' => 'Mettre-à-jour l’abonnement', + 'my_subscriptions' => 'Vous êtes actuellement abonné aux mises-à-jour suivantes.', + 'manage_at_link' => 'Gérer vos abonnements à :link', + ], + 'email' => [ + 'manage_subscription' => 'Un courriel vous a été envoyé ; merci de cliquer sur le lien pour gérer votre abonnement', + 'subscribe' => 'S’abonner aux notifications par courriel.', + 'subscribed' => 'Vous êtes abonné aux notifications par courriel, veuillez vérifier votre messagerie pour confirmer votre adresse.', + 'updated-subscribe' => 'Vous avez mis-à-jour vos abonnements avec succès.', + 'verified' => 'Votre abonnement aux notifications par courriel a été confirmé. Merci !', + 'manage' => 'Gérer votre abonnement', + 'unsubscribe' => 'Se désabonner des mises à jour par courriel.', + 'unsubscribed' => 'Votre abonnement aux notifications par courriel a été annulé.', + 'failure' => 'Une erreur est survenue lors de l’abonnement.', + 'already-subscribed' => 'Impossible de s’abonner avec l’adresse mail :email car celle-ci est déjà abonnée.', + ], + ], + + 'signup' => [ + 'title' => 'Inscription', + 'username' => 'Nom d’utilisateur', + 'email' => 'Adresse mail', + 'password' => 'Mot de passe', + 'success' => 'Votre compte a été créé.', + 'failure' => 'Un problème est survenu lors de votre inscription.', + ], + + 'system' => [ + 'update' => 'Il y a une nouvelle version de Cachet disponible. Vous pouvez trouver des renseignements concernant la procédure de mise à jour ici!', + ], + + // Modal + 'modal' => [ + 'close' => 'Fermer', + 'subscribe' => [ + 'title' => 'S’abonner aux mises-à-jour du statut du service', + 'body' => 'Entrez votre adresse mail pour vous abonner aux mises-à-jour de ce service. Si vous êtes déjà abonné, vous recevez déjà des notifications pour ce service.', + 'button' => 'S’abonner', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Détails et mises-à-jour sur l’incident :name qui a eu lieu le :date', + 'schedule' => 'Détails sur la période de maintenance planifiée :name débutant le :startDate', + 'subscribe' => 'S’abonner à :app afin de recevoir les mises-à-jour des incidents et des périodes de maintenance planifiée', + 'overview' => 'Restez à jour avec les dernières mises-à-jour de :app.', + ], + ], + + // Other + 'home' => 'Accueil', + 'powered_by' => 'Propulsé par Cachet.', + 'timezone' => 'Les heures sont affichées avec le fuseau horaire :timezone.', + 'about_this_site' => 'À propos du site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Flux des statuts', + +]; diff --git a/resources/lang/fr-FR/dashboard.php b/resources/lang/fr-FR/dashboard.php new file mode 100644 index 000000000000..13e2e763cd04 --- /dev/null +++ b/resources/lang/fr-FR/dashboard.php @@ -0,0 +1,305 @@ + 'Tableau de bord', + 'writeable_settings' => 'Le dossier des paramètres de Cachet n’est pas accessible en écriture. Veuillez vous assurer que le serveur web peut écrire dans ./bootstrap/cachet.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenances', + 'incidents' => 'Incidents', + 'logged' => '{0}Il n’y a aucun incident, bon travail.|[1]Vous avez reporté un incident.|[2,*]Vous avez reporté :count incidents.', + 'incident-create-template' => 'Créer un modèle', + 'incident-templates' => 'Modèles d’incident', + 'updates' => [ + 'title' => 'Mises-à-jour d’incident pour :incident', + 'count' => '{0}aucune|[1]une mise-à-jour|[2]deux mises-à-jour|[3,*]plusieurs mises-à-jour', + 'add' => [ + 'title' => 'Créer une mise à jour d’incident', + 'success' => 'Votre nouvelle mise-à-jour d’incident a été créée.', + 'failure' => 'Un problème est survenu avec la mise-à-jour d’incident.', + ], + 'edit' => [ + 'title' => 'Modifier la mise-à-jour d’incident', + 'success' => 'La mise-à-jour d’incident a été modifiée.', + 'failure' => 'Un problème est survenu avec la modification de la mise-à-jour d’incident.', + ], + ], + 'reported_by' => 'Signalé :timestamp par :user', + 'add' => [ + 'title' => 'Ajouter un incident', + 'success' => 'Incident ajouté.', + 'failure' => 'Une erreur s’est produite en ajoutant l’incident, veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier un incident', + 'success' => 'Incident modifié.', + 'failure' => 'Une erreur s’est produite en modifiant l’incident, veuillez réessayer.', + ], + 'delete' => [ + 'success' => 'L’incident a été supprimé et ne sera pas affiché sur votre page de statut.', + 'failure' => 'L’incident n’a pas pu être supprimé. Veuillez réessayer.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Modèles d’incident', + 'add' => [ + 'title' => 'Créer un modèle d’incident', + 'message' => 'Créer votre premier modèle d’incident.', + 'success' => 'Votre nouveau modèle d’incident a été créé.', + 'failure' => 'Une erreur est survenue avec le modèle d’incident.', + ], + 'edit' => [ + 'title' => 'Éditer le modèle', + 'success' => 'Le modèle d’incident a été mis-à-jour.', + 'failure' => 'Une erreur est survenue lors de la mise-à-jour du modèle d’incident', + ], + 'delete' => [ + 'success' => 'Le modèle d’incident a été supprimé.', + 'failure' => 'Le modèle d’incident n’a pas pu être supprimé. Veuillez réessayer.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenances planifiées', + 'logged' => '{0}Il n’y a aucune maintenance, bon travail.|[1]Vous avez reporté une maintenance.|[2,*]Vous avez reporté :count maintenances.', + 'scheduled_at' => 'Planifiée le :timestamp', + 'add' => [ + 'title' => 'Ajouter une maintenance', + 'success' => 'Maintenance ajoutée.', + 'failure' => 'Un problème est survenu avec l’ajout de la maintenance. Veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier la maintenance', + 'success' => 'La maintrnance a été modifiée !', + 'failure' => 'Un problème est survenu avec la modification de la maintenance. Veuillez réessayer.', + ], + 'delete' => [ + 'success' => 'TLa maitenance a été supprimée et de s’affichera plus sur la page de statut.', + 'failure' => 'Un problème est survenu avec la suppression de la maintenance. Veuillez réessayer.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Services', + 'component_statuses' => 'Statut des services', + 'listed_group' => 'Groupé par :name', + 'add' => [ + 'title' => 'Ajouter un service', + 'message' => 'Vous devez ajouter un service.', + 'success' => 'Service créé.', + 'failure' => 'Un problème est survenu avec la création du service. Veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier un service', + 'success' => 'Service modifié.', + 'failure' => 'Un problème est survenu avec la modification du service. Veuillez réessayer.', + ], + 'delete' => [ + 'success' => 'Le service a été supprimé !', + 'failure' => 'Un problème est survenu avec la suppression du service. Veuillez réessayer.', + ], + + // Component groups + 'groups' => [ + 'groups' => '[0,1]Groupe de services|[2,*]Groupes de services', + 'no_components' => 'Vous devez ajouter un groupe de services.', + 'add' => [ + 'title' => 'Ajouter un groupe de services', + 'success' => 'Groupe de services ajouté.', + 'failure' => 'Un problème est survenu avec l’ajout du groupe de services. Veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier un groupe de services', + 'success' => 'Groupe de services modifié.', + 'failure' => 'Un problème est survenu avec la modification du groupe de services. Veuillez réessayer.', + ], + 'delete' => [ + 'title' => 'Supprimer le groupe de services', + 'success' => 'Le groupe de services a été supprimé !', + 'failure' => 'Un problème est survenu avec la suppression du groupe de services. Veuillez réessayer.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Indicateurs', + 'add' => [ + 'title' => 'Créer une métrique', + 'message' => 'Vous devez ajouter un indicateur.', + 'success' => 'Indicateur créé.', + 'failure' => 'Une erreur est survenue avec l’ajout de l’indicateur. Veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier une métrique', + 'success' => 'Indicateur modifié.', + 'failure' => 'Une erreur est survenue avec la modification de l’indicateur. Veuillez réessayer.', + ], + 'delete' => [ + 'success' => 'La métrique a été supprimé et ne sera plus visible sur votre page de statut.', + 'failure' => 'Une erreur est survenue avec la suppression de l’indicateur. Veuillez réessayer.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Abonnés', + 'description' => 'Les abonnés recevront des notifications par courriel lorsque des incidents sont créés ou des services sont mis-à-jour.', + 'description_disabled' => 'Pour utiliser cette fonction, vous devez autoriser l’abonnement aux notifications.', + 'verified' => 'Vérifié', + 'not_verified' => 'Non vérifié', + 'subscriber' => ':email, abonné le :date', + 'no_subscriptions' => 'Aucun abonnement', + 'global' => 'Abonné à tout', + 'add' => [ + 'title' => 'Ajouter un abonné', + 'success' => 'L’abonné a été ajouté !', + 'failure' => 'Une erreur s’est produite lors de l’ajout de l’abonné. Veuillez réessayer.', + 'help' => 'Saisissez un abonné par ligne.', + ], + 'edit' => [ + 'title' => 'Modifier l’abonné', + 'success' => 'L’abonné a été modifié !', + 'failure' => 'Une erreur s’est produite lors de la modification de l’abonné. Veuillez réessayer.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Équipe', + 'member' => 'Membre', + 'profile' => 'Profil utilisateur', + 'description' => 'Les membres de l’équipe pourront ajouter & modifier les services et les incidents.', + 'add' => [ + 'title' => 'Ajouter un nouveau membre à l’équipe', + 'success' => 'Membre d’équipe a ajouté.', + 'failure' => 'Le membre n’a pas pu être ajouté à l’équipe. Veuillez réessayer.', + ], + 'edit' => [ + 'title' => 'Modifier le profil', + 'success' => 'Profil modifié.', + 'failure' => 'Une erreur s’est produite lors de la modification du profil. Veuillez réessayer.', + ], + 'delete' => [ + 'success' => 'Le membre été supprimé de l’équipe et n’aura plus l’accès au tableau de bord !', + 'failure' => 'Le membre n’a pas pu être supprimé de l’équipe. Veuillez réessayer.', + ], + 'invite' => [ + 'title' => 'Inviter un nouveau membre dans l’équipe', + 'success' => 'Nouveau membre invité.', + 'failure' => 'L’invitation n’a pas pu être envoyé. Veuillez réessayer.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Paramètres', + 'app-setup' => [ + 'app-setup' => 'Configuration de l’application', + 'images-only' => 'Seules les images peuvent être envoyées.', + 'too-big' => 'Le fichier envoyé est trop grand. Envoyer une image d’une taille inférieur à :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Journal', + ], + 'localization' => [ + 'localization' => 'Localisation', + ], + 'customization' => [ + 'customization' => 'Personnalisation', + 'header' => 'Entête HTML personnalisé', + 'footer' => 'Pied-de-page HTML personnalisé', + ], + 'mail' => [ + 'mail' => 'Courriel', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Tester la notification depuis Cachet', + 'body' => 'Ceci est une notification de test depuis Cachet.', + ], + ], + 'security' => [ + 'security' => 'Sécurité', + 'two-factor' => 'Utilisateurs sans authentification à deux facteurs', + ], + 'stylesheet' => [ + 'stylesheet' => 'Feuille de style', + ], + 'theme' => [ + 'theme' => 'Thème', + ], + 'edit' => [ + 'success' => 'Paramètres sauvegardés.', + 'failure' => 'Les paramètres n’ont pas pu être sauvegardés.', + ], + 'credits' => [ + 'credits' => 'Crédits', + 'contributors' => 'Contributeurs', + 'license' => 'Cachet est un logiciel libre sous licence BSD-3 édité par Alt Three Services Limited.', + 'backers-title' => 'Partenaires financiers et sponsors', + 'backers' => 'Si vous souhaitez aider des développements futurs jetez un œil à la campagne Cachet Patreon.', + 'thank-you' => 'Merci à chacun des :count contributeurs.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Connexion', + 'logged_in' => 'Vous êtes connecté.', + 'welcome' => 'Re-bonjour !', + 'two-factor' => 'Veuillez entrer votre jeton.', + ], + + // Sidebar footer + 'help' => 'Aide', + 'status_page' => 'Page de statut', + 'logout' => 'Déconnexion', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Fantastique.', + 'whoops' => 'Oups.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Soutenez Cachet', + 'support_subtitle' => 'Jetez un œil à la page Patreon!', + 'news' => 'Dernières actualités', + 'news_subtitle' => 'Obtenez les dernières mises à jour', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Bienvenue sur votre page de statut !', + 'message' => 'Votre page de statut est presque prête ! Vous voudrez peut-être configurer ces paramètres supplémentaires', + 'close' => 'Aller directement à mon tableau de bord', + 'steps' => [ + 'component' => 'Créer des services', + 'incident' => 'Créer des incidents', + 'customize' => 'Personnaliser', + 'team' => 'Ajouter des utilisateurs', + 'api' => 'Générer un jeton API', + 'two-factor' => 'Authentification à deux facteurs', + ], + ], + +]; diff --git a/resources/lang/fr-FR/forms.php b/resources/lang/fr-FR/forms.php new file mode 100644 index 000000000000..b43d3691720e --- /dev/null +++ b/resources/lang/fr-FR/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Adresse électronique', + 'username' => 'Nom d’utilisateur', + 'password' => 'Mot de passe', + 'site_name' => 'Nom du site', + 'site_domain' => 'Nom de domaine du site', + 'site_timezone' => 'Choisissez votre fuseau horaire', + 'site_locale' => 'Sélectionner votre langue', + 'enable_google2fa' => 'Activer l’authentification à deux facteurs de Google', + 'cache_driver' => 'Gestionnaire de cache', + 'queue_driver' => 'Pilote de fil', + 'session_driver' => 'Gestionnaire de session', + 'mail_driver' => 'Gestionnaire de mail', + 'mail_host' => 'Serveur de mail', + 'mail_address' => 'Adresse de l’expéditeur du mail', + 'mail_username' => 'Nom d’utilisateur de mail', + 'mail_password' => 'Mot de passe du serveur de mail', + ], + + // Login form fields + 'login' => [ + 'login' => 'Nom d’utilisateur ou courriel', + 'email' => 'Adresse électronique', + 'password' => 'Mot de passe', + '2fauth' => 'Code d’authentification', + 'invalid' => 'Nom d’utilisateur ou mot de passe incorrect', + 'invalid-token' => 'Jeton invalide', + 'cookies' => 'Vous devez activer les cookies pour vous connecter.', + 'rate-limit' => 'Limite de tentatives de connexion atteinte.', + 'remember_me' => 'Se souvenir de moi', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nom', + 'status' => 'Statut', + 'component' => 'Service', + 'component_status' => 'Statut de service', + 'message' => 'Message', + 'message-help' => 'Vous pouvez également utiliser le format Markdown.', + 'occurred_at' => 'Quand s’est produit cet incident ?', + 'notify_subscribers' => 'Notifier les abonnés ?', + 'notify_disabled' => 'Suite à une maintenance plannifiée, les notifications sur cet incident ou ses services seront supprimées.', + 'visibility' => 'Visibilité de l’incident', + 'stick_status' => 'Incident épinglé', + 'stickied' => 'Épinglé', + 'not_stickied' => 'Non épinglé', + 'public' => 'Visible par le public', + 'logged_in_only' => 'Uniquement visible par les utilisateurs enregistrés', + 'templates' => [ + 'name' => 'Nom', + 'template' => 'Modèle', + 'twig' => 'Vous pouvez utiliser Twig pour créer des modèles par langues pour les modèles d’incidents.', + ], + ], + + 'schedules' => [ + 'name' => 'Nom', + 'status' => 'Statut', + 'message' => 'Message', + 'message-help' => 'Vous pouvez également utiliser le format Markdown.', + 'scheduled_at' => 'Pour quand la maintenance est-elle planifiée ?', + 'completed_at' => 'Quand est-ce que cette maintenance sera terminée ?', + 'templates' => [ + 'name' => 'Nom', + 'template' => 'Modèle', + 'twig' => 'Vous pouvez utiliser Twig pour créer des modèles par langues pour les modèles d’incidents.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nom', + 'status' => 'Statut', + 'group' => 'Groupe', + 'description' => 'Description', + 'link' => 'Lien', + 'tags' => 'Mots-clés', + 'tags-help' => 'Séparés par des virgules.', + 'enabled' => 'Activer le service ?', + + 'groups' => [ + 'name' => 'Nom', + 'collapsing' => 'Afficher/Cacher les options', + 'visible' => 'Toujours déplier', + 'collapsed' => 'Réduire le groupe par défaut', + 'collapsed_incident' => 'Réduire le groupe par défaut, mais déplier s’il y a des incidents', + 'visibility' => 'Visibilité', + 'visibility_public' => 'Visible par le public', + 'visibility_authenticated' => 'Visible uniquement par les utilisateurs connectés', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nom', + 'description' => 'Description', + 'start_at' => 'Heure de début planifiée', + 'timezone' => 'Fuseau horaire', + 'schedule_frequency' => 'Fréquence de planification (en secondes)', + 'completion_latency' => 'Délai d’achèvement (en secondes)', + 'group' => 'Groupe', + 'active' => 'Actif ?', + 'groups' => [ + 'name' => 'Nom du groupe', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nom', + 'suffix' => 'Suffixe', + 'description' => 'Description', + 'description-help' => 'Vous pouvez également utiliser le format Markdown.', + 'display-chart' => 'Afficher le graphique sur la page de statut ?', + 'default-value' => 'Valeur par défaut', + 'calc_type' => 'Calcul des données', + 'type_sum' => 'Somme', + 'type_avg' => 'Moyenne', + 'places' => 'Nombre de chiffres après la virgule', + 'default_view' => 'Vue par défaut', + 'threshold' => 'Quel intervalle en minutes entre chaque point de métrique ?', + 'visibility' => 'Visibilité', + 'visibility_authenticated' => 'Visible aux utilisateurs authentifiés', + 'visibility_public' => 'Visible à tous', + 'visibility_hidden' => 'Toujours caché', + + 'points' => [ + 'value' => 'Valeur', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nom du site', + 'site-url' => 'URL du site', + 'display-graphs' => 'Afficher les graphiques sur la page de statut ?', + 'about-this-page' => 'À propos de cette page', + 'days-of-incidents' => 'Combien de jours d’incidents à montrer ?', + 'time_before_refresh' => 'Taux de rafraîchissement de la page de statut (en secondes)', + 'major_outage_rate' => 'Seuil pour les pannes majeures (en %)', + 'banner' => 'Image d’entête', + 'banner-help' => 'Il est recommandé de téléverser des images d’une largeur d’au plus 930 pixels.', + 'subscribers' => 'Permettre aux personnes de s’inscrire aux notifications par courriel ?', + 'suppress_notifications_in_maintenance' => 'Désactiver les notifications lorsqu’un incident se produit pendant une période de maintenance ?', + 'skip_subscriber_verification' => 'Ne pas vérifier les utilisateurs ? (Attention, vous pourriez être spammé)', + 'automatic_localization' => 'Traduire automatiquement votre page de statut dans la langue du visiteur ?', + 'enable_external_dependencies' => 'Activer les dépendances tierces (Google Fonts, Trackers, etc.)', + 'show_timezone' => 'Afficher le fuseau horaire du site', + 'only_disrupted_days' => 'Afficher uniquement les jours contenant des incidents dans la timeline ?', + ], + 'analytics' => [ + 'analytics_google' => 'Code de Google Analytics', + 'analytics_gosquared' => 'Code de GoSquared Analytics', + 'analytics_piwik_url' => 'URL de votre instance Piwik', + 'analytics_piwik_siteid' => 'Id du site de Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Fuseau horaire du site', + 'site-locale' => 'Langue du site', + 'date-format' => 'Format de la date', + 'incident-date-format' => 'Format de la date de l’incident', + ], + 'security' => [ + 'allowed-domains' => 'Domaines autorisés', + 'allowed-domains-help' => 'Les domaines définis ci-dessus sont automatiquement autorisés par défaut (séparés par des virgules).', + 'always-authenticate' => 'Authentification systématique', + 'always-authenticate-help' => 'Une authentification est nécessaire pour accéer à la moindre page Cachet.', + ], + 'stylesheet' => [ + 'custom-css' => 'Feuille de style personnalisée', + ], + 'theme' => [ + 'background-color' => 'Couleur de fond', + 'background-fills' => 'Couleur de remplissage de l’arrière-plan (services, incidents, pied-de-page)', + 'banner-background-color' => 'Couleur d’arrière-plan de l’entête', + 'banner-padding' => 'Marge de l’entête', + 'fullwidth-banner' => 'Activer la pleine largeur de bannière ?', + 'text-color' => 'Couleur du texte', + 'dashboard-login' => 'Afficher le bouton « Tableau de bord » dans le pied-de-page ?', + 'reds' => 'Rouge (utilisé pour les erreurs)', + 'blues' => 'Bleu (utilisé pour les informations)', + 'greens' => 'Vert (utilisé pour les succès)', + 'yellows' => 'Jaune (utilisé pour les alertes)', + 'oranges' => 'Orange (utilisé pour les informations)', + 'metrics' => 'Remplissage des données', + 'links' => 'Liens', + ], + ], + + 'user' => [ + 'username' => 'Nom d’utilisateur', + 'email' => 'Adresse électronique', + 'password' => 'Mot de passe', + 'api-token' => 'Jeton de l’API', + 'api-token-help' => 'Régénérer votre jeton API empêchera les applications existantes d’accéder à Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'Niveau de l’utilisateur', + 'levels' => [ + 'admin' => 'Administrateur', + 'user' => 'Utilisateur', + ], + '2fa' => [ + 'help' => 'Activer l’authentification à deux facteurs augmente la sécurité de votre compte. Vous aurez besoin de télécharger Google Authenticator ou une application similaire sur votre appareil mobile. Lorsque vous vous connectez, il vous sera demandé de fournir un jeton généré par l’application.', + ], + 'team' => [ + 'description' => 'Invitez les membres de votre équipe en entrant leurs adresses électroniques ici.', + 'email' => 'L’adresse électronique du membre de votre équipe', + ], + ], + + 'general' => [ + 'timezone' => 'Sélection du fuseau horaire', + ], + + 'seo' => [ + 'title' => 'Titre SEO', + 'description' => 'Description SEO', + ], + + // Buttons + 'add' => 'Ajouter', + 'save' => 'Enregistrer', + 'update' => 'Mettre à jour', + 'create' => 'Créer', + 'edit' => 'Modifier', + 'delete' => 'Supprimer', + 'submit' => 'Envoyer', + 'cancel' => 'Annuler', + 'remove' => 'Enlever', + 'invite' => 'Inviter', + 'signup' => 'Inscription', + 'manage_updates' => 'Gérer les mises-à-jour', + + // Other + 'optional' => '* Optionnel', +]; diff --git a/resources/lang/fr-FR/notifications.php b/resources/lang/fr-FR/notifications.php new file mode 100644 index 000000000000..1c14bca588ee --- /dev/null +++ b/resources/lang/fr-FR/notifications.php @@ -0,0 +1,116 @@ +?php + +/* + * This file is part of Cachet. + * + * (c) Alt Three Services Limited + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return [ + 'component' => [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Évolution du statut d’un service', + 'greeting' => 'Le statut d’un service a été mis-à-jour !', + 'content' => 'L’état du service :name est passé de :old_status à :new_status.', + 'action' => 'Voir le statut', + ], + 'slack' => [ + 'title' => 'Évolution du statut d’un service', + 'content' => 'L’état du service :name est passé de :old_status à :new_status.', + ], + 'sms' => [ + 'content' => 'L’état du service :name est passé de :old_status à :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nouvel incident signalé', + 'greeting' => 'Un nouvel incident a été signalé pour :app_name.', + 'content' => 'L’incident :name a été signalé', + 'action' => 'Voir l’incident', + ], + 'slack' => [ + 'title' => 'Nouvel incident signalé', + 'content' => 'Un nouvel incident a été signalé pour :app_name.', + ], + 'sms' => [ + 'content' => 'Un nouvel incident a été signalé pour :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Mise-à-jour d’un incident', + 'content' => 'L’incident :name a été mis-à-jour.', + 'title' => 'L’incident :name est passé à :new_status', + 'action' => 'Voir l’incident', + ], + 'slack' => [ + 'title' => 'Mise-à-jour d’un incident', + 'content' => 'L’incident :name est passé à :new_status', + ], + 'sms' => [ + 'content' => 'L’incident :name a été mis-à-jour', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nouvelle maintenance planifiée', + 'content' => 'Une maintenance :name a été planifiée pour le :date.', + 'title' => 'Une nouvelle maintenance est planifiée.', + 'action' => 'Voir la maintenance', + ], + 'slack' => [ + 'title' => 'Nouvelle maintenance planifiée !', + 'content' => 'Une maintenance :name a été planifiée pour le :date.', + ], + 'sms' => [ + 'content' => 'Une maintenance :name a été planifiée pour le :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Confirmez votre abonnement', + 'content' => 'Cliquez pour valider votre adresse mail et confirmer votre abonnement à la page de statut :app_name.', + 'title' => 'Confirmez votre abonnement à la page de statut :app_name.', + 'action' => 'Confirmer l’abonnement', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Gérez votre abonnement', + 'content' => 'Cliquez pour gérer votre abonnement à la page de statut :app_name.', + 'title' => 'Cliquez pour gérer votre abonnement à la page de statut :app_name.', + 'action' => 'Gérer l’abonnement', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping depuis Cachet!', + 'content' => 'Ceci est un test de notification depuis Cachet !', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Vous avez reçu une invitation…', + 'content' => 'Vous avez été invité à rejoindre la page de statut :app_name.', + 'title' => 'Vous êtes invité à rejoindre la page de statut :app_name.', + 'action' => 'Accepter', + ], + ], + ], +]; diff --git a/resources/lang/fr-FR/pagination.php b/resources/lang/fr-FR/pagination.php new file mode 100644 index 000000000000..e42562076df6 --- /dev/null +++ b/resources/lang/fr-FR/pagination.php @@ -0,0 +1,28 @@ + 'précédent', + 'next' => 'suivant', + +]; diff --git a/resources/lang/fr-FR/setup.php b/resources/lang/fr-FR/setup.php new file mode 100644 index 000000000000..58cb2ff7b4bb --- /dev/null +++ b/resources/lang/fr-FR/setup.php @@ -0,0 +1,23 @@ + 'Installation', + 'title' => 'Configuration de Cachet', + 'service_details' => 'Détails du service', + 'env_setup' => 'Configuration de l’environnement', + 'status_page_setup' => 'Configuration de la page de statut', + 'show_support' => 'Afficher votre soutien à Cachet ?', + 'admin_account' => 'Compte administrateur', + 'complete_setup' => 'Terminer la configuration', + 'completed' => 'Cachet a été configuré avec succès !', + 'finish_setup' => 'Aller au tableau de bord', +]; diff --git a/resources/lang/fr-FR/validation.php b/resources/lang/fr-FR/validation.php new file mode 100644 index 000000000000..fdb23623f13b --- /dev/null +++ b/resources/lang/fr-FR/validation.php @@ -0,0 +1,122 @@ + ':attribute doit être accepté.', + 'active_url' => ':attribute n’est pas une URL valide.', + 'after' => ':attribute doit être une date supérieure à :date.', + 'alpha' => ':attribute ne doit contenir que des lettres.', + 'alpha_dash' => ':attribute doit contenir seulement des lettres, nombres et des tirets.', + 'alpha_num' => ':attribute ne doit contenir que des lettres et des nombres.', + 'array' => ':attribute doit être un tableau.', + 'before' => ':attribute doit être une date inférieur à :date.', + 'between' => [ + 'numeric' => ':attribute doit être compris entre :min et :max.', + 'file' => ':attribute doit être compris entre :min et :max kilo-octets.', + 'string' => ':attribute doit être entre :min et :max caractères.', + 'array' => 'attribute doit être entre :min et :max éléments.', + ], + 'boolean' => 'Le champ :attribute doit être vrai ou faux.', + 'confirmed' => 'La confirmation de :attribute ne correspond pas.', + 'date' => ':attribute n’est pas une date valide.', + 'date_format' => ':attribute ne correspond pas au format :format.', + 'different' => ':attribute et :other doivent être différents.', + 'digits' => ':attribute doit avoir :digits chiffres.', + 'digits_between' => ':attribute doit être entre :min et :max chiffres.', + 'email' => ':attribute doit être une adresse courriel valide.', + 'exists' => 'Le :attribute sélectionné est invalide.', + 'distinct' => ':attribute possède une valeur en double.', + 'filled' => 'Le champ :attribute est requis.', + 'image' => ':attribute doit être une image.', + 'in' => 'Le :attribute sélectionné est invalide.', + 'in_array' => 'Le champ :attribute n’existe pas dans :other.', + 'integer' => ':attribute doit être un nombre entier.', + 'ip' => ':attribute doit être une adresse IP valide.', + 'json' => ':attribut doit être une chaîne JSON valide.', + 'max' => [ + 'numeric' => ':attribute ne doit pas dépasser :max.', + 'file' => ':attribute ne peut être plus grand que :max kilo-octets.', + 'string' => ':attribute ne doit pas dépasser :max caractères.', + 'array' => ':attribute ne doit dépasser :max éléments.', + ], + 'mimes' => ':attribute doit être un fichier de type: :values.', + 'min' => [ + 'numeric' => ':attribute doit être au moins de :min.', + 'file' => ':attribute doit être au moins de :min kilo-octets.', + 'string' => ':attribute doit comporter au minimum :min caractères.', + 'array' => ':attribute doit contenir au moins :min éléments.', + ], + 'not_in' => 'Le :attribute sélectionné est invalide.', + 'numeric' => ':attribute doit être un nombre.', + 'present' => 'Le champs :attribute doit être rempli.', + 'regex' => 'Le format de :attribute n’est pas valide.', + 'required' => 'Le champ :attribute est requis.', + 'required_if' => 'Le champ :attribute est requis lorsque :other est :value.', + 'required_unless' => 'Le champ :attribute est requis sauf si :other est dans :values.', + 'required_with' => 'Le champ :attribute est requis lorsque :values est présent.', + 'required_with_all' => 'Le champ :attribute est requis lorsque :values est présent.', + 'required_without' => 'Le champ :attribute est nécessaire quand :values n’est pas présent.', + 'required_without_all' => 'Le champ :attribute est requis lorsque aucune des :values sont présentes.', + 'same' => 'Le :attribute et :other doivent correspondre.', + 'size' => [ + 'numeric' => ':attribute doit faire :size.', + 'file' => 'attribute doit être de :size kilo-octets.', + 'string' => 'L’attribut ":attribute" doit faire :size caractères.', + 'array' => ':attribute doit contenir :size éléments.', + ], + 'string' => ':attribut doit être une chaîne de caractères.', + 'timezone' => ':attribute doit être une zone valide.', + 'unique' => ':attribute a déjà été pris.', + 'url' => 'Le format de :attribute n’est pas valide.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'Message personnalisé', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/fr/forms.php b/resources/lang/fr/forms.php index a590a54d3b19..697e06afb2d1 100644 --- a/resources/lang/fr/forms.php +++ b/resources/lang/fr/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nom', 'template' => 'Modèle', - 'twig' => 'Vous pouvez utiliser Twig pour créer des modèles par langues pour les modèles d\'incidents.', + 'twig' => 'Vous pouvez utiliser Twig pour créer des modèles par langues pour les modèles d\'incidents.', ], ], diff --git a/resources/lang/he-IL/cachet.php b/resources/lang/he-IL/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/he-IL/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/he-IL/dashboard.php b/resources/lang/he-IL/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/he-IL/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/he-IL/forms.php b/resources/lang/he-IL/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/he-IL/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/he-IL/notifications.php b/resources/lang/he-IL/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/he-IL/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/he-IL/pagination.php b/resources/lang/he-IL/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/he-IL/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/he-IL/setup.php b/resources/lang/he-IL/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/he-IL/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/he-IL/validation.php b/resources/lang/he-IL/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/he-IL/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/he/forms.php b/resources/lang/he/forms.php index abf82eb9fc93..ac48176943a2 100644 --- a/resources/lang/he/forms.php +++ b/resources/lang/he/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'שם', 'template' => 'תבנית', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/hu-HU/cachet.php b/resources/lang/hu-HU/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/hu-HU/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/hu-HU/dashboard.php b/resources/lang/hu-HU/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/hu-HU/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/hu-HU/forms.php b/resources/lang/hu-HU/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/hu-HU/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/hu-HU/notifications.php b/resources/lang/hu-HU/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/hu-HU/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/hu-HU/pagination.php b/resources/lang/hu-HU/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/hu-HU/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/hu-HU/setup.php b/resources/lang/hu-HU/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/hu-HU/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/hu-HU/validation.php b/resources/lang/hu-HU/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/hu-HU/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/hu/forms.php b/resources/lang/hu/forms.php index 9cf7d8933e4a..460e64937847 100644 --- a/resources/lang/hu/forms.php +++ b/resources/lang/hu/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Név', 'template' => 'Sablon', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/id-ID/cachet.php b/resources/lang/id-ID/cachet.php new file mode 100644 index 000000000000..6559e751e442 --- /dev/null +++ b/resources/lang/id-ID/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Update terakhir :timestamp', + 'status' => [ + 0 => 'Tidak diketahui', + 1 => 'Operasional', + 2 => 'Masalah Kinerja', + 3 => 'Gagal Sebagian', + 4 => 'Kegagalan Sistem', + ], + 'group' => [ + 'other' => 'Komponen Lain', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Tidak ada insiden yang dilaporkan', + 'past' => 'Insiden sebelumnya', + 'stickied' => 'Insiden sticky', + 'scheduled' => 'Pemeliharaan', + 'scheduled_at' => ', dijadwalkan pada :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Dikirim: :timestamp', + 'status' => [ + 1 => 'Investigasi', + 2 => 'Teridentifikasi', + 3 => 'Dimonitor', + 4 => 'Selesai', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Mendatang', + 1 => 'Sedang berlangsung', + 2 => 'Selesai', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]Sistem ini sedang mengalami masalah|[2,*]Beberapa sistem mengalami masalah', + 'major' => '[0,1]Sistem mengalami masalah besar|[2,*]Beberapa sistem mengalami masalah besar', + ], + + 'api' => [ + 'regenerate' => 'Buat ulang API Key', + 'revoke' => 'Cabut API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Jam terakhir', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Daftar', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifikasi', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Anda saat ini terdaftar untuk semua update.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Anda saat ini berlangganan update berikut.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Langganan update email.', + 'subscribed' => 'Anda berhasil terdaftar pada notifikasi email, mohon periksa email anda untuk mengkonfirmasi pendaftaran ini.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Pendaftaran newsletter anda berhasil dikonfirmasi. Terima kasih!', + 'manage' => 'Mengelola langganan Anda', + 'unsubscribe' => 'Hapus saya dari update email.', + 'unsubscribed' => 'Langganan email anda sudah dihentikan.', + 'failure' => 'Ada yang salah dengan sistem langganan email.', + 'already-subscribed' => 'Tidak bisa mendaftarkan :email karena sudah berlangganan.', + ], + ], + + 'signup' => [ + 'title' => 'Daftar', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Akun anda berhasil dibuat.', + 'failure' => 'Ada masalah dalam pendaftaran.', + ], + + 'system' => [ + 'update' => 'Ada versi terbaru Cachet yang tersedia. Anda dapat mempelajari cara update di sini!', + ], + + // Modal + 'modal' => [ + 'close' => 'Tutup', + 'subscribe' => [ + 'title' => 'Berlangganan update komponen', + 'body' => 'Masukkan alamat email Anda untuk berlangganan update komponen ini. Jika sudah berlangganan, Anda akan menerima email untuk komponen ini.', + 'button' => 'Daftar', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Rincian dan update tentang insiden :name yang terjadi pada :date', + 'schedule' => 'Rincian tentang jadwal pemeliharaan :name mulai :startDate', + 'subscribe' => 'Berlangganan :app untuk menerima update insiden dan jadwal pemeliharaan', + 'overview' => 'Tetap up to date dengan layanan terbaru dari :app.', + ], + ], + + // Other + 'home' => 'Depan', + 'powered_by' => 'Ditenagai oleh Cachet.', + 'timezone' => 'Waktu dalam :timezone.', + 'about_this_site' => 'Tentang situs ini', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Pasokan Status', + +]; diff --git a/resources/lang/id-ID/dashboard.php b/resources/lang/id-ID/dashboard.php new file mode 100644 index 000000000000..8fc4d62a6e6b --- /dev/null +++ b/resources/lang/id-ID/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Insiden & Penjadwalan', + 'incidents' => 'Insiden', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Buat Template', + 'incident-templates' => 'Template Insiden', + 'updates' => [ + 'title' => 'Update insiden untuk :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Buat update insiden baru', + 'success' => 'Update baru insiden anda berhasil dibuat.', + 'failure' => 'Ada masalah dengan update insiden ini.', + ], + 'edit' => [ + 'title' => 'Edit update insiden', + 'success' => 'Update insiden berhasil diupdate.', + 'failure' => 'Ada masalah saat memperbarui update insiden', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Tambahkan Insiden', + 'success' => 'Insiden sudah ditambahkan.', + 'failure' => 'Ada kesalahan saat menambahkan insiden, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Edit insiden', + 'success' => 'Insiden sudah diperbarui.', + 'failure' => 'Ada kesalahan sat mengedit insiden, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Insiden sudah dihapus dan tidak akan ditampilkan pada halaman status anda.', + 'failure' => 'Insiden tidak dapat dihapus, silakan coba lagi.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Template Insiden', + 'add' => [ + 'title' => 'Buat template insiden', + 'message' => 'Create your first incident template.', + 'success' => 'Template insiden baru telah dibuat.', + 'failure' => 'Ada masalah dengan template insiden ini.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'Template insiden telah diperbarui.', + 'failure' => 'Ada masalah saat memperbarui template insiden ini', + ], + 'delete' => [ + 'success' => 'Template insiden telah dihapus.', + 'failure' => 'Template insiden tidak dapat dihapus, silakan coba lagi.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Pemeliharaan', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Dijadwalkan pada :timestamp', + 'add' => [ + 'title' => 'Tambahkan Jadwal Pemeliharaan', + 'success' => 'Jadwal sudah ditambahkan.', + 'failure' => 'Ada masalah saat menambahkan jadwal, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Edit Jadwal Pemeliharaan', + 'success' => 'Jadwal sudah diperbarui!', + 'failure' => 'Ada masalah saat mengedit jadwal, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Pemeliharaan terjadwal telah dihapus dan tidak akan ditampilkan pada halaman status anda.', + 'failure' => 'Pemeliharaan terjadwal tidak bisa dihapus, silakan coba lagi.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Komponen', + 'component_statuses' => 'Status Komponen', + 'listed_group' => 'Dikelompokkan dalam :name', + 'add' => [ + 'title' => 'Tambahkan Komponen', + 'message' => 'Anda perlu menambahkan komponen.', + 'success' => 'Komponen sudah dibuat.', + 'failure' => 'Ada masalah dalam grup komponen, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Edit komponen', + 'success' => 'Komponen sudah diperbarui.', + 'failure' => 'Ada masalah dalam grup komponen, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Komponen sudah dihapus!', + 'failure' => 'Komponen tidak bisa dihapus, silakan coba lagi.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Grup komponen|Grup komponen', + 'no_components' => 'Anda perlu menambahkan grup komponen.', + 'add' => [ + 'title' => 'Tambahkan grup komponen', + 'success' => 'Grup komponen sudah ditambahkan.', + 'failure' => 'Ada masalah dalam grup komponen, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Edit grup komponen', + 'success' => 'Grup komponen sudah diperbarui.', + 'failure' => 'Ada masalah dalam grup komponen, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Grup komponen sudah dihapus!', + 'failure' => 'Grup komponen tidak bisa dihapus, silakan coba lagi.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrik', + 'add' => [ + 'title' => 'Buat metrik', + 'message' => 'Anda harus menambahkan metrik.', + 'success' => 'Metrik sudah dibuat.', + 'failure' => 'Ada masalah dalam metrik, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Edit metrik', + 'success' => 'Metrik sudah diperbarui.', + 'failure' => 'Ada masalah dalam metrik, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Metrik sudah dihapus dan tidak akan ditampilkan pada halaman status anda.', + 'failure' => 'Metrik tidak bisa dihapus, silakan coba lagi.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Berlangganan', + 'description' => 'Pelanggan akan menerima update email ketika insiden dibuat atau komponen diperbarui.', + 'description_disabled' => 'Untuk menggunakan fitur ini, Anda perlu mengizinkan orang untuk mendaftar notifikasi.', + 'verified' => 'Terverifikasi', + 'not_verified' => 'Belum Diverifikasi', + 'subscriber' => ':email, berlangganan :date', + 'no_subscriptions' => 'Berlangganan semua update', + 'global' => 'Berlangganan secara global', + 'add' => [ + 'title' => 'Tambah Pelanggan Baru', + 'success' => 'Pelanggan sudah ditambahkan.', + 'failure' => 'Ada masalah saat menambah langganan, silakan coba lagi.', + 'help' => 'Masukkan setiap pelanggan pada baris baru.', + ], + 'edit' => [ + 'title' => 'Perbarui Pelanggan', + 'success' => 'Pelanggan sudah diupdate.', + 'failure' => 'Ada masalah saat mengedit langganan, silakan coba lagi.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Tim', + 'member' => 'Anggota', + 'profile' => 'Profil', + 'description' => 'Anggota Tim akan bisa menambahkan, mengubah & mengedit komponen dan insiden.', + 'add' => [ + 'title' => 'Tambahkan Anggota Tim', + 'success' => 'Anggota Tim sudah ditambahkan.', + 'failure' => 'Anggota Tim tidak bisa ditambahkan, silakan coba lagi.', + ], + 'edit' => [ + 'title' => 'Perbarui profil', + 'success' => 'Profil sudah diperbarui.', + 'failure' => 'Ada masalah saat memperbarui profil, silakan coba lagi.', + ], + 'delete' => [ + 'success' => 'Pengguna sudah dihapus.', + 'failure' => 'Anggota Tim tidak bisa ditambahkan, silakan coba lagi.', + ], + 'invite' => [ + 'title' => 'Undang Anggota Tim Baru', + 'success' => 'Pengguna sudah diundang.', + 'failure' => 'Undangan tidak terkirim, silakan coba lagi.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Pengaturan', + 'app-setup' => [ + 'app-setup' => 'Pengaturan Aplikasi', + 'images-only' => 'Hanya gambar yang bisa diunggah.', + 'too-big' => 'Berkas yang anda unggah terlalu besar. Mohon unggah gambar dengan ukuran tidak lebih dari :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Kustomisasi', + 'header' => 'Header HTML Kustom', + 'footer' => 'Footer HTML Kustom', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Keamanan', + 'two-factor' => 'User tanpa otentikasi dua-faktor', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Pengaturan sudah disimpan.', + 'failure' => 'Pengaturan tidak bisa disimpan.', + ], + 'credits' => [ + 'credits' => 'Kredit', + 'contributors' => 'Kontributor', + 'license' => 'Cachet adalah proyek open source berlisensi BSD, dirilis oleh Alt Three Services Limited.', + 'backers-title' => 'Pendukung & Sponsor', + 'backers' => 'Jika anda ingin mendukung pengembangan selanjutnya, silakan kunjungi kampanye Cachet di Patreon.', + 'thank-you' => 'Terima kasih pada seluruh :count kontributor.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Masuk', + 'logged_in' => 'Anda sudah login.', + 'welcome' => 'Halo!', + 'two-factor' => 'Silakan masukkan token anda.', + ], + + // Sidebar footer + 'help' => 'Panduan', + 'status_page' => 'Halaman Status', + 'logout' => 'Keluar', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifikasi', + 'awesome' => 'Keren.', + 'whoops' => 'Waduh.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Dukung Cachet', + 'support_subtitle' => 'Lihat halaman Patreon kami!', + 'news' => 'Berita Terbaru', + 'news_subtitle' => 'Dapatkan update terbaru', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Selamat datang di halaman status baru anda :username!', + 'message' => 'Halaman status anda hampir siap! Anda masih perlu mengkonfigurasi beberapa pengaturan', + 'close' => 'Terima kasih!', + 'steps' => [ + 'component' => 'Buat komponen', + 'incident' => 'Buat insiden', + 'customize' => 'Kustomisasi', + 'team' => 'Tambah user', + 'api' => 'Buat token API', + 'two-factor' => 'Otentikasi Dua Faktor', + ], + ], + +]; diff --git a/resources/lang/id-ID/forms.php b/resources/lang/id-ID/forms.php new file mode 100644 index 000000000000..e2005e25bfe0 --- /dev/null +++ b/resources/lang/id-ID/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Nama Situs', + 'site_domain' => 'Domain', + 'site_timezone' => 'Pilih Zona Waktu', + 'site_locale' => 'Pilih Bahasa', + 'enable_google2fa' => 'Aktifkan Otentikasi Dua Faktor dengan Google', + 'cache_driver' => 'Driver Cache', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Driver Sesi', + 'mail_driver' => 'Driver Email', + 'mail_host' => 'Host Email', + 'mail_address' => 'Alamat Email Pengirim', + 'mail_username' => 'Username Email', + 'mail_password' => 'Password Email', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username atau Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Kode Otentikasi', + 'invalid' => 'Username atau password tidak benar', + 'invalid-token' => 'Token tidak benar', + 'cookies' => 'Mohon aktifkan cookies untuk login.', + 'rate-limit' => 'Melebihi batas.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nama', + 'status' => 'Status', + 'component' => 'Komponen', + 'component_status' => 'Status Komponen', + 'message' => 'Pesan', + 'message-help' => 'Anda juga bisa menggunakan Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Beritahu subscriber', + 'notify_disabled' => 'Karena adanya pemeliharaan, notifikasi insiden ini atau komponennya akan diprioritaskan.', + 'visibility' => 'Tampilan Insiden', + 'stick_status' => 'Buat Insiden Sticky', + 'stickied' => 'Sticky', + 'not_stickied' => 'Tidak Sticky', + 'public' => 'Bisa dilihat oleh publik', + 'logged_in_only' => 'Hanya bisa dilihat oleh yang login', + 'templates' => [ + 'name' => 'Nama', + 'template' => 'Template', + 'twig' => 'Template Insiden ini bisa menggunakan bahasa template Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nama', + 'status' => 'Status', + 'message' => 'Pesan', + 'message-help' => 'Anda juga bisa menggunakan Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nama', + 'template' => 'Template', + 'twig' => 'Template Insiden ini bisa menggunakan bahasa template Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nama', + 'status' => 'Status', + 'group' => 'Grup', + 'description' => 'Deskripsi', + 'link' => 'Link', + 'tags' => 'Tag', + 'tags-help' => 'Pisahkan dengan koma.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Nama', + 'collapsing' => 'Buka/Tutup opsi', + 'visible' => 'Selalu buka', + 'collapsed' => 'Standarnya tutup grup', + 'collapsed_incident' => 'Tutup grup, tetapi buka jika ada masalah', + 'visibility' => 'Visibilitas', + 'visibility_public' => 'Terlihat bagi publik', + 'visibility_authenticated' => 'Terlihat hanya untuk yang sudah login', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nama', + 'description' => 'Deskripsi', + 'start_at' => 'Waktu mulai jadwal', + 'timezone' => 'Zona waktu', + 'schedule_frequency' => 'Frekuensi jadwal (dalam detik)', + 'completion_latency' => 'Latensi penyelesaian (dalam detik)', + 'group' => 'Grup', + 'active' => 'Aktif?', + 'groups' => [ + 'name' => 'Nama Grup', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nama', + 'suffix' => 'Akhiran', + 'description' => 'Deskripsi', + 'description-help' => 'Anda juga bisa menggunakan Markdown.', + 'display-chart' => 'Tampilkan grafik di halaman status?', + 'default-value' => 'Nilai default', + 'calc_type' => 'Kalkulasi metrik', + 'type_sum' => 'Jumlah', + 'type_avg' => 'Rata-rata', + 'places' => 'Digit Desimal', + 'default_view' => 'Tampilan default', + 'threshold' => 'Dalam rentang berapa menit antara poin metrik?', + 'visibility' => 'Visibilitas', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Nilai', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nama Situs', + 'site-url' => 'URL', + 'display-graphs' => 'Tampilkan grafik di halaman status?', + 'about-this-page' => 'Tentang halaman ini', + 'days-of-incidents' => 'Berapa hari insiden akan ditampilkan?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Gambar Banner', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Bolehkan pengunjung mendaftar notifikasi email?', + 'suppress_notifications_in_maintenance' => 'Paksa munculnya notifikasi ketika insiden terjadi saat periode pemeliharaan?', + 'skip_subscriber_verification' => 'Lewatkan verifikasi user? (Hati-hati, anda bisa kena spam)', + 'automatic_localization' => 'Otomatis ganti bahasa halaman status anda ke bahasa pengunjung?', + 'enable_external_dependencies' => 'Aktifkan Dependensi Pihak Ketiga (Font Google, Trackers, dll...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Hanya tampilkan hari yang berisi insiden dalam linimasa?', + ], + 'analytics' => [ + 'analytics_google' => 'Kode Google Analytics', + 'analytics_gosquared' => 'Kode GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'ID situs Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Zona Waktu', + 'site-locale' => 'Bahasa', + 'date-format' => 'Format Tanggal', + 'incident-date-format' => 'Format Waktu Insiden', + ], + 'security' => [ + 'allowed-domains' => 'Domain yang dibolehkan', + 'allowed-domains-help' => 'Pisahkan dengan koma. Domain yang ada di atas otomatis akan dibolehkan.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Stylesheet Kustom', + ], + 'theme' => [ + 'background-color' => 'Warna latar belakang', + 'background-fills' => 'Isian latar belakang (Komponen, Insiden, Footer)', + 'banner-background-color' => 'Banner Background Color', + 'banner-padding' => 'Banner Padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Warna teks', + 'dashboard-login' => 'Tampilkan tombol dashboard di footer?', + 'reds' => 'Merah (Digunakan jika ada kesalahan)', + 'blues' => 'Biru (Digunakan jika ada informasi)', + 'greens' => 'Hijau (Digunakan saat operasi berhasil)', + 'yellows' => 'Kuning (Digunakan sebagai peringatan)', + 'oranges' => 'Jingga (Digunakan sebagai pemberitahuan)', + 'metrics' => 'Isian metrik', + 'links' => 'Tautan', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'Token API', + 'api-token-help' => 'Pembuatan ulang token API akan bermasalah jika sudah ada aplikasi lain yang mengakses Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'Tingkatan pengguna', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Mengaktifkan otentikasi dua faktor akan memperkuat keamanan akun anda. Anda perlu mengunduh Google Authenticator atau app sejenis di gadget anda. Saat login anda akan ditanyakan untuk mengisi token yang dibuat oleh app tersebut.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Alamat Email Anggota Tim Anda', + ], + ], + + 'general' => [ + 'timezone' => 'Pilih zona waktu', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Tambah', + 'save' => 'Simpan', + 'update' => 'Perbarui', + 'create' => 'Buat', + 'edit' => 'Edit', + 'delete' => 'Hapus', + 'submit' => 'Kirim', + 'cancel' => 'Batalkan', + 'remove' => 'Buang', + 'invite' => 'Undang', + 'signup' => 'Daftar', + 'manage_updates' => 'Kelola Update', + + // Other + 'optional' => '* Tidak wajib', +]; diff --git a/resources/lang/id-ID/notifications.php b/resources/lang/id-ID/notifications.php new file mode 100644 index 000000000000..62533cbb2082 --- /dev/null +++ b/resources/lang/id-ID/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Status Komponen Telah Diperbarui', + 'greeting' => 'Sebuah status komponen telah diperbarui!', + 'content' => 'Status :name telah berubah dari :old_status ke :new_status.', + 'action' => 'Lihat', + ], + 'slack' => [ + 'title' => 'Status Komponen Telah Diperbarui', + 'content' => 'Status :name telah berubah dari :old_status ke :new_status.', + ], + 'sms' => [ + 'content' => 'Status :name telah berubah dari :old_status ke :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Insiden baru telah dilaporkan', + 'greeting' => 'Sebuah insiden baru dilaporkan di :app_name.', + 'content' => 'Insiden :name dilaporkan', + 'action' => 'Lihat', + ], + 'slack' => [ + 'title' => 'Insiden :name Dilaporkan', + 'content' => 'Sebuah insiden baru dilaporkan di :app_name', + ], + 'sms' => [ + 'content' => 'Sebuah insiden baru dilaporkan di :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Insiden Diperbarui', + 'content' => ':name telah diperbarui', + 'title' => ':name telah diperbarui menjadi :new_status', + 'action' => 'Lihat', + ], + 'slack' => [ + 'title' => ':name Diperbarui', + 'content' => ':name telah diperbarui menjadi :new_status', + ], + 'sms' => [ + 'content' => 'Insiden :name telah diperbarui', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Jadwal Baru Sudah Dibuat', + 'content' => ':name dijadwalkan pada :date', + 'title' => 'Pemeliharaan terjadwal baru telah dibuat.', + 'action' => 'Lihat', + ], + 'slack' => [ + 'title' => 'Jadwal Baru Sudah Dibuat!', + 'content' => ':name dijadwalkan pada :date', + ], + 'sms' => [ + 'content' => ':name dijadwalkan pada :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verifikasi Langganan Anda', + 'content' => 'Klik untuk memverifikasi langganan Anda ke halaman status :app_name.', + 'title' => 'Verifikasi langganan Anda ke status halaman :app_name.', + 'action' => 'Verifikasi', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping dari Cachet!', + 'content' => 'Ini adalah test notifikasi dari Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Undangan kamu ada di dalamnya...', + 'content' => 'Anda diundang untuk bergabung dalam halaman status :app_name.', + 'title' => 'Anda diundang untuk bergabung halaman status :app_name.', + 'action' => 'Terima', + ], + ], + ], +]; diff --git a/resources/lang/id-ID/pagination.php b/resources/lang/id-ID/pagination.php new file mode 100644 index 000000000000..ce3d99177aef --- /dev/null +++ b/resources/lang/id-ID/pagination.php @@ -0,0 +1,28 @@ + 'Sebelumnya', + 'next' => 'Berikutnya', + +]; diff --git a/resources/lang/id-ID/setup.php b/resources/lang/id-ID/setup.php new file mode 100644 index 000000000000..7a044deb1e38 --- /dev/null +++ b/resources/lang/id-ID/setup.php @@ -0,0 +1,23 @@ + 'Instalasi', + 'title' => 'Instalasi Cachet', + 'service_details' => 'Detail Layanan', + 'env_setup' => 'Setup lingkungan', + 'status_page_setup' => 'Penyiapan Halaman Status', + 'show_support' => 'Tunjukkan dukungan untuk Cachet? Tampilkan catatan di bawah halaman yang bertaut ke situs Cachet.', + 'admin_account' => 'Akun Administrator', + 'complete_setup' => 'Selesaikan Instalasi', + 'completed' => 'Cachet berhasil dikonfigurasi!', + 'finish_setup' => 'Ke dashboard', +]; diff --git a/resources/lang/id-ID/validation.php b/resources/lang/id-ID/validation.php new file mode 100644 index 000000000000..0a30f4a58091 --- /dev/null +++ b/resources/lang/id-ID/validation.php @@ -0,0 +1,122 @@ + 'Anda harus menerima :attribute .', + 'active_url' => ':attribute bukan merupakan URL yang benar.', + 'after' => ':attribute harus merupakan tanggal setelah :date.', + 'alpha' => ':attribute hanya boleh berisi huruf.', + 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka dan tanda minus.', + 'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.', + 'array' => ':attribute harus merupakan array.', + 'before' => ':attribute harus merupakan tanngga sebelum :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attribute harus antara :min dan :max item.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => ':attribute memiliki nilai duplikasi.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute harus merupakan gambar.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => ':attribute tidak ada dalam :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute harus merupakan string JSON yang valid.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute tidak boleh lebih dari :max item.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute minimal harus :min kilobyte.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => ':attribute harus ada.', + 'regex' => 'Format :attribute tidak benar.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'Bagian :attribute harus diisi kecuali :other :values.', + 'required_with' => ':attribute harus diisi jika ada :values.', + 'required_with_all' => ':attribute harus diisi jika ada :values.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute harus :size kilobyte.', + 'string' => ':attribute harus :size karakter.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute harus merupakan zona yang benar.', + 'unique' => ':attribute sudah ada.', + 'url' => 'Format :attribute tidak benar.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/id/forms.php b/resources/lang/id/forms.php index a6ebd4284275..4f9415927430 100644 --- a/resources/lang/id/forms.php +++ b/resources/lang/id/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nama', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/it-IT/cachet.php b/resources/lang/it-IT/cachet.php new file mode 100644 index 000000000000..1bfd09cbba06 --- /dev/null +++ b/resources/lang/it-IT/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Ultimo aggiornamento :timestamp', + 'status' => [ + 0 => 'Sconosciuto', + 1 => 'Operativo', + 2 => 'Problemi sulle prestazioni', + 3 => 'Disservizio parziale', + 4 => 'Interruzione del servizio', + ], + 'group' => [ + 'other' => 'Altri componenti', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Nessun incidente segnalato', + 'past' => 'Problemi passati', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', programmata il :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Analisi', + 2 => 'Identificato', + 3 => 'Osservazione', + 4 => 'Risolto', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In corso', + 2 => 'Completato', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Rigenera API Key', + 'revoke' => 'Revoca API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Ultima Ora', + 'hourly' => 'Ultime 12 Ore', + 'weekly' => 'Settimana', + 'monthly' => 'Mese', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Iscriviti', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifiche', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Sei attualmente iscritto a tutti gli aggiornamenti.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Sei attualmente iscritto ai seguenti suggerimenti.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Iscriviti agli aggiornamenti via email.', + 'subscribed' => 'Ti sei appena iscritto agli aggiornamenti email, controlla la tua casella per confermare la sottoscrizione', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'La tua iscrizione è stata confermata. Grazie!', + 'manage' => 'Gestisci la tua iscrizione', + 'unsubscribe' => 'Annulla l\'iscrizione agli aggiornamenti email.', + 'unsubscribed' => 'La tua iscrizione è stata rimossa.', + 'failure' => 'Qualcosa è andato storto con l\'iscrizione.', + 'already-subscribed' => 'Non è possibile iscrivere :email perchè risulta già iscritto.', + ], + ], + + 'signup' => [ + 'title' => 'Registrati', + 'username' => 'Nome Utente', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Il tuo account è stato creato.', + 'failure' => 'Qualcosa non ha funzionato durante la procedura d\'iscrizione.', + ], + + 'system' => [ + 'update' => 'E\' disponibile una nuova versione di Cachet. Scopri come fare qui!', + ], + + // Modal + 'modal' => [ + 'close' => 'Chiudi', + 'subscribe' => [ + 'title' => 'Iscriviti agli aggiornamenti dei componenti', + 'body' => 'Inserisci il tuo indirizzo e-mail per iscriverti agli aggiornamenti di questo componente. Se sei già iscritto, riceverai già email relative a questo componente.', + 'button' => 'Iscriviti', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Resta informato sugli ultimi aggiornamenti dei servizi di :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Informazioni sul sito', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/it-IT/dashboard.php b/resources/lang/it-IT/dashboard.php new file mode 100644 index 000000000000..188d9a18af43 --- /dev/null +++ b/resources/lang/it-IT/dashboard.php @@ -0,0 +1,304 @@ + 'Pannello amministrativo', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidenti', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Crea Modello', + 'incident-templates' => 'Modelli di segnalazione', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Riporta un problema', + 'success' => 'Segnalazione aggiunta.', + 'failure' => 'C\'è stato un problema con l\'aggiunta dela segnalazione, si prega di riprovare.', + ], + 'edit' => [ + 'title' => 'Modifica una segnalazione', + 'success' => 'Segnalazione aggiornata.', + 'failure' => 'C\'è stato un problema con la modifica della segnalazione, si prega di riprovare.', + ], + 'delete' => [ + 'success' => 'La segnalazione è stata eliminata e non verrà visualizzata sulla tua pagina di stato.', + 'failure' => 'Non è stato possibile eliminare la segnalazione, si prega di riprovare.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Modelli di segnalazione', + 'add' => [ + 'title' => 'Crea un modello di segnalazione', + 'message' => 'Create your first incident template.', + 'success' => 'Il tuo nuovo modello di segnalazione è stato creato.', + 'failure' => 'Qualcosa è andato storto con il modello di segnalazione.', + ], + 'edit' => [ + 'title' => 'Modifica Modello', + 'success' => 'Il modello di segnalazione è stato aggiornato.', + 'failure' => 'Qualcosa è andato storto con l\'aggiornamento del modello di segnalazione', + ], + 'delete' => [ + 'success' => 'Il modello di segnalazione è stato eliminato.', + 'failure' => 'Non è stato possibile eliminare il modello di segnalazione, si prega di riprovare.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Pianificato alle :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Componenti', + 'component_statuses' => 'Stati del componente', + 'listed_group' => 'Raggruppati sotto :name', + 'add' => [ + 'title' => 'Aggiungi un componente', + 'message' => 'È necessario aggiungere un componente.', + 'success' => 'Componente creato.', + 'failure' => 'Qualcosa è andato storto con il componente, si prega di riprovare.', + ], + 'edit' => [ + 'title' => 'Modifica un componente', + 'success' => 'Componente aggiornato.', + 'failure' => 'Qualcosa è andato storto con il componente, si prega di riprovare.', + ], + 'delete' => [ + 'success' => 'Il componente è stato eliminato!', + 'failure' => 'Non è stato possibile eliminare il componente, si prega di riprovare.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Gruppo del componente | Gruppi del componente', + 'no_components' => 'È necessario aggiungere un gruppo di componenti.', + 'add' => [ + 'title' => 'Aggiungi un gruppo di componenti', + 'success' => 'Gruppo di componenti aggiunto.', + 'failure' => 'Qualcosa è andato storto con il componente, si prega di riprovare.', + ], + 'edit' => [ + 'title' => 'Modifica un gruppo di componenti', + 'success' => 'Gruppo di componenti aggiornato.', + 'failure' => 'Qualcosa è andato storto con il componente, si prega di riprovare.', + ], + 'delete' => [ + 'success' => 'Il gruppo di componenti è stato eliminato!', + 'failure' => 'Non è stato possibile eliminare il gruppo di componenti, si prega di riprovare.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metriche', + 'add' => [ + 'title' => 'Crea una metrica', + 'message' => 'Si dovrebbe aggiungere un metodo di misura.', + 'success' => 'Metrica creata.', + 'failure' => 'Qualcosa è andato storto con il metodo di misura, si prega di riprovare.', + ], + 'edit' => [ + 'title' => 'Modifica un metodo di misura', + 'success' => 'Metodo di misura aggiornato.', + 'failure' => 'Qualcosa è andato storto con il metodo di misura, si prega di riprovare.', + ], + 'delete' => [ + 'success' => 'Il metodo di misura è stato eliminato e non verrà più visualizzato nella tua pagina di stato.', + 'failure' => 'Non è stato possibile eliminare il metodo di misura, si prega di riprovare.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Iscritti', + 'description' => 'Gli iscritti riceveranno aggiornamenti via email quando vengono create le segnalazioni o vengono aggiornati i componenti vengono.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verificato', + 'not_verified' => 'Non Verificato', + 'subscriber' => ': email, iscritta :date', + 'no_subscriptions' => 'Iscritto a tutti gli aggiornamenti', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Aggiungi un nuovo iscritto', + 'success' => 'L\'iscritto è stato aggiunto!', + 'failure' => 'Qualcosa è andato storto con l\'aggiunta dell\'iscritto, si prega di riprovare.', + 'help' => 'Immettere ogni iscritto su una nuova riga.', + ], + 'edit' => [ + 'title' => 'Aggiorna l\'iscritto', + 'success' => 'L\'iscritto è stato aggiornato!', + 'failure' => 'Qualcosa è andato storto con la modifica dell\'iscritto, si prega di riprovare.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Gruppo', + 'member' => 'Membro', + 'profile' => 'Profilo', + 'description' => 'I membri del gruppo potranno aggiungere, modificare ed editare componenti e segnalazioni.', + 'add' => [ + 'title' => 'Aggiungi un nuovo membro del gruppo', + 'success' => 'Membro del gruppo aggiunto.', + 'failure' => 'Non è stato possibile aggiungere il membro del gruppo, si prega di riprovare.', + ], + 'edit' => [ + 'title' => 'Aggiorna il profilo', + 'success' => 'Profilo aggiornato.', + 'failure' => 'Qualcosa è andato storto con l\'aggiornamento del profilo, si prega di riprovare.', + ], + 'delete' => [ + 'success' => 'Il membro del gruppo è stato eliminato e non avrà più accesso al pannello amministrativo!', + 'failure' => 'Non è stato possibile aggiungere il membro del gruppo, si prega di riprovare.', + ], + 'invite' => [ + 'title' => 'Invita un nuovo membro del gruppo', + 'success' => 'Un invito è stato inviato', + 'failure' => 'Non è stato possibile inviare l\'invito, si prega di riprovare.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Impostazioni', + 'app-setup' => [ + 'app-setup' => 'Installazione dell\'applicazione', + 'images-only' => 'Possono essere caricate solo le immagini.', + 'too-big' => 'Il file che hai caricato è troppo grande. Caricare un\'immagine più piccola di :size', + ], + 'analytics' => [ + 'analytics' => 'Statistiche', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localizzazione', + ], + 'customization' => [ + 'customization' => 'Personalizzazione', + 'header' => 'Header HTML personalizzato', + 'footer' => 'Footer HTML personalizzato', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Sicurezza', + 'two-factor' => 'Utenti senza autenticazione in due passaggi', + ], + 'stylesheet' => [ + 'stylesheet' => 'Foglio di stile', + ], + 'theme' => [ + 'theme' => 'Tema', + ], + 'edit' => [ + 'success' => 'Impostazioni salvate.', + 'failure' => 'Le impostazioni non possono essere salvate.', + ], + 'credits' => [ + 'credits' => 'Riconoscimenti', + 'contributors' => 'Collaboratori', + 'license' => 'Cachet è un progetto open source con licenza BSD-3, rilasciato da Alt tre Services Limited.', + 'backers-title' => 'Sostenitori e sponsor', + 'backers' => 'Se si desidera sostenere lo sviluppo futuro, scopri la campagna Cachet Patreon.', + 'thank-you' => 'Grazie a tutti i :count contributori.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Accedi', + 'logged_in' => 'Sei connesso.', + 'welcome' => 'Bentornato!', + 'two-factor' => 'Inserisci il tuo token.', + ], + + // Sidebar footer + 'help' => 'Aiuto', + 'status_page' => 'Pagina di Stato', + 'logout' => 'Disconnetti', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifiche', + 'awesome' => 'Meraviglioso.', + 'whoops' => 'Ops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Supporta Cachet', + 'support_subtitle' => 'Visita la nostra pagina Patreon!', + 'news' => 'Utime notizie', + 'news_subtitle' => 'Ottieni l\'aggiornamento più recente', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Benvenuto nella tua nuova pagina di stato!', + 'message' => 'La pagina di stato è quasi pronta! È possibile configurare queste impostazioni supplementari', + 'close' => 'Portami direttamente al mio pannello amministrativo', + 'steps' => [ + 'component' => 'Crea componenti', + 'incident' => 'Crea segnalazioni', + 'customize' => 'Personalizza', + 'team' => 'Aggiungi utenti', + 'api' => 'Genera un API token', + 'two-factor' => 'Autenticazione con verifica in due passaggi', + ], + ], + +]; diff --git a/resources/lang/it-IT/forms.php b/resources/lang/it-IT/forms.php new file mode 100644 index 000000000000..50d1263aedab --- /dev/null +++ b/resources/lang/it-IT/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Nome Utente', + 'password' => 'Password', + 'site_name' => 'Nome del sito', + 'site_domain' => 'Dominio del sito', + 'site_timezone' => 'Seleziona il tuo fuso orario', + 'site_locale' => 'Seleziona la lingua', + 'enable_google2fa' => 'Abilita la Verifica in Due Passaggi di Google', + 'cache_driver' => 'Driver per la cache', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Driver per la sessione', + 'mail_driver' => 'Driver di posta elettronica', + 'mail_host' => 'Host di posta elettronica', + 'mail_address' => 'Posta dall\'indirizzo', + 'mail_username' => 'Nome utente di posta', + 'mail_password' => 'Password di posta elettronica', + ], + + // Login form fields + 'login' => [ + 'login' => 'Nome Utente o Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Codice di Autenticazione', + 'invalid' => 'Il nome utente o la password non sono validi', + 'invalid-token' => 'Token non valido', + 'cookies' => 'È necessario abilitare i cookie per effettuare l\'accesso.', + 'rate-limit' => 'Sei troppo veloce.', + 'remember_me' => 'Ricordami', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nome', + 'status' => 'Stato', + 'component' => 'Componente', + 'component_status' => 'Component Status', + 'message' => 'Messaggio', + 'message-help' => 'Si può anche utilizzare il linguaggio di Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notificare gli iscritti?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Visibilità segnalazione', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Visibile al pubblico', + 'logged_in_only' => 'Visibile solo agli utenti registrati', + 'templates' => [ + 'name' => 'Nome', + 'template' => 'Modello', + 'twig' => 'I modelli di segnalazione possono usare il linguaggio di templating Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nome', + 'status' => 'Stato', + 'message' => 'Messaggio', + 'message-help' => 'Si può anche utilizzare il linguaggio di Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nome', + 'template' => 'Modello', + 'twig' => 'I modelli di segnalazione possono usare il linguaggio di templating Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nome', + 'status' => 'Stato', + 'group' => 'Gruppo', + 'description' => 'Descrizione', + 'link' => 'Collegamento', + 'tags' => 'Etichette', + 'tags-help' => 'Separati da virgole.', + 'enabled' => 'Componente abilitato?', + + 'groups' => [ + 'name' => 'Nome', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Sempre espanso', + 'collapsed' => 'Comprimere il gruppo come impostazione predefinita', + 'collapsed_incident' => 'Comprimere il gruppo, ma espandere se ci sono problemi', + 'visibility' => 'Visibilità', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nome', + 'description' => 'Descrizione', + 'start_at' => 'Schedule start time', + 'timezone' => 'Fuso orario', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Gruppo', + 'active' => 'Attivo?', + 'groups' => [ + 'name' => 'Nome del Gruppo', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nome', + 'suffix' => 'Suffisso', + 'description' => 'Descrizione', + 'description-help' => 'Si può anche utilizzare il linguaggio di Markdown.', + 'display-chart' => 'Visualizzare il grafico nella pagina di stato?', + 'default-value' => 'Valore predefinito', + 'calc_type' => 'Calcolo del metodo di misura', + 'type_sum' => 'Somma', + 'type_avg' => 'Media', + 'places' => 'Cifre decimali', + 'default_view' => 'Vista predefinita', + 'threshold' => 'Quanti minuti di soglia tra metriche punti?', + 'visibility' => 'Visibilità', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Sempre nascosto', + + 'points' => [ + 'value' => 'Valore', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nome del sito', + 'site-url' => 'URL del Sito', + 'display-graphs' => 'Visualizzare i grafici nella pagina di stato?', + 'about-this-page' => 'Informazioni sulla pagina', + 'days-of-incidents' => 'Quanti giorni di segnalazioni mostrare?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Immagine del banner', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Permettere alle persone di iscriversi alle notifiche via email?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Tradurre automaticamente la tua pagina di stato nella lingua del visitatore?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Codice Google Analytics', + 'analytics_gosquared' => 'Codice GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Id del sito Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Fuso orario del sito', + 'site-locale' => 'Lingua del sito', + 'date-format' => 'Formato della data', + 'incident-date-format' => 'Formato timestamp della segnalazione', + ], + 'security' => [ + 'allowed-domains' => 'Domini consentiti', + 'allowed-domains-help' => 'Separati da virgola. Il dominio impostato sopra è automaticamente consentito per impostazione predefinita.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Foglio di stile personalizzato', + ], + 'theme' => [ + 'background-color' => 'Colore di sfondo', + 'background-fills' => 'Riempimento sfondo (componenti, segnalazioni, footer)', + 'banner-background-color' => 'Colore di sfondo del banner', + 'banner-padding' => 'Padding del banner', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Colore del testo', + 'dashboard-login' => 'Mostrare pulsante del pannello amministrativo nel footer?', + 'reds' => 'Rosso (utilizzato per gli errori)', + 'blues' => 'Blu (usato per le informazioni)', + 'greens' => 'Verde (usato per operazioni andate a buon fine)', + 'yellows' => 'Giallo (utilizzato per gli avvisi)', + 'oranges' => 'Orange (usato per notifiche)', + 'metrics' => 'Riempimento di metriche', + 'links' => 'Collegamenti', + ], + ], + + 'user' => [ + 'username' => 'Nome Utente', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Rigenerare il tuo API token impedirà alle applicazioni esistenti di accedere a Cachet.', + 'gravatar' => 'Cambia la tua immagine del profilo presso Gravatar.', + 'user_level' => 'Livello utente', + 'levels' => [ + 'admin' => 'Amministratore', + 'user' => 'Utente', + ], + '2fa' => [ + 'help' => 'L\'attivazione dell\'autenticazione in due passaggi aumenta la sicurezza del tuo account. Sarà necessario scaricare Google Authenticator o un\'app simile sul tuo dispositivo mobile. Quando si effettua l\'accesso dovrai fornire un token generato dall\'applicazione.', + ], + 'team' => [ + 'description' => 'Invita i membri del gruppo inserendo qui i loro indirizzi e-mail.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Aggiungi', + 'save' => 'Salva', + 'update' => 'Aggiorna', + 'create' => 'Crea', + 'edit' => 'Modifica', + 'delete' => 'Elimina', + 'submit' => 'Invia', + 'cancel' => 'Cancella', + 'remove' => 'Rimuovi', + 'invite' => 'Invita', + 'signup' => 'Registrati', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Opzionale', +]; diff --git a/resources/lang/it-IT/notifications.php b/resources/lang/it-IT/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/it-IT/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/it-IT/pagination.php b/resources/lang/it-IT/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/it-IT/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/it-IT/setup.php b/resources/lang/it-IT/setup.php new file mode 100644 index 000000000000..2808e17393c7 --- /dev/null +++ b/resources/lang/it-IT/setup.php @@ -0,0 +1,23 @@ + 'Installazione', + 'title' => 'Installa Cachet', + 'service_details' => 'Dettagli del Servizio', + 'env_setup' => 'Configurazione dell\'Ambiente', + 'status_page_setup' => 'Installazione della Pagina di Stato', + 'show_support' => 'Mostrare supporto per Cachet?', + 'admin_account' => 'Account Amministratore', + 'complete_setup' => 'Installazione Completata', + 'completed' => 'Cachet è stato configurato con successo!', + 'finish_setup' => 'Vai alla bacheca', +]; diff --git a/resources/lang/it-IT/validation.php b/resources/lang/it-IT/validation.php new file mode 100644 index 000000000000..5fccb3f34386 --- /dev/null +++ b/resources/lang/it-IT/validation.php @@ -0,0 +1,122 @@ + ':attribute deve essere accettato.', + 'active_url' => ':attribute non è un URL valido.', + 'after' => ':attribute deve essere una data successiva al :date.', + 'alpha' => ':attribute può contenere solo lettere.', + 'alpha_dash' => ':attribute può contenere solo lettere, numeri e trattini.', + 'alpha_num' => ':attribute può contenere solo lettere e numeri.', + 'array' => ':attribute deve essere un array.', + 'before' => ':attribute deve contenere una data precedente al :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attributo deve avere tra :min e :max elementi.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'Il campo :attribute ha un valore duplicato.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute deve contenere un\'immagine.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'Il campo :attribute non esiste in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute deve essere una stringa JSON valida.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute non può avere più di :max elementi.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute deve essere almeno :min kilobyte.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'Il campo :attribute deve essere presente.', + 'regex' => 'Il formato di :attribute non è valido.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'Il campo :attribute è obbligatorio a meno che :other è presente in :values.', + 'required_with' => 'Il campo :attribute è obbligatorio quando :values è presente.', + 'required_with_all' => 'Il campo :attribute è obbligatorio quando :values è presente.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute deve essere di :size kilobytes.', + 'string' => ':attribute deve essere di :size caratteri.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute deve essere una zona valida.', + 'unique' => 'Il valore del campo :attribute è già stato preso.', + 'url' => 'Il formato di :attribute non è valido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'messaggio personalizzato', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/it/forms.php b/resources/lang/it/forms.php index 9144d5801c44..5d5838032433 100644 --- a/resources/lang/it/forms.php +++ b/resources/lang/it/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Nome', 'template' => 'Modello', - 'twig' => 'I modelli di segnalazione possono usare il linguaggio di templating Twig.', + 'twig' => 'I modelli di segnalazione possono usare il linguaggio di templating Twig.', ], ], diff --git a/resources/lang/ja-JP/cachet.php b/resources/lang/ja-JP/cachet.php new file mode 100644 index 000000000000..4240b90f77e5 --- /dev/null +++ b/resources/lang/ja-JP/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => '最終更新 :timestamp', + 'status' => [ + 0 => '不明', + 1 => '稼働中', + 2 => 'パフォーマンスに関する問題あり', + 3 => '一部停止中', + 4 => '大規模な停止中', + ], + 'group' => [ + 'other' => 'その他のコンポーネント', + ], + 'select_all' => '全て選択', + 'deselect_all' => '全て選択解除', + ], + + // Incidents + 'incidents' => [ + 'none' => 'インシデントはありません', + 'past' => 'インシデント履歴', + 'stickied' => '固定している障害情報', + 'scheduled' => '計画メンテナンス', + 'scheduled_at' => ', 予定日時 :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => '掲載日時 :timestamp', + 'status' => [ + 1 => '調査中', + 2 => '特定済み', + 3 => '監視中', + 4 => '修正済み', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => '近日中', + 1 => '進行中', + 2 => '完了', + ], + ], + + // Service Status + 'service' => [ + 'good' => '全システムが正常に稼働しています', + 'bad' => '一部のシステムに問題が発生しています', + 'major' => 'システムに深刻な問題が発生しています', + ], + + 'api' => [ + 'regenerate' => 'APIキーの再生成', + 'revoke' => 'APIキーの削除', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => '過去1時間', + 'hourly' => '過去12時間', + 'weekly' => '週', + 'monthly' => '月', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => '購読の解除', + 'button' => '購読', + 'manage_subscription' => '購読の管理', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => '通知の管理', + 'no_subscriptions' => '現在、すべてのアップデートを購読しています。', + 'update_subscription' => '購読の管理', + 'my_subscriptions' => '現在、以下のアップデートを購読しています。', + 'manage_at_link' => '購読の管理', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'メールによるアップデート情報の購読', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'あなたのメール購読を確認しました。ありがとうございます!', + 'manage' => '購読の管理', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'メールの購読が取り消されました。', + 'failure' => '購読に失敗しました。', + 'already-subscribed' => '既に購読しているので :email の購読ができません。', + ], + ], + + 'signup' => [ + 'title' => '新規登録', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'アカウントが作成されました。', + 'failure' => '新規登録に失敗しました。', + ], + + 'system' => [ + 'update' => 'Cachetの新しいバージョンがあります。アップデートの方法についてはこちらを参照して下さい!', + ], + + // Modal + 'modal' => [ + 'close' => '閉じる', + 'subscribe' => [ + 'title' => 'コンポーネントのアップデート情報を購読する', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => '購読', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => ':date に発生した:nameの障害情報', + 'schedule' => ':startDate に予定している:name のメンテナンスの詳細', + 'subscribe' => ':app の障害情報とメンテナンス情報を購読する', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'ホーム', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'このサイトについて', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'ステータスフィード', + +]; diff --git a/resources/lang/ja-JP/dashboard.php b/resources/lang/ja-JP/dashboard.php new file mode 100644 index 000000000000..1c90b57b581e --- /dev/null +++ b/resources/lang/ja-JP/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => '計画メンテナンス', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/ja-JP/forms.php b/resources/lang/ja-JP/forms.php new file mode 100644 index 000000000000..cc51002bd6c4 --- /dev/null +++ b/resources/lang/ja-JP/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => '新規登録', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/ja-JP/notifications.php b/resources/lang/ja-JP/notifications.php new file mode 100644 index 000000000000..d0165184dc6e --- /dev/null +++ b/resources/lang/ja-JP/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => '購読の管理', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ja-JP/pagination.php b/resources/lang/ja-JP/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/ja-JP/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/ja-JP/setup.php b/resources/lang/ja-JP/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/ja-JP/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/ja-JP/validation.php b/resources/lang/ja-JP/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/ja-JP/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ja/forms.php b/resources/lang/ja/forms.php index d7ab525bce85..f88b14f8fe2b 100644 --- a/resources/lang/ja/forms.php +++ b/resources/lang/ja/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => '名前', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/ko-KR/cachet.php b/resources/lang/ko-KR/cachet.php new file mode 100644 index 000000000000..e55e925fce2c --- /dev/null +++ b/resources/lang/ko-KR/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => '이전 문제', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', :timestamp 에 예정됨', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => '확인됨', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => '구독', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => '이메일 구독 신청.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => '이메일 구독 취소', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => '구독', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => '이 사이트에 대해', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => '상태 ', + +]; diff --git a/resources/lang/ko-KR/dashboard.php b/resources/lang/ko-KR/dashboard.php new file mode 100644 index 000000000000..fd0835171a72 --- /dev/null +++ b/resources/lang/ko-KR/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => '문제 추가', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => '문제 수정', + 'success' => '문제가 수정되었습니다.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => '문제 템플릿 생성하기', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => '문제 템플릿 수정', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => '구성요소 추가', + 'message' => '구성요소를 추가해야 합니다.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => '구성요소 수정', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => '구성요소 그룹 추가', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => '구성요소 그룹 수정', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => '통계', + 'add' => [ + 'title' => '통계 추가', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => '통계 수정', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => '팀 멤버는 구성요소와 문제를 추가하고 수정 할 수 있습니다.', + 'add' => [ + 'title' => '새 팀 멤버 추가', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => '프로필 수정', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => '애플리케이션 설정', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => '좋아요.', + 'whoops' => '이런...', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => '상태 페이지는 거의 다 준비 되었습니다! 추가 설정을 해보세요', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/ko-KR/forms.php b/resources/lang/ko-KR/forms.php new file mode 100644 index 000000000000..a00cd8cb0422 --- /dev/null +++ b/resources/lang/ko-KR/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => '잘못된 토큰n', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => '구성요소', + 'component_status' => 'Component Status', + 'message' => '메시지', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => '구독자에게 알림', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => '로그인한 사용자만 볼 수 있음', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => '메시지', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => '쉼표로 구분.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => '상태 페이지에 차트 보이기', + 'default-value' => '기본값', + 'calc_type' => '통계 계산', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => '상태 페이지에 그래프 보이기', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => '이메일 알림을 받기 위한 회원가입 허용', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics 코드', + 'analytics_gosquared' => 'GoSquared Analytics 코드', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik 사이트 id', + ], + 'localization' => [ + 'site-timezone' => '사이트 시간대', + 'site-locale' => '사이트 언어', + 'date-format' => '날짜 형식', + 'incident-date-format' => '문제 Timestamp 형식', + ], + 'security' => [ + 'allowed-domains' => '허용된 도메인', + 'allowed-domains-help' => '쉼표로 구분. 위에 설정된 도메인은 기본적으로 자동 허용 됩니다.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner Background Color', + 'banner-padding' => 'Banner Padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => '수정', + 'create' => '생성', + 'edit' => '수정', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* 선택사항', +]; diff --git a/resources/lang/ko-KR/notifications.php b/resources/lang/ko-KR/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/ko-KR/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ko-KR/pagination.php b/resources/lang/ko-KR/pagination.php new file mode 100644 index 000000000000..6c89ecad7507 --- /dev/null +++ b/resources/lang/ko-KR/pagination.php @@ -0,0 +1,28 @@ + '이전', + 'next' => '다음', + +]; diff --git a/resources/lang/ko-KR/setup.php b/resources/lang/ko-KR/setup.php new file mode 100644 index 000000000000..8b940c6d6cf3 --- /dev/null +++ b/resources/lang/ko-KR/setup.php @@ -0,0 +1,23 @@ + '설치', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Cachet 에 대한 지원을 표시', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/ko-KR/validation.php b/resources/lang/ko-KR/validation.php new file mode 100644 index 000000000000..3c1b6e1e8996 --- /dev/null +++ b/resources/lang/ko-KR/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => ':attribute 는 문자, 숫자, -만 포함할 수 있습니다.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => ':attribute 는 :date 이전의 날짜 여야 합니다.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ko/dashboard.php b/resources/lang/ko/dashboard.php index 308c37ef50fe..abb34a6de131 100644 --- a/resources/lang/ko/dashboard.php +++ b/resources/lang/ko/dashboard.php @@ -11,15 +11,17 @@ return [ - 'dashboard' => '대시보드', + 'dashboard' => '대시보드', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => '문제 및 예정', + 'title' => 'Incidents & Schedule', 'incidents' => '문제', 'logged' => '{0} 아무 문제가 없습니다, 잘하고 있어요.|하나의 문제에 대한 로깅이 있습니다.|:count 개의 문제가 리포트 되었습니다.', 'incident-create-template' => '템플릿 생성', 'incident-templates' => '문제 템플릿', + 'updates' => '{0} Zero Updates|One Update|:count Updates', 'add' => [ 'title' => '문제 추가', 'success' => 'Incident added.', @@ -34,6 +36,10 @@ 'success' => 'The incident has been deleted and will not show on your status page.', 'failure' => 'The incident could not be deleted, please try again.', ], + 'update' => [ + 'title' => 'Create new incident update', + 'subtitle' => 'Add an update to :incident', + ], // Incident templates 'templates' => [ @@ -58,17 +64,17 @@ // Incident Maintenance 'schedule' => [ - 'schedule' => '예약 된 유지 관리', + 'schedule' => '예정된 유지 보수', 'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported :count schedules.', 'scheduled_at' => ':timestamp 에 예정됨', 'add' => [ 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', + 'success' => '일정이 추가되었습니다.', 'failure' => 'Something went wrong adding the schedule, please try again.', ], 'edit' => [ 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', + 'success' => '일정이 업데이트 되었습니다!', 'failure' => 'Something went wrong editing the schedule, please try again.', ], 'delete' => [ @@ -85,13 +91,13 @@ 'add' => [ 'title' => '구성요소 추가', 'message' => '구성요소를 추가해야 합니다.', - 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'success' => '구성요소가 생성되었습니다.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ 'title' => '구성요소 수정', - 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'success' => '구성요소가 수정되었습니다.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ 'success' => 'The component has been deleted!', @@ -104,16 +110,16 @@ 'no_components' => '구성 요소 그룹을 추가 해야 합니다.', 'add' => [ 'title' => '구성요소 그룹 추가', - 'success' => 'Component group added.', + 'success' => '구성요소 그룹이 추가되었습니다.', 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ 'title' => '구성요소 그룹 수정', - 'success' => 'Component group updated.', + 'success' => '구성요소 그룹이 수정되었습니다.', 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ - 'success' => 'Component group has been deleted!', + 'success' => '구성 요소 그룹이 삭제 되었습니다!', 'failure' => 'The component group could not be deleted, please try again.', ], ], @@ -164,15 +170,15 @@ 'team' => '팀', 'member' => '멤버', 'profile' => '프로필', - 'description' => '팀 멤버는 구성요소와 문제를 추가하고 수정 할 수 있습니다.', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ 'title' => '새 팀 멤버 추가', - 'success' => 'Team member added.', + 'success' => '팀 멤버가 추가되었습니다', 'failure' => 'The team member could not be added, please try again.', ], 'edit' => [ 'title' => '프로필 수정', - 'success' => 'Profile updated.', + 'success' => '프로필이 수정되었습니다.', 'failure' => 'Something went wrong updating the profile, please try again.', ], 'delete' => [ @@ -197,13 +203,24 @@ 'analytics' => [ 'analytics' => 'Analytics', ], + 'log' => [ + 'log' => 'Log', + ], 'localization' => [ 'localization' => 'Localization', ], 'customization' => [ - 'customization' => 'Customization', - 'header' => 'Custom Header HTML', - 'footer' => 'Custom Footer HTML', + 'customization' => '사용자 설정', + 'header' => '사용자 지정 헤더 HTML', + 'footer' => '사용자 지정 바닥글 HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], ], 'security' => [ 'security' => '보안', @@ -220,8 +237,8 @@ 'failure' => '설정을 저장할 수 없습니다.', ], 'credits' => [ - 'credits' => 'Credits', - 'contributors' => 'Contributors', + 'credits' => '제작진', + 'contributors' => '도움 주신 분들', 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', 'backers-title' => 'Backers & Sponsors', 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', @@ -254,14 +271,14 @@ 'support' => 'Support Cachet', 'support_subtitle' => 'Check out our Patreon page!', 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'news_subtitle' => 'Get the latest update', ], // Welcome modal 'welcome' => [ - 'welcome' => 'Welcome to your new status page!', + 'welcome' => 'Welcome to your new status page, :username!', 'message' => '상태 페이지는 거의 다 준비 되었습니다! 추가 설정을 해보세요', - 'close' => 'Take me straight to my dashboard', + 'close' => 'I\'m good thanks!', 'steps' => [ 'component' => '구성요소 만들기', 'incident' => '문제 만들기', diff --git a/resources/lang/ko/forms.php b/resources/lang/ko/forms.php index 8f5f960e15fd..41c461516e32 100644 --- a/resources/lang/ko/forms.php +++ b/resources/lang/ko/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => '이름', 'template' => '템플릿', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/mn-MN/cachet.php b/resources/lang/mn-MN/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/mn-MN/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/mn-MN/dashboard.php b/resources/lang/mn-MN/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/mn-MN/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/mn-MN/forms.php b/resources/lang/mn-MN/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/mn-MN/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/mn-MN/notifications.php b/resources/lang/mn-MN/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/mn-MN/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/mn-MN/pagination.php b/resources/lang/mn-MN/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/mn-MN/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/mn-MN/setup.php b/resources/lang/mn-MN/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/mn-MN/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/mn-MN/validation.php b/resources/lang/mn-MN/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/mn-MN/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/nl-NL/cachet.php b/resources/lang/nl-NL/cachet.php new file mode 100644 index 000000000000..1e1377ac375a --- /dev/null +++ b/resources/lang/nl-NL/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Laatst bijgewerkt :timestamp', + 'status' => [ + 0 => 'Onbekend', + 1 => 'Operationeel', + 2 => 'Prestatieproblemen', + 3 => 'Gedeeltelijke Storing', + 4 => 'Grote Storing', + ], + 'group' => [ + 'other' => 'Andere componenten', + ], + 'select_all' => 'Alles selecteren', + 'deselect_all' => 'Alles deselecteren', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Geen incidenten gemeld', + 'past' => 'Oude incidenten', + 'stickied' => 'Vastgezette incidenten', + 'scheduled' => 'Gepland onderhoud', + 'scheduled_at' => ', gepland :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Geplaatst op :timestamp', + 'status' => [ + 1 => 'In onderzoek', + 2 => 'Geïdentificeerd', + 3 => 'Aan het opvolgen', + 4 => 'Opgelost', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Aankomend', + 1 => 'In Behandeling', + 2 => 'Voltooid', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]Systeem operationeel|[2,*]Alle systemen zijn operationeel', + 'bad' => '[0,1] Het systeem ondervindt momenteel problemen |[2,Inf] Sommige systemen ondervinden momenteel problemen', + 'major' => '[0,1] Het systeem ondervindt momenteel een grote storing|[2,Inf] Sommige systemen ondervinden momenteel een grote storing', + ], + + 'api' => [ + 'regenerate' => 'Hergenereer API-sleutel', + 'revoke' => 'API-sleutel Intrekken', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Laatste uur', + 'hourly' => 'Laatste 12 uur', + 'weekly' => 'Wekelijks', + 'monthly' => 'Maandelijks', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Abonneer je op statuswijzigingen en incident updates', + 'unsubscribe' => 'Abonnement opzeggen', + 'button' => 'Abonneren', + 'manage_subscription' => 'Abonnement beheren', + 'manage' => [ + 'notifications' => 'Notificaties', + 'notifications_for' => 'Beheer meldingen voor', + 'no_subscriptions' => 'Je bent momenteel geabonneerd op alle updates.', + 'update_subscription' => 'Abonnement bijwerken', + 'my_subscriptions' => 'Je bent momenteel geabonneerd op de volgende updates.', + 'manage_at_link' => 'Beheer uw abonnementen op: link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Abonneren op e-mail updates.', + 'subscribed' => 'U bent geabonneerd op e-mail notificaties, controleer uw e-mail om uw abonnement te bevestigen.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Uw e-mail abonnement is bevestigd. Bedankt!', + 'manage' => 'Beheer je abonnement', + 'unsubscribe' => 'Afmelden voor e-mail updates.', + 'unsubscribed' => 'Uw e-mail abonnement is opgezegd.', + 'failure' => 'Er ging iets fout tijdens het aanmelden.', + 'already-subscribed' => 'Kan niet aanmelden voor :email omdat deze momenteel al is aangemeld.', + ], + ], + + 'signup' => [ + 'title' => 'Registreer', + 'username' => 'Gebruikersnaam', + 'email' => 'E-mail', + 'password' => 'Wachtwoord', + 'success' => 'Uw account is aangemaakt.', + 'failure' => 'Er is iets misgegaan met het inschrijven.', + ], + + 'system' => [ + 'update' => 'Er is een nieuwere versie van Cachet beschikbaar. Kijk hoe je moet updaten hier!', + ], + + // Modal + 'modal' => [ + 'close' => 'Sluiten', + 'subscribe' => [ + 'title' => 'Abonneren voor component updates', + 'body' => 'Vul uw e-mailadres in om updates te krijgen voor dit component. Als u al ingeschreven bent, krijgt u al emails voor dit component.', + 'button' => 'Abonneren', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Informatie en updates over het :name incident van :date', + 'schedule' => 'Informatie over het :name onderhoud gepland op :startDate', + 'subscribe' => 'Abonneer je op :app om updates te ontvangen van incidenten en geplande onderhoudsperioden', + 'overview' => 'Blijf op de hoogte van de laatste service updates over :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Mogelijk gemaakt door Cachet.', + 'timezone' => 'Tijden worden getoond in :timezone.', + 'about_this_site' => 'Over deze website', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/nl-NL/dashboard.php b/resources/lang/nl-NL/dashboard.php new file mode 100644 index 000000000000..7faeb6b609f6 --- /dev/null +++ b/resources/lang/nl-NL/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'De Cachet instellingen-map is niet schrijfbaar. Zorg er voor dat ./bootstrap/cachet schrijfbaar is voor de webserver.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidenten & Onderhoud', + 'incidents' => 'Incidenten', + 'logged' => '{0}Top, er zijn geen incidenten.|[1]Je hebt één incident gerapporteerd.|[2,*]Je hebt :count incidenten gerapporteerd.', + 'incident-create-template' => 'Maak template', + 'incident-templates' => 'Incident Sjablonen', + 'updates' => [ + 'title' => 'Incident updates voor :incident', + 'count' => '{0}Geen updates|[1]Één update|[2]Twee updates|[3,*]Meerdere updates', + 'add' => [ + 'title' => 'Maak een nieuwe incident update', + 'success' => 'Je nieuwe incident update is aangemaakt.', + 'failure' => 'Er is iets misgegaan met de incident update.', + ], + 'edit' => [ + 'title' => 'Incident update bewerken', + 'success' => 'De incident update is bijgewerkt.', + 'failure' => 'Er is een fout opgetreden bij het wijzigen van de incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Meld een incident', + 'success' => 'Incident toegevoegd.', + 'failure' => 'Er is een fout opgetreden tijdens het toevoegen van het incident, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Wijzig een incident', + 'success' => 'Incident bijgewerkt.', + 'failure' => 'Er is een fout opgetreden bij het wijzigen van het incident, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'Het incident is verwijderd en zal niet meer worden weergegeven op de statuspagina.', + 'failure' => 'Het incident kon niet worden verwijderd, probeer het opnieuw.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Sjablonen', + 'add' => [ + 'title' => 'Creëer een incident template', + 'message' => 'Voeg een incident template toe.', + 'success' => 'Je nieuwe incident template is aangemaakt.', + 'failure' => 'Er is iets misgegaan met de incident template.', + ], + 'edit' => [ + 'title' => 'Wijzig template', + 'success' => 'De incident template is bijgewerkt.', + 'failure' => 'Er is een fout opgetreden bij het wijzigen van het incident template', + ], + 'delete' => [ + 'success' => 'De incident template is verwijderd.', + 'failure' => 'De incident template kon niet worden verwijderd, probeer het opnieuw.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Gepland onderhoud', + 'logged' => '{0}Er zijn geen geplande onderhoudsmomenten.|[1]Er is één onderhoudsmoment gepland.|[2,*]Er zijn :count geplande onderhoudsmomenten.', + 'scheduled_at' => 'Gepland op :timestamp', + 'add' => [ + 'title' => 'Gepland onderhoud toevoegen', + 'success' => 'Onderhoud toegevoegd.', + 'failure' => 'Er ging iets mis met het toevoegen van het geplande onderhoud, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Gepland onderhoud bewerken', + 'success' => 'Gepland onderhoud is bijgewerkt!', + 'failure' => 'Er ging iets mis met het wijzigen van het geplande onderhoud, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'Het geplande onderhoud is verwijderd en zal niet worden getoond op de statuspagina.', + 'failure' => 'Het geplande onderhoud kon niet worden verwijderd, probeer het opnieuw.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Componenten', + 'component_statuses' => 'Onderdeel statussen', + 'listed_group' => 'Gegroepeerd onder :name', + 'add' => [ + 'title' => 'Voeg een component toe', + 'message' => 'Gelieve een onderdeel toe te voegen.', + 'success' => 'Onderdeel aangemaakt.', + 'failure' => 'Er ging iets mis met de component group, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Wijzig een component', + 'success' => 'Onderdeel bijgewerkt.', + 'failure' => 'Er ging iets mis met de component group, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'Het component is verwijderd!', + 'failure' => 'Het component kon niet worden verwijderd, probeer het opnieuw.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Onderdeel groep|Onderdeel groepen', + 'no_components' => 'U moet een componentgroep toevoegen.', + 'add' => [ + 'title' => 'Componentgroep toevoegen', + 'success' => 'Componentengroep toegevoegd.', + 'failure' => 'Er ging iets mis met de component group, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Componentgroep bewerken', + 'success' => 'Componentengroep bijgewerkt.', + 'failure' => 'Er ging iets mis met de component group, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'De componentgroep is verwijderd!', + 'failure' => 'De componentengroep kon niet worden verwijderd, probeer het opnieuw.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Statistieken', + 'add' => [ + 'title' => 'Meting aanmaken', + 'message' => 'Voeg een meting toe.', + 'success' => 'Meting aangemaakt.', + 'failure' => 'Er ging iets mis met de metingen, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Meting bewerken', + 'success' => 'Meting bijgewerkt.', + 'failure' => 'Er ging iets mis met de metingen, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'De meting is verwijderd en zal niet meer worden weergegeven op de statuspagina.', + 'failure' => 'De meting kon niet verwijderd worden, probeer het opnieuw.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Abonnees', + 'description' => 'Abonnees ontvangen een email update wanneer er incidenten zijn gemaakt of componenten worden bijgewerkt.', + 'description_disabled' => 'Om deze functie te gebruiken, moet u mensen aanmelden voor meldingen toestaan.', + 'verified' => 'Geverifiëerd', + 'not_verified' => 'Niet geverifiëerd', + 'subscriber' => ':email, geabonneerd op :date', + 'no_subscriptions' => 'Geabonneerd op alle updates', + 'global' => 'Globaal geabonneerd', + 'add' => [ + 'title' => 'Voeg een nieuwe abonnee toe', + 'success' => 'Abonnee is toegevoegd!', + 'failure' => 'Er ging iets mis met het toevoegen van de abonnee, probeer het opnieuw.', + 'help' => 'Vul elke abonnee in op een nieuwe regel.', + ], + 'edit' => [ + 'title' => 'Abonnee bijwerken', + 'success' => 'Abonnee is gewijzigd!', + 'failure' => 'Er ging iets verkeerd met bewerken van de abonnee, probeer het opnieuw.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Lid', + 'profile' => 'Profiel', + 'description' => 'Teamleden zullen onderdelen en incidenten kunnen aanpassen & toevoegen.', + 'add' => [ + 'title' => 'Voeg een nieuw teamlid toe', + 'success' => 'Teamlid toegevoegd.', + 'failure' => 'Het teamlid kon niet worden toegevoegd, probeer het opnieuw.', + ], + 'edit' => [ + 'title' => 'Profiel bijwerken', + 'success' => 'Profiel bijgewerkt.', + 'failure' => 'Er ging iets mis met het bijwerken van het profiel, probeer het opnieuw.', + ], + 'delete' => [ + 'success' => 'Het teamlid is verwijderd en heeft geen toegang meer tot het dashboard!', + 'failure' => 'Het teamlid kon niet worden toegevoegd, probeer het opnieuw.', + ], + 'invite' => [ + 'title' => 'Nodig een nieuw teamlid uit', + 'success' => 'De uitnodiging is verzonden', + 'failure' => 'De uitnodiging kon niet verzonden worden, probeer het opnieuw.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Instellingen', + 'app-setup' => [ + 'app-setup' => 'Applicatie Installatie', + 'images-only' => 'Alleen afbeeldingen kunnen worden geüpload.', + 'too-big' => 'Het bestand dat u heeft geüpload is te groot. Upload een afbeelding kleiner dan :size', + ], + 'analytics' => [ + 'analytics' => 'Analyses', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Lokalisatie', + ], + 'customization' => [ + 'customization' => 'Aanpassing', + 'header' => 'Aangepaste Header HTML', + 'footer' => 'Aangepaste voettekst HTML', + ], + 'mail' => [ + 'mail' => 'E-mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notificatie van Cachet', + 'body' => 'Dit is een test notificatie van Cachet.', + ], + ], + 'security' => [ + 'security' => 'Beveiliging', + 'two-factor' => 'Gebruikers zonder authenticatie in twee stappen', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Thema', + ], + 'edit' => [ + 'success' => 'Instellingen bewaard.', + 'failure' => 'Instellingen kunnen niet worden opgeslagen.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Bijdragers', + 'license' => 'Cachet is een open source product onder de BSD-3 licentie, uitgebracht door Alt Three Services Limited.', + 'backers-title' => 'Donateurs & Sponsoren', + 'backers' => 'Als u de toekomstige ontwikkeling wilt ondersteunen, bezoek de Cachet Patreon campagne.', + 'thank-you' => 'Onze dank gaat uit naar elk van de :count verschillende bijdragers.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'U bent ingelogd.', + 'welcome' => 'Welkom Terug!', + 'two-factor' => 'Voer uw token in.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Pagina', + 'logout' => 'Uitloggen', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notificaties', + 'awesome' => 'Geweldig.', + 'whoops' => 'Oepsie.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Steun Cachet', + 'support_subtitle' => 'Bekijk onze Patreon pagina!', + 'news' => 'Laatste nieuws', + 'news_subtitle' => 'Ontvang de laatste updates', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welkom op je statuspagina!', + 'message' => 'Uw statuspagina is bijna klaar! U kunt deze extra instellingen configureren', + 'close' => 'Stuur me direct naar mijn dashboard', + 'steps' => [ + 'component' => 'Onderdelen maken', + 'incident' => 'Incidenten aanmaken', + 'customize' => 'Aanpassen', + 'team' => 'Gebruikers toevoegen', + 'api' => 'API-token genereren', + 'two-factor' => 'Authenticatie in twee stappen', + ], + ], + +]; diff --git a/resources/lang/nl-NL/forms.php b/resources/lang/nl-NL/forms.php new file mode 100644 index 000000000000..f8cdc67b7ffa --- /dev/null +++ b/resources/lang/nl-NL/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'E-mail', + 'username' => 'Gebruikersnaam', + 'password' => 'Wachtwoord', + 'site_name' => 'Site naam', + 'site_domain' => 'Site Domein', + 'site_timezone' => 'Selecteer uw tijdzone', + 'site_locale' => 'Selecteer uw taal', + 'enable_google2fa' => 'Schakel Google twee factor authenticatie in', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Sessie Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Server', + 'mail_address' => 'Mail Van-Adres', + 'mail_username' => 'Mail Gebruikersnaam', + 'mail_password' => 'Mail Wachtwoord', + ], + + // Login form fields + 'login' => [ + 'login' => 'Gebruikersnaam of e-mail', + 'email' => 'E-mail', + 'password' => 'Wachtwoord', + '2fauth' => 'Authenticatie Code', + 'invalid' => 'Ongeldige gebruikersnaam of wachtwoord', + 'invalid-token' => 'Ongeldig token', + 'cookies' => 'U moet cookies inschakelen om in te loggen.', + 'rate-limit' => 'Snelheids limiet overschreden.', + 'remember_me' => 'Blijf ingelogd', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Naam', + 'status' => 'Status', + 'component' => 'Onderdeel', + 'component_status' => 'Onderdeel status', + 'message' => 'Boodschap', + 'message-help' => 'U kan ook gebruik maken van Markdown.', + 'occurred_at' => 'Wanneer heeft dit incident plaatsgevonden?', + 'notify_subscribers' => 'Houd abonnees op de hoogte?', + 'notify_disabled' => 'Vanwege geplande onderhoudswerken zullen meldingen over dit incident of onderdelen hiervan worden onderdrukt.', + 'visibility' => 'Incident Zichtbaarheid', + 'stick_status' => 'Incident Vastzetten', + 'stickied' => 'Vastgezet', + 'not_stickied' => 'Niet Vastgezet', + 'public' => 'Zichtbaar voor publiek', + 'logged_in_only' => 'Alleen zichtbaar voor ingelogde gebruikers', + 'templates' => [ + 'name' => 'Naam', + 'template' => 'Sjabloon', + 'twig' => 'Incident Templates kunnen gebruik maken van de Twig template taal.', + ], + ], + + 'schedules' => [ + 'name' => 'Naam', + 'status' => 'Status', + 'message' => 'Boodschap', + 'message-help' => 'U kan ook gebruik maken van Markdown.', + 'scheduled_at' => 'Voor wanneer is dit onderhoudsschema bedoeld?', + 'completed_at' => 'Wanneer was dit onderhoud voltooid?', + 'templates' => [ + 'name' => 'Naam', + 'template' => 'Sjabloon', + 'twig' => 'Incident Templates kunnen gebruik maken van de Twig template taal.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Naam', + 'status' => 'Status', + 'group' => 'Groep', + 'description' => 'Omschrijving', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Komma gescheiden.', + 'enabled' => 'Component ingeschakeld?', + + 'groups' => [ + 'name' => 'Naam', + 'collapsing' => 'Opties uitklappen/inklappen', + 'visible' => 'Altijd uitgevouwen', + 'collapsed' => 'Vouw de groep standaard samen', + 'collapsed_incident' => 'De groep samenvouwen, maar uitklappen als er problemen zijn.', + 'visibility' => 'Zichtbaarheid', + 'visibility_public' => 'Zichtbaar voor iedereen', + 'visibility_authenticated' => 'Alleen zichtbaar voor ingelogde gebruikers', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Naam', + 'description' => 'Omschrijving', + 'start_at' => 'Geplande starttijd', + 'timezone' => 'Tijdzone', + 'schedule_frequency' => 'Geplande frequentie (in seconden)', + 'completion_latency' => 'Oplostijd (in seconden)', + 'group' => 'Groep', + 'active' => 'Actief?', + 'groups' => [ + 'name' => 'Groepsnaam', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Naam', + 'suffix' => 'Achtervoegsel', + 'description' => 'Omschrijving', + 'description-help' => 'U kan ook gebruik maken van Markdown.', + 'display-chart' => 'Grafiek tonen op statuspagina?', + 'default-value' => 'Standaardwaarde', + 'calc_type' => 'Berekening van de metingen', + 'type_sum' => 'Som', + 'type_avg' => 'Gemiddelde', + 'places' => 'Decimalen', + 'default_view' => 'Standaardweergave', + 'threshold' => 'Hoeveel minuten tussen de metrische punten?', + 'visibility' => 'Zichtbaarheid', + 'visibility_authenticated' => 'Zichtbaar voor ingelogde gebruikers', + 'visibility_public' => 'Zichtbaar voor iedereen', + 'visibility_hidden' => 'Altijd verborgen', + + 'points' => [ + 'value' => 'Waarde', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site naam', + 'site-url' => 'Site URL', + 'display-graphs' => 'Grafieken tonen op statuspagina?', + 'about-this-page' => 'Over deze pagina', + 'days-of-incidents' => 'Hoeveel dagen moeten incidenten getoond worden?', + 'time_before_refresh' => 'Statuspagina verversingssnelheid (in seconden)', + 'major_outage_rate' => 'Drempelwaarde voor grote onderbreking (in %)', + 'banner' => 'Banner afbeelding', + 'banner-help' => 'Bij voorkeur geen afbeeldingen breder dan 930 pixels uploaden', + 'subscribers' => 'Bezoekers toestaan om te abonneren op e-mail notificaties?', + 'suppress_notifications_in_maintenance' => 'Onderdruk meldingen wanneer incident tijdens de onderhoudingsperiode voordoet?', + 'skip_subscriber_verification' => 'Verificatie van gebruikers overslaan? (Let op, je kunt gespamd worden)', + 'automatic_localization' => 'Stel de taal van de bezoeker in als standaardtaal voor deze bezoeker?', + 'enable_external_dependencies' => 'Schakel afhankelijkheden van derden in (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Toon de tijdzone op de statuspagina', + 'only_disrupted_days' => 'Alleen dagen met incidenten op de tijdlijn tonen?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics-code', + 'analytics_gosquared' => 'GoSquared Analytics-code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Site-id van Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Website tijdzone', + 'site-locale' => 'Taal van de site', + 'date-format' => 'Datum formaat', + 'incident-date-format' => 'Incident tijdsaanduiding', + ], + 'security' => [ + 'allowed-domains' => 'Toegestane domeinen', + 'allowed-domains-help' => 'Door komma\'s gescheiden. Het hierboven ingestelde domein is automatisch standaard toegelaten.', + 'always-authenticate' => 'Altijd aanmelden', + 'always-authenticate-help' => 'Aanmelding vereist om ieder Cachet pagina te bekijken', + ], + 'stylesheet' => [ + 'custom-css' => 'Aangepaste Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Achtergrondkleur', + 'background-fills' => 'Achtergrond opvulling (components, incidents, footer)', + 'banner-background-color' => 'Banner achtergrond kleur', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Banner op volledige breedte tonen?', + 'text-color' => 'Tekstkleur', + 'dashboard-login' => 'Laat dashboard knop zien in de footer?', + 'reds' => 'Rood (voor errors)', + 'blues' => 'Blauw (voor informatie)', + 'greens' => 'Groen (voor succes)', + 'yellows' => 'Geel (voor waarschuwingen)', + 'oranges' => 'Oranje (voor notificaties)', + 'metrics' => 'Metrics opvulling', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Gebruikersnaam', + 'email' => 'E-mail', + 'password' => 'Wachtwoord', + 'api-token' => 'API-token', + 'api-token-help' => 'Het opnieuw genereren van je API-token zorgt ervoor dat bestaande applicaties geen toegang meer hebben tot Cachet.', + 'gravatar' => 'Verander je profielfoto op Gravatar.', + 'user_level' => 'Gebruikersniveau', + 'levels' => [ + 'admin' => 'Beheerder', + 'user' => 'Gebruiker', + ], + '2fa' => [ + 'help' => 'Het inschakelen van two-factor authenticatie verhoogt de veiligheid van uw account. U zult een applicatie zoals Google Authenticator of een vergelijkbare applicatie moeten downloaden op uw mobiele apparaat. Wanneer u inlogt wordt u gevraagd om een token in te voeren welke door de applicatie wordt gegenereerd.', + ], + 'team' => [ + 'description' => 'Nodig je teamleden uit door hier hun e-mailadres in te vullen.', + 'email' => 'Mailadres van uw teamleden', + ], + ], + + 'general' => [ + 'timezone' => 'Selecteer Tijdzone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Toevoegen', + 'save' => 'Opslaan', + 'update' => 'Bijwerken', + 'create' => 'Aanmaken', + 'edit' => 'Bewerken', + 'delete' => 'Verwijderen', + 'submit' => 'Versturen', + 'cancel' => 'Annuleren', + 'remove' => 'Verwijderen', + 'invite' => 'Uitnodigen', + 'signup' => 'Registreer', + 'manage_updates' => 'Updates beheren', + + // Other + 'optional' => '* Optioneel', +]; diff --git a/resources/lang/nl-NL/notifications.php b/resources/lang/nl-NL/notifications.php new file mode 100644 index 000000000000..f163b799ca0b --- /dev/null +++ b/resources/lang/nl-NL/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component status bijgewerkt', + 'greeting' => 'De status van een component is bijgewerkt!', + 'content' => ':name status is veranderd van :old_status naar :new_status.', + 'action' => 'Tonen', + ], + 'slack' => [ + 'title' => 'Component status bijgewerkt', + 'content' => ':name status is veranderd van :old_status naar :new_status.', + ], + 'sms' => [ + 'content' => ':name status is veranderd van :old_status naar :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nieuw incident gemeld', + 'greeting' => 'Er is een nieuw incident gemeld voor :app_name.', + 'content' => 'Incident :name is gerapporteerd', + 'action' => 'Tonen', + ], + 'slack' => [ + 'title' => 'Incident :name is gerapporteerd', + 'content' => 'Er is een nieuw incident gemeld voor :app_name', + ], + 'sms' => [ + 'content' => 'Er is een nieuw incident gemeld voor :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident bijgewerkt', + 'content' => ':name is bijgewerkt', + 'title' => ':name is bijgewerkt naar :new_status', + 'action' => 'Tonen', + ], + 'slack' => [ + 'title' => ':name is bijgewerkt', + 'content' => ':name is bijgewerkt naar :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name is bijgewerkt', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Nieuw tijdschema aangemaakt', + 'content' => ':name is ingepland voor :date', + 'title' => 'Nieuw gepland onderhoud aangemaakt.', + 'action' => 'Tonen', + ], + 'slack' => [ + 'title' => 'Nieuw tijdschema aangemaakt!', + 'content' => ':name is ingepland voor :date', + ], + 'sms' => [ + 'content' => ':name is ingepland voor :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Bevestig je inschrijving', + 'content' => 'Klik om je inschrijving op :app_name statuspagina te bevestigen.', + 'title' => 'Bevestig je inschrijving voor de :app_name statuspagina.', + 'action' => 'Verifiëren', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Abonnement beheren', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping van Cachet!', + 'content' => 'Dit is een testnotificatie van Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Je uitnodiging zit in deze e-mail...', + 'content' => 'Je bent uitgenodigd voor de :app_name statuspagina.', + 'title' => 'Je bent uitgenodigd voor :app_name statuspagina.', + 'action' => 'Accepteer', + ], + ], + ], +]; diff --git a/resources/lang/nl-NL/pagination.php b/resources/lang/nl-NL/pagination.php new file mode 100644 index 000000000000..7810e8a7083c --- /dev/null +++ b/resources/lang/nl-NL/pagination.php @@ -0,0 +1,28 @@ + 'Vorige', + 'next' => 'Volgende', + +]; diff --git a/resources/lang/nl-NL/setup.php b/resources/lang/nl-NL/setup.php new file mode 100644 index 000000000000..ccd676774a20 --- /dev/null +++ b/resources/lang/nl-NL/setup.php @@ -0,0 +1,23 @@ + 'Installatie', + 'title' => 'Installeer Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Omgevingsconfiguratie', + 'status_page_setup' => 'Installatie statuspagina', + 'show_support' => 'Steun voor Cachet tonen?', + 'admin_account' => 'Beheerdersaccount', + 'complete_setup' => 'Voltooi Installatie', + 'completed' => 'Cachet is succesvol geconfigureerd!', + 'finish_setup' => 'Ga naar het dashboard', +]; diff --git a/resources/lang/nl-NL/validation.php b/resources/lang/nl-NL/validation.php new file mode 100644 index 000000000000..555418621f38 --- /dev/null +++ b/resources/lang/nl-NL/validation.php @@ -0,0 +1,122 @@ + ':attribute moet worden aanvaard.', + 'active_url' => ':attribute is geen correcte URL.', + 'after' => ':attribute moet een datum later dan :date zijn.', + 'alpha' => ':attribute mag alleen letters bevatten.', + 'alpha_dash' => ':attribute mag alleen letters, cijfers, en streepjes bevatten.', + 'alpha_num' => ':attribute mag enkel letters en nummers bevatten.', + 'array' => ':attribute moet een reeks zijn.', + 'before' => ':attribute moet een datum vóór :date zijn.', + 'between' => [ + 'numeric' => ':attribute moet tussen :min en de :max zijn.', + 'file' => ':attribute moet tussen de :min en de :max aantal kilobytes zijn.', + 'string' => ':attribute moet tussen de :min en :max karakters lang zijn.', + 'array' => ':attribute moet tussen :min en :max items hebben.', + ], + 'boolean' => 'Het :attribute veld moet waar of onwaar zijn.', + 'confirmed' => 'De :attribute bevestiging komt niet overeen.', + 'date' => ':attribute is geen geldige datum.', + 'date_format' => ':attribute komt niet overeen met het volgende formaat :format.', + 'different' => ':attribute en :other mogen niet hetzelfde zijn.', + 'digits' => ':attribute moet uit :digits cijfers bestaan.', + 'digits_between' => ':attribute moet tussen de :min en :max cijfers zijn.', + 'email' => ':attribute moet een geldig e-mail adres zijn.', + 'exists' => 'Het geselecteerde :attribute is ongeldig.', + 'distinct' => 'Het :attribute veld heeft een dubbele waarde.', + 'filled' => 'Het :attribute veld is verplicht.', + 'image' => ':attribute moet een afbeelding zijn.', + 'in' => 'Het geselecteerde :attribute is ongeldig.', + 'in_array' => 'Het :attribute veld bestaat niet in :other.', + 'integer' => ':attribute moet een geheel getal zijn.', + 'ip' => 'Het :attribute moet een geldig IP-adres zijn.', + 'json' => ':attribute moet een valide JSON tekst zijn.', + 'max' => [ + 'numeric' => ':attribute mag niet groter zijn dan :max.', + 'file' => ':attribute mag niet groter zijn dan :max kilobytes.', + 'string' => ':attribute mag niet groter zijn dan :max tekens.', + 'array' => ':attribute mag niet meer dan :max items hebben.', + ], + 'mimes' => ':attribute moet een :values bestand zijn.', + 'min' => [ + 'numeric' => ':attribute moet tenminste :min zijn.', + 'file' => ':attribute moet minstens :min kilobytes groot zijn.', + 'string' => ':attribute moet minimaal :min tekens zijn.', + 'array' => ':attribute moet tenminste :min onderdelen hebben.', + ], + 'not_in' => 'Het geselecteerde :attribute is ongeldig.', + 'numeric' => ':attribute moet een getal zijn.', + 'present' => 'Het :attribute veld moet aanwezig zijn.', + 'regex' => 'Het :attribute-formaat is ongeldig.', + 'required' => 'Het :attribute veld is verplicht.', + 'required_if' => 'Het :attribute veld is verplicht als :other :value is.', + 'required_unless' => 'Het :attribute veld is verplicht tenzij :other is in :values.', + 'required_with' => ':attribute veld is verplicht wanneer :values aanwezig zijn.', + 'required_with_all' => ':attribute veld is verplicht wanneer :values aanwezig zijn.', + 'required_without' => 'Het :attribute veld is verplicht als er geen :values zijn.', + 'required_without_all' => 'Het :attribute veld is verplicht als geen van :values aanwezig zijn.', + 'same' => ':attribute en :other moeten overeenkomen.', + 'size' => [ + 'numeric' => ':attribute moet :size zijn.', + 'file' => ':attribute moet :size kilobytes groot zijn.', + 'string' => ':attribute moet :size karakters zijn.', + 'array' => ':attribute moet :size onderdelen bevatten.', + ], + 'string' => ':attribute moet een woord zijn.', + 'timezone' => ':attribute moet een geldige zone zijn.', + 'unique' => ':attribute is reeds in gebruik.', + 'url' => 'Het :attribute-formaat is ongeldig.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/nl/forms.php b/resources/lang/nl/forms.php index 6d8aa4a0f192..e7a49176c5ee 100644 --- a/resources/lang/nl/forms.php +++ b/resources/lang/nl/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Naam', 'template' => 'Sjabloon', - 'twig' => 'Incident Templates kunnen gebruik maken van de Twig template taal.', + 'twig' => 'Incident Templates kunnen gebruik maken van de Twig template taal.', ], ], diff --git a/resources/lang/no-NO/cachet.php b/resources/lang/no-NO/cachet.php new file mode 100644 index 000000000000..992858316fad --- /dev/null +++ b/resources/lang/no-NO/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Sist oppdatert :timestamp', + 'status' => [ + 0 => 'Ukjent', + 1 => 'Ingen problemer', + 2 => 'Ytelsesproblemer', + 3 => 'Delvis brudd', + 4 => 'Større brudd', + ], + 'group' => [ + 'other' => 'Andre komponenter', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Ingen hendelser rapportert', + 'past' => 'Tidligere hendelser', + 'stickied' => 'Festede hendelser', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', planlagt :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Undersøkes', + 2 => 'Identifisert', + 3 => 'Observerer', + 4 => 'Løst', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Kommende', + 1 => 'Pågår', + 2 => 'Fullført', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerer API-nøkkel', + 'revoke' => 'Tilbakekall API-nøkkel', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Siste time', + 'hourly' => 'Siste 12 timer', + 'weekly' => 'Uke', + 'monthly' => 'Måned', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Abonner', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Du abonnerer for øyeblikket på alle oppdateringer.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Du abonnerer for øyeblikket på følgende oppdateringer.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Abonner på e-postoppdateringer.', + 'subscribed' => 'Du abonnerer nå på e-postvarslinger, sjekk din e-post for å bekrefte abonneringen.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Ditt epost abonnement er bekreftet!', + 'manage' => 'Administrer ditt abonnement', + 'unsubscribe' => 'Meld av e-postvarsling.', + 'unsubscribed' => 'Ditt e-postabonnement har blitt kansellert.', + 'failure' => 'Noe gikk galt med abonneringen.', + 'already-subscribed' => 'Kan ikke abonnere: email fordi de allerede er abonnenter.', + ], + ], + + 'signup' => [ + 'title' => 'Registerer deg', + 'username' => 'Brukernavn', + 'email' => 'E-post', + 'password' => 'Passord', + 'success' => 'Din konto er opprettet.', + 'failure' => 'Noe gikk galt med registreringsprosessen.', + ], + + 'system' => [ + 'update' => 'Det finnes en nyere versjon av Cachet. Du kan lære hvordan å oppdatere her!', + ], + + // Modal + 'modal' => [ + 'close' => 'Lukk', + 'subscribe' => [ + 'title' => 'Abonner for å motta varslinger for komponenten på e-post', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Abonner', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Hold deg oppdatert med de nyeste service-oppdateringene fra :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Tider vises i :timezone.', + 'about_this_site' => 'Om denne siden', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/no-NO/dashboard.php b/resources/lang/no-NO/dashboard.php new file mode 100644 index 000000000000..3fbb64f11cc6 --- /dev/null +++ b/resources/lang/no-NO/dashboard.php @@ -0,0 +1,304 @@ + 'Dashbord', + 'writeable_settings' => 'Mappen for Cachet instillinger er ikke skrivbar. Kontroller at ./bootstrap/cachet er skrivbar av webserveren.', + + // Incidents + 'incidents' => [ + 'title' => 'Hendelser & vedlikehold', + 'incidents' => 'Incidents', + 'logged' => '{0}Det er ingen hendelser, godt jobbet.|[1]Du har logget en hendelse.|[2,*]Du har rapportert :count hendelser.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Hendelseoppdateringer for :incident', + 'count' => '{0}Ingen Oppdateringer|[1]Èn Oppdatering|[2]To Oppdateringer|[3,*]Flere Oppdateringer', + 'add' => [ + 'title' => 'Opprett ny hendelseoppdatering', + 'success' => 'Din nye hendelsesoppdatering ble opprettet.', + 'failure' => 'Noe gikk galt med hendelsesoppdateringen.', + ], + 'edit' => [ + 'title' => 'Rediger hendelsesoppdatering', + 'success' => 'Hendelsesoppdateringen har blitt oppdatert.', + 'failure' => 'Noe gikk galt ved oppdatering av hendelsesoppdateringen', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Opprett din første hendelsesmal.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}Det har ikke vært noe vedlikehold, godtjobbet.|[1]Du har logget èn tidsplan.|[2,*]Du har rapportert :count planlagte vedlikehold.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Legg til planlagt vedlikehold', + 'success' => 'Vedlikehold lagt til.', + 'failure' => 'Noe gikk galt med å legge til vedlikeholdet, vennligst prøv igjen.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Noe gikk galt med å redigere vedlikeholdet, vennligst prøv igjen.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'Hvis du vil bruke denne funksjonen, må du tillate folk å melde seg på for varsler.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globalt abonnert', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Logg', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'E-post', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Testnotifikasjon fra Cachet', + 'body' => 'Dette er en testnotifikasjon fra Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Velkommen tilbake!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Støtt Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/no-NO/forms.php b/resources/lang/no-NO/forms.php new file mode 100644 index 000000000000..3763f61e6d40 --- /dev/null +++ b/resources/lang/no-NO/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'E-post', + 'username' => 'Brukernavn', + 'password' => 'Passord', + 'site_name' => 'Nettstedsnavn', + 'site_domain' => 'Nettstedsdomene', + 'site_timezone' => 'Velg din tidssone', + 'site_locale' => 'Velg ditt språk', + 'enable_google2fa' => 'Aktiver Google to-faktor autentisering', + 'cache_driver' => 'Cache-Driver', + 'queue_driver' => 'Kø-Driver', + 'session_driver' => 'Økt Driver', + 'mail_driver' => 'E-post driver', + 'mail_host' => 'E-post tjener', + 'mail_address' => 'E-post-fra adresse', + 'mail_username' => 'E-post brukernavn', + 'mail_password' => 'E-post passord', + ], + + // Login form fields + 'login' => [ + 'login' => 'Brukernavn eller e-post', + 'email' => 'E-post', + 'password' => 'Passord', + '2fauth' => 'Autentiseringskode', + 'invalid' => 'Ugyldig brukernavn eller passord', + 'invalid-token' => 'Ugyldig token', + 'cookies' => 'Du må aktivere informasjonskapsler for å logge inn.', + 'rate-limit' => 'Hyppighetsgrense overskredet.', + 'remember_me' => 'Husk meg', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'component' => 'Komponent', + 'component_status' => 'Komponentstatus', + 'message' => 'Melding', + 'message-help' => 'Du kan også bruke Markdown.', + 'occurred_at' => 'Når inntraff denne hendelsen?', + 'notify_subscribers' => 'Varsle abonnenter?', + 'notify_disabled' => 'På grunn av planlagt vedlikehold vil meldinger om denne hendelsen eller komponentene bli utelatt.', + 'visibility' => 'Hendelsens synlighet', + 'stick_status' => 'Fest hendelsen', + 'stickied' => 'Festet', + 'not_stickied' => 'Ikke festet', + 'public' => 'Offentlig synlig', + 'logged_in_only' => 'Bare synlig for innloggede brukere', + 'templates' => [ + 'name' => 'Navn', + 'template' => 'Mal', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'message' => 'Melding', + 'message-help' => 'Du kan også bruke Markdown.', + 'scheduled_at' => 'Når er dette vedlikeholdet planlagt for?', + 'completed_at' => 'Når er dette vedlikeholdet fullført?', + 'templates' => [ + 'name' => 'Navn', + 'template' => 'Mal', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Navn', + 'status' => 'Status', + 'group' => 'Gruppe', + 'description' => 'Beskrivelse', + 'link' => 'Lenke', + 'tags' => 'Etiketter', + 'tags-help' => 'Atskilt med komma.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Navn', + 'collapsing' => 'Vis/skjul alternativer', + 'visible' => 'Always expanded', + 'collapsed' => 'Skjul gruppen som standard', + 'collapsed_incident' => 'Skjul gruppen, men utvid hvis det er problemer', + 'visibility' => 'Synlighet', + 'visibility_public' => 'Synlig for offentligheten', + 'visibility_authenticated' => 'Vises bare for påloggede brukere', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Navn', + 'description' => 'Beskrivelse', + 'start_at' => 'Planlagte starttidspunkt', + 'timezone' => 'Tidssone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Gruppe', + 'active' => 'Aktiv?', + 'groups' => [ + 'name' => 'Gruppenavn', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Navn', + 'suffix' => 'Suffiks', + 'description' => 'Beskrivelse', + 'description-help' => 'Du kan også bruke Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Standardverdi', + 'calc_type' => 'Kalkulering av beregninger', + 'type_sum' => 'Sum', + 'type_avg' => 'Gjennomsnittlig', + 'places' => 'Decimal places', + 'default_view' => 'Standardvisning', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Synlighet', + 'visibility_authenticated' => 'Synlig for innloggede brukere', + 'visibility_public' => 'Synlig for alle', + 'visibility_hidden' => 'Alltid skjult', + + 'points' => [ + 'value' => 'Verdi', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nettstedsnavn', + 'site-url' => 'Site URL', + 'display-graphs' => 'Vis grafer på statussiden?', + 'about-this-page' => 'Om denne siden', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Statusside oppdateringsfrekvens (i sekunder)', + 'major_outage_rate' => 'Større brudd terskel (i %)', + 'banner' => 'Bannerbilde', + 'banner-help' => 'Det anbefales at du ikke laster opp bilder bredere enn 930 piksler', + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Utelat notifikasjoner når hendelse inntreffer under vedlikeholdsperiode?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Vis tidssonen statussiden kjører med', + 'only_disrupted_days' => 'Bare vis dager som inneholder hendelser i tidslinjen?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Alltid autentiser', + 'always-authenticate-help' => 'Krev innlogging for å vise alle Cachet sider', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Bakgrunnsfarge', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Aktivere fullbredde banner?', + 'text-color' => 'Tekstfarge', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Brukernavn', + 'email' => 'E-post', + 'password' => 'Passord', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'Bruker', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Velg tidssone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Registerer deg', + 'manage_updates' => 'Administrer oppdateringer', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/no-NO/notifications.php b/resources/lang/no-NO/notifications.php new file mode 100644 index 000000000000..473b893027bc --- /dev/null +++ b/resources/lang/no-NO/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Komponentstatus oppdatert', + 'greeting' => 'En komponents status ble oppdatert!', + 'content' => ':name status endret fra :old_status til :new_status.', + 'action' => 'Vis', + ], + 'slack' => [ + 'title' => 'Komponentstatus oppdatert', + 'content' => ':name status endret fra :old_status til :new_status.', + ], + 'sms' => [ + 'content' => ':name status endret fra :old_status til :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Ny hendelse rapportert', + 'greeting' => 'En ny hendelse ble rapportert på :app_name.', + 'content' => 'Hendelsen :name ble rapportert', + 'action' => 'Vis', + ], + 'slack' => [ + 'title' => 'Hendelse :name rapportert', + 'content' => 'En ny hendelse ble rapportert på :app_name', + ], + 'sms' => [ + 'content' => 'En ny hendelse ble rapportert på :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Hendelse oppdatert', + 'content' => ':name ble oppdatert', + 'title' => ':name ble oppdatert til :new_status', + 'action' => 'Vis', + ], + 'slack' => [ + 'title' => ':name oppdatert', + 'content' => ':name ble oppdatert til :new_status', + ], + 'sms' => [ + 'content' => 'Hendelse :name ble oppdatert', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Ny tidsplan opprettet', + 'content' => ':name ble planlagt for :dato', + 'title' => 'En ny planlagt vedlikehold ble opprettet.', + 'action' => 'Vis', + ], + 'slack' => [ + 'title' => 'Ny tidsplan opprettet!', + 'content' => ':name ble planlagt for :dato', + ], + 'sms' => [ + 'content' => ':name ble planlagt for :dato', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Bekreft ditt abonnement', + 'content' => 'Klikk for å bekrefte abonnementet til :app_name statussiden.', + 'title' => 'Bekreft abonnementet til :app_name statussiden.', + 'action' => 'Bekreft', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping fra Cachet!', + 'content' => 'Dette er en testnotifikasjon fra Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Din invitasjon er her...', + 'content' => 'Du har blitt invitert til å ta del i :app_name statussiden.', + 'title' => 'Du er invitert til å ta del i :app_name statussiden.', + 'action' => 'Aksepter', + ], + ], + ], +]; diff --git a/resources/lang/no-NO/pagination.php b/resources/lang/no-NO/pagination.php new file mode 100644 index 000000000000..466ef5db5759 --- /dev/null +++ b/resources/lang/no-NO/pagination.php @@ -0,0 +1,28 @@ + 'Forrige', + 'next' => 'Neste', + +]; diff --git a/resources/lang/no-NO/setup.php b/resources/lang/no-NO/setup.php new file mode 100644 index 000000000000..dc75a6dcd8de --- /dev/null +++ b/resources/lang/no-NO/setup.php @@ -0,0 +1,23 @@ + 'Oppsett', + 'title' => 'Installer Cachet', + 'service_details' => 'Tjenestedetaljer', + 'env_setup' => 'Miljøoppsett', + 'status_page_setup' => 'Statusside-oppsett', + 'show_support' => 'Vis at du støtter Cachet?', + 'admin_account' => 'Administratorkonto', + 'complete_setup' => 'Fullfør oppsett', + 'completed' => 'Konfigurering av Cachet var vellykket!', + 'finish_setup' => 'Gå til dashbord', +]; diff --git a/resources/lang/no-NO/validation.php b/resources/lang/no-NO/validation.php new file mode 100644 index 000000000000..bcf3ccdc7814 --- /dev/null +++ b/resources/lang/no-NO/validation.php @@ -0,0 +1,122 @@ + ':attribute må være godkjent.', + 'active_url' => ':attribute er ikke en gyldig URL.', + 'after' => ':attribute må være en dato etter :date.', + 'alpha' => ':attribute kan kun inneholde bokstaver.', + 'alpha_dash' => ':attribute kan kun inneholde bokstaver, tall og bindestreker.', + 'alpha_num' => ':attribute kan bare inneholde bokstaver og tall.', + 'array' => 'The :attribute must be an array.', + 'before' => ':attribute må være en dato før :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => ':attribute må være mellom :min og :max kilobyte.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => ':attribute bekreftelsen samsvarer ikke.', + 'date' => ':attribute er ikke en gyldig dato.', + 'date_format' => ':attribute passer ikke med formatet :format.', + 'different' => ':attribute og :other må være forskjellige.', + 'digits' => ':attribute må være :digits sifre.', + 'digits_between' => ':attribute må være mellom :min og :max sifre.', + 'email' => ':attribute må være en gyldig e-postadresse.', + 'exists' => 'Valgte :attribute er ugyldig.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'Feltet :attribute er påkrevd.', + 'image' => ':attribute må være et bilde.', + 'in' => 'Valgte :attribute er ugyldig.', + 'in_array' => ':attribute feltet finnes ikke i :other.', + 'integer' => ':attribute må være et heltall.', + 'ip' => ':attribute må være en gyldig IP-adresse.', + 'json' => ':attribute må være en gyldig JSON streng.', + 'max' => [ + 'numeric' => ':attribute kan ikke være større enn :max.', + 'file' => ':attribute kan ikke være større enn :max kilobyte.', + 'string' => ':attribute kan ikke være større enn :max tegn.', + 'array' => ':attribute kan ikke har mer enn :max elementer.', + ], + 'mimes' => ':attribute må være en fil av typen: :values.', + 'min' => [ + 'numeric' => ':attribute må være minst :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => ':attribute må ha minst :min tegn.', + 'array' => ':attribute må ha minst :min elementer.', + ], + 'not_in' => 'Valgte :attribute er ugyldig.', + 'numeric' => ':attribute må være et nummer.', + 'present' => ':attribute må finnes.', + 'regex' => ':attribute formatet er ugyldig.', + 'required' => 'Feltet :attribute er påkrevd.', + 'required_if' => ':attribute er påkrevd når :other er :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => ':attribute feltet kreves når :values er til stede.', + 'required_with_all' => ':attribute feltet kreves når :values er til stede.', + 'required_without' => ':attribute er påkrevd når :values ikke er tilstede.', + 'required_without_all' => ':attribute kreves når ingen av :values er tilstede.', + 'same' => ':attribute og :other må være like.', + 'size' => [ + 'numeric' => ':attribute må være :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => ':attribute må være :size tegn.', + 'array' => ':attribute må inneholde :size elementer.', + ], + 'string' => ':attribute må være en tekst.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => ':attribute formatet er ugyldig.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/no/dashboard.php b/resources/lang/no/dashboard.php index 509e872f2d46..7935f2b41466 100644 --- a/resources/lang/no/dashboard.php +++ b/resources/lang/no/dashboard.php @@ -11,47 +11,53 @@ return [ - 'dashboard' => 'Dashbord', + 'dashboard' => 'Dashbord', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => 'Hendelser & Timeplan', + 'title' => 'Incidents & Schedule', 'incidents' => 'Hendelser', 'logged' => '{0} Det er ingen hendelser, bra jobbet.|Du har en logget hendelse.|Du har rapportert :count hendelser.', 'incident-create-template' => 'Opprett mal', 'incident-templates' => 'Hendelsesmaler', + 'updates' => '{0} null oppdateringer | Én oppdatering |: telle oppdateringer', 'add' => [ - 'title' => 'Report an incident', - 'success' => 'Incident added.', - 'failure' => 'There was an error adding the incident, please try again.', + 'title' => 'Rapportere en hendelse', + 'success' => 'Hendelse lagt til.', + 'failure' => 'Det oppstod en feil når du la til til hendelsen, prøv igjen.', ], 'edit' => [ - 'title' => 'Edit an incident', + 'title' => 'Rediger en hendelse', 'success' => 'Hendelse oppdatert.', - 'failure' => 'There was an error editing the incident, please try again.', + 'failure' => 'Det oppstod en feil under redigering av hendelsen, prøv igjen.', ], 'delete' => [ - 'success' => 'The incident has been deleted and will not show on your status page.', - 'failure' => 'The incident could not be deleted, please try again.', + 'success' => 'Hendelsen er slettet og vil ikke vises på statussiden din.', + 'failure' => 'Hendelsen kunne ikke slettes, prøv igjen.', + ], + 'update' => [ + 'title' => 'Opprett ny hendelseoppdatering', + 'subtitle' => 'Legge til oppdatering av : hendelsen', ], // Incident templates 'templates' => [ 'title' => 'Hendelsesmaler', 'add' => [ - 'title' => 'Create an incident template', - 'message' => 'You should add an incident template.', - 'success' => 'Your new incident template has been created.', - 'failure' => 'Something went wrong with the incident template.', + 'title' => 'Lag en hendelsesmal', + 'message' => 'Du bør legge til en hendelsesmal.', + 'success' => 'Din nye hendelsesmal er opprettet.', + 'failure' => 'Noe gikk galt med hendelsesmalen.', ], 'edit' => [ - 'title' => 'Edit Template', - 'success' => 'The incident template has been updated.', - 'failure' => 'Something went wrong updating the incident template', + 'title' => 'Rediger mal', + 'success' => 'Hendelsensmalen er oppdatert.', + 'failure' => 'Noe gikk galt under oppdatering av hendelsesmalen', ], 'delete' => [ - 'success' => 'The incident template has been deleted.', - 'failure' => 'The incident template could not be deleted, please try again.', + 'success' => 'Hendelsesmalen er slettet.', + 'failure' => 'Hendelsesmalen kunne ikke slettes, prøv igjen.', ], ], ], @@ -59,21 +65,21 @@ // Incident Maintenance 'schedule' => [ 'schedule' => 'Planlagt vedlikehold', - 'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported :count schedules.', + 'logged' => '{0} Det er ingen tidsplaner, bra jobbet. | Du har logget en hendelse. | Du har rapportert : antall tidsplaner.', 'scheduled_at' => 'Planlagt til :timestamp', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Legg til planlagt vedlikehold', + 'success' => 'Tidsplan lagt til.', + 'failure' => 'Noe gikk galt med å legge til tidsplanen, prøv igjen.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Redigere planlagt vedlikehold', + 'success' => 'Tidsplanen er oppdatert!', + 'failure' => 'Noe gikk galt med å redigere tidsplanen, prøv igjen.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'Planlagt vedlikehold er slettet og vil ikke vises på statussiden din.', + 'failure' => 'Planlagt vedlikehold kunne ikke slettes, prøv igjen.', ], ], @@ -83,19 +89,19 @@ 'component_statuses' => 'Komponentstatus', 'listed_group' => 'Gruppert under :name', 'add' => [ - 'title' => 'Add a component', + 'title' => 'Legg til komponent', 'message' => 'Du burde legge til en komponent.', - 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'success' => 'Komponent lagt til.', + 'failure' => 'Noe gikk galt med komponentgruppen, prøv igjen.', ], 'edit' => [ - 'title' => 'Edit a component', - 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'title' => 'Redigere en komponent', + 'success' => 'Komponent oppdatert.', + 'failure' => 'Noe gikk galt med komponentgruppen, prøv igjen.', ], 'delete' => [ - 'success' => 'The component has been deleted!', - 'failure' => 'The component could not be deleted, please try again.', + 'success' => 'Komponenten har blitt slettet!', + 'failure' => 'Komponenten kunne ikke slettes, prøv igjen.', ], // Component groups @@ -103,18 +109,18 @@ 'groups' => 'Komponentgruppe | Komponentgrupper', 'no_components' => 'Du burde legge til en komponentgruppe.', 'add' => [ - 'title' => 'Add a component group', - 'success' => 'Component group added.', - 'failure' => 'Something went wrong with the component group, please try again.', + 'title' => 'Legg til en komponentgruppe', + 'success' => 'Komponentgruppe lagt til.', + 'failure' => 'Noe gikk galt med komponentgruppen, prøv igjen.', ], 'edit' => [ - 'title' => 'Edit a component group', - 'success' => 'Component group updated.', - 'failure' => 'Something went wrong with the component group, please try again.', + 'title' => 'Rediger komponentgruppe', + 'success' => 'Komponentgruppe oppdatert.', + 'failure' => 'Noe gikk galt med komponentgruppen, prøv igjen.', ], 'delete' => [ - 'success' => 'Component group has been deleted!', - 'failure' => 'The component group could not be deleted, please try again.', + 'success' => 'Komponentgruppen har blitt slettet!', + 'failure' => 'Komponentgruppen kunne ikke slettes, prøv igjen.', ], ], ], @@ -123,39 +129,39 @@ 'metrics' => [ 'metrics' => 'Beregninger', 'add' => [ - 'title' => 'Create a metric', - 'message' => 'You should add a metric.', - 'success' => 'Metric created.', - 'failure' => 'Something went wrong with the metric, please try again.', + 'title' => 'Opprett en beregning', + 'message' => 'Du bør legge til en beregning.', + 'success' => 'Beregning opprettet.', + 'failure' => 'Noe gikk galt med beregningen, prøv igjen.', ], 'edit' => [ - 'title' => 'Edit a metric', - 'success' => 'Metric updated.', - 'failure' => 'Something went wrong with the metric, please try again.', + 'title' => 'Rediger en beregning', + 'success' => 'Beregning oppdatert.', + 'failure' => 'Noe gikk galt med beregningen, prøv igjen.', ], 'delete' => [ - 'success' => 'The metric has been deleted and will no longer display on your status page.', - 'failure' => 'The metric could not be deleted, please try again.', + 'success' => 'Beregningen er slettet og vises ikke lenger på statussiden.', + 'failure' => 'Beregningen kunne ikke slettes, prøv igjen.', ], ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Subscribers', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => 'Verified', - 'not_verified' => 'Not verified', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', + 'subscribers' => 'Abonnenter', + 'description' => 'Abonnenter mottar e-postoppdateringer når hendelser opprettes eller komponenter er oppdatert.', + 'verified' => 'Verifisert', + 'not_verified' => 'Ikke verifisert', + 'subscriber' => ': e-post, abonnert: dato', + 'no_subscriptions' => 'Abonnerer på alle oppdateringer', 'add' => [ - 'title' => 'Add a new subscriber', - 'success' => 'Subscriber has been added!', - 'failure' => 'Something went wrong adding the subscriber, please try again.', - 'help' => 'Enter each subscriber on a new line.', + 'title' => 'Legge til en ny abonnent', + 'success' => 'Abonnenten er lagt til!', + 'failure' => 'Noe gikk galt med å legge til abonnenten, prøv igjen.', + 'help' => 'Angi hver enkelt abonnent på en ny linje.', ], 'edit' => [ - 'title' => 'Update subscriber', - 'success' => 'Subscriber has been updated!', - 'failure' => 'Something went wrong editing the subscriber, please try again.', + 'title' => 'Oppdatering abonnent', + 'success' => 'Abonnenten er oppdatert!', + 'failure' => 'Noe gikk galt med å redigere abonnenten, prøv igjen.', ], ], @@ -166,23 +172,23 @@ 'profile' => 'Profil', 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ - 'title' => 'Add a new team member', - 'success' => 'Team member added.', - 'failure' => 'The team member could not be added, please try again.', + 'title' => 'Legge til nytt gruppemedlem', + 'success' => 'Gruppemedlem lagt til.', + 'failure' => 'Gruppemedlemmet kunne ikke legges til, prøv på nytt.', ], 'edit' => [ - 'title' => 'Update profile', - 'success' => 'Profile updated.', - 'failure' => 'Something went wrong updating the profile, please try again.', + 'title' => 'Oppdater profil', + 'success' => 'Profilen oppdatert.', + 'failure' => 'Noe gikk galt med å oppdatere profilen, prøv igjen.', ], 'delete' => [ - 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', - 'failure' => 'The team member could not be added, please try again.', + 'success' => 'Gruppemedlemmet er slettet og vil ikke lenger ha tilgang til oversikten!', + 'failure' => 'Gruppemedlemmet kunne ikke legges til, prøv på nytt.', ], 'invite' => [ - 'title' => 'Invite a new team member', - 'success' => 'An invite has been sent', - 'failure' => 'The invite could not be sent, please try again.', + 'title' => 'Inviter en ny medarbeider', + 'success' => 'Invitasjon er sendt', + 'failure' => 'Invitasjonen kunne ikke sendes, vennligst prøv igjen.', ], ], @@ -191,23 +197,34 @@ 'settings' => 'Innstillinger', 'app-setup' => [ 'app-setup' => 'Applikasjonsoppsett', - 'images-only' => 'Only images may be uploaded.', - 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + 'images-only' => 'Bare bilder kan lastes opp.', + 'too-big' => 'Filen du lastet opp er for stor. Last opp et bilde som er mindre enn :size', ], 'analytics' => [ 'analytics' => 'Analytics', ], + 'log' => [ + 'log' => 'Logg', + ], 'localization' => [ - 'localization' => 'Localization', + 'localization' => 'Regioninnstillinger', ], 'customization' => [ - 'customization' => 'Customization', - 'header' => 'Custom Header HTML', - 'footer' => 'Custom Footer HTML', + 'customization' => 'Tilpasninger', + 'header' => 'Egendefinert topptekst HTML', + 'footer' => 'Egendefinert bunntekst HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], ], 'security' => [ 'security' => 'Sikkerhet', - 'two-factor' => 'Users without two-factor authentication', + 'two-factor' => 'Brukere uten to-faktor autentifisering', ], 'stylesheet' => [ 'stylesheet' => 'Stilark', @@ -216,25 +233,25 @@ 'theme' => 'Tema', ], 'edit' => [ - 'success' => 'Settings saved.', - 'failure' => 'Settings could not be saved.', + 'success' => 'Innstillinger lagret.', + 'failure' => 'Kan ikke lagre innstillingene.', ], 'credits' => [ - 'credits' => 'Credits', - 'contributors' => 'Contributors', - 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', - 'backers-title' => 'Backers & Sponsors', - 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', - 'thank-you' => 'Thank you to each and every one of the :count contributors.', + 'credits' => 'Medvirkende', + 'contributors' => 'Bidragsytere', + 'license' => 'Cachet er en BSD-3-lisensiert åpen kildekode-prosjekt, utgitt av Alt tre Services Limited.', + 'backers-title' => 'Støttespillere & sponsorer', + 'backers' => 'Hvis du ønsker å støtte fremtidig utvikling, sjekk ut Cachet Patreon kampanjen.', + 'thank-you' => 'Takk til hver og en av de :count bidragsytere.', ], ], // Login 'login' => [ - 'login' => 'Login', - 'logged_in' => 'You\'re logged in.', - 'welcome' => 'Welcome Back!', - 'two-factor' => 'Please enter your token.', + 'login' => 'Logg inn', + 'logged_in' => 'Du er logget inn.', + 'welcome' => 'Velkommen tilbake!', + 'two-factor' => 'Skriv inn din token.', ], // Sidebar footer @@ -245,30 +262,30 @@ // Notifications 'notifications' => [ 'notifications' => 'Varslinger', - 'awesome' => 'Awesome.', - 'whoops' => 'Whoops.', + 'awesome' => 'Fantastisk.', + 'whoops' => 'Uff da.', ], // Widgets 'widgets' => [ - 'support' => 'Support Cachet', - 'support_subtitle' => 'Check out our Patreon page!', - 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'support' => 'Støtt Cachet', + 'support_subtitle' => 'Sjekk ut vår Patreon side!', + 'news' => 'Siste nyheter', + 'news_subtitle' => 'Hent nyeste oppdatering', ], // Welcome modal 'welcome' => [ - 'welcome' => 'Welcome to your new status page!', - 'message' => 'Your status page is almost ready! You might want to configure these extra settings', - 'close' => 'Take me straight to my dashboard', + 'welcome' => 'Velkommen til den nye statussiden, :username!', + 'message' => 'Du er nesten klar, men du vil kanskje konfigurere disse ekstra innstillingene først...', + 'close' => 'Jeg har det bra takk!', 'steps' => [ - 'component' => 'Create components', - 'incident' => 'Create incidents', - 'customize' => 'Customize', - 'team' => 'Add users', - 'api' => 'Generate API token', - 'two-factor' => 'Two Factor Authentication', + 'component' => 'Legg til dine komponenter', + 'incident' => 'Opprette en hendelse', + 'customize' => 'Tilpass siden din', + 'team' => 'Legg til gruppen din', + 'api' => 'Generere et API-token', + 'two-factor' => 'Sett opp to-faktor autentisering', ], ], diff --git a/resources/lang/no/forms.php b/resources/lang/no/forms.php index ccc6feb9925b..92bd98fed986 100644 --- a/resources/lang/no/forms.php +++ b/resources/lang/no/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Navn', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/pl-PL/cachet.php b/resources/lang/pl-PL/cachet.php new file mode 100644 index 000000000000..b46c6ed4c871 --- /dev/null +++ b/resources/lang/pl-PL/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Ostatnia aktualizacja :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Funktionsfähig', + 2 => 'Leistungsprobleme', + 3 => 'Teilweiser Ausfall', + 4 => 'Schwerer Ausfall', + ], + 'group' => [ + 'other' => 'Pozostałe komponenty', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Brak zgłoszonych incydentów', + 'past' => 'Vergangene Vorfälle', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', geplant :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Untersuchungen laufen', + 2 => 'Identifiziert', + 3 => 'Unter Beobachtung', + 4 => 'Behoben', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'API-Schlüssel neu generieren', + 'revoke' => 'API-Schlüssel widerrufen', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Ostatnia godzina', + 'hourly' => 'Letzte 12 Stunden', + 'weekly' => 'Wöchentlich', + 'monthly' => 'Monatlich', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Abonnieren', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Benachrichtigungen', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Jesteś obecnie zapisany na wszystkie aktualizacje.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Jesteś obecnie zapisany na poniższe aktualizacje.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Aktualisierungen per E-Mail abonnieren.', + 'subscribed' => 'Sie haben E-Mail-Benachrichtigungen abonniert, überprüfen Sie bitte Ihre E-Mail, um Ihr Abonnement zu bestätigen.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Ihre E-Mail-Abonnement ist bestätigt worden. Danke!', + 'manage' => 'Zarządzanie subskrypcją', + 'unsubscribe' => 'Von E-Mail-Updates deabonnieren.', + 'unsubscribed' => 'Ihre E-Mail-Abonnement wurde gekündigt.', + 'failure' => 'Etwas ist mit dem Abonnement schief gelaufen.', + 'already-subscribed' => 'Subskrypcja niemożliwa, :email jest już zapisany.', + ], + ], + + 'signup' => [ + 'title' => 'Zarejestruj się', + 'username' => 'Nazwa Użytkownika', + 'email' => 'E-Mail', + 'password' => 'Hasło', + 'success' => 'Twoje konto zostało utworzone.', + 'failure' => 'Coś poszło nie tak w trakcje rejestracji.', + ], + + 'system' => [ + 'update' => 'Nowsza wersja Cachet\'a jest dostępna. Kliknij tutaj, aby dowiedzieć się jak dokonać aktualizacji!', + ], + + // Modal + 'modal' => [ + 'close' => 'Zamknij', + 'subscribe' => [ + 'title' => 'Subskrybuj aktualizacje komponentu', + 'body' => 'Podaj swój adres email w celu subskrypcji aktualizacji dla tego komponentu. Jeśli byłeś już zapisany, otrzymujesz aktualizacje dla tego komponentu.', + 'button' => 'Abonnieren', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Bądź na bieżąco z aktualizacjami z :app.', + ], + ], + + // Other + 'home' => 'Strona Główna', + 'powered_by' => 'Obsługiwany przez Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Über diese Seite', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status-Feed', + +]; diff --git a/resources/lang/pl-PL/dashboard.php b/resources/lang/pl-PL/dashboard.php new file mode 100644 index 000000000000..2de72d14a8d8 --- /dev/null +++ b/resources/lang/pl-PL/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'Nie można zapisać zmian w pliku konfiguracyjnym Cachet. Proszę sprawdzić uprawnienia do katalogu ./bootstrap/cachet, serwer www musi mieć możliwość zapisu w tym katalogu.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Vorfälle', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Vorlage erstellen', + 'incident-templates' => 'Vorfall Vorlagen', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Utwórz nową aktualizację zdarzenia', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Vorfall hinzufügen', + 'success' => 'Dodano zdarzenie.', + 'failure' => 'Wystąpił błąd podczas dodawania wydarzenia, proszę spróbować ponownie.', + ], + 'edit' => [ + 'title' => 'Vorfall bearbeiten', + 'success' => 'Vorfall aktualisiert.', + 'failure' => 'Wystąpił błąd podczas edytowania wydarzenia, proszę spróbować ponownie.', + ], + 'delete' => [ + 'success' => 'Wydarzenie zostało usunięte i nie będzie widoczne na stronie statusu.', + 'failure' => 'Wydarzenie nie mogło zostać usunięte, proszę spróbować ponownie.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Vorfall Vorlagen', + 'add' => [ + 'title' => 'Vorfallvorlage erstellen', + 'message' => 'Create your first incident template.', + 'success' => 'Twój nowy szablon wydarzenia został utworzony.', + 'failure' => 'Coś poszło nie tak z szablonem wydarzenia.', + ], + 'edit' => [ + 'title' => 'Vorlage bearbeiten', + 'success' => 'Szablon wydarzenia został zaktualizowany.', + 'failure' => 'Coś poszło nie tak podczas aktualizacji szablonu wydarzenia', + ], + 'delete' => [ + 'success' => 'Szablon wydarzenia został usunięty.', + 'failure' => 'Szablon wydarzenia nie mógł zostać usunięty, proszę spróbować ponownie.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Geplant am :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Komponenten', + 'component_statuses' => 'Komponentenstatus', + 'listed_group' => 'Gruppiert unter :name', + 'add' => [ + 'title' => 'Komponente hinzufügen', + 'message' => 'Sie sollten eine Komponente erstellen.', + 'success' => 'Utworzono komponent.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', + ], + 'edit' => [ + 'title' => 'Komponente bearbeiten', + 'success' => 'Zaktualizowano komponent.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', + ], + 'delete' => [ + 'success' => 'Komponent został usunięty!', + 'failure' => 'Komponent nie mógł zostać usunięty, proszę spróbować ponownie.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Komponentgruppe|Komponentgruppen', + 'no_components' => 'Sie sollten eine Komponentengruppe hinzufügen.', + 'add' => [ + 'title' => 'Eine Komponentengruppe hinzufügen', + 'success' => 'Dodano grupę komponentów.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', + ], + 'edit' => [ + 'title' => 'Komponentengruppe bearbeiten', + 'success' => 'Zaktualizowano grupę komponentów.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', + ], + 'delete' => [ + 'success' => 'Grupa komponentów została usunięta!', + 'failure' => 'Grupa komponentów nie mogła zostać usunięta, proszę spróbować ponownie.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metriken', + 'add' => [ + 'title' => 'Metrik erstellen', + 'message' => 'Powinieneś dodać metrykę.', + 'success' => 'Utworzono metrykę.', + 'failure' => 'Coś poszło nie tak z metryką, proszę próbować ponownie.', + ], + 'edit' => [ + 'title' => 'Metrik bearbeiten', + 'success' => 'Zaktualizowano metrykę.', + 'failure' => 'Coś poszło nie tak z metryką, proszę próbować ponownie.', + ], + 'delete' => [ + 'success' => 'Metryka została usunięta i nie będzie wyświetlana na stronie statusu.', + 'failure' => 'Metryka nie mogła zostać usunięta, proszę spróbować ponownie.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Abonnenten', + 'description' => 'Subskrybenci będą otrzymywać powiadomienia, gdy wydarzenia zostaną utworzone lub komponenty zaktualizowane.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verifiziert', + 'not_verified' => 'Nicht verifiziert', + 'subscriber' => ':email, subskrybowany :data', + 'no_subscriptions' => 'Zapisano do wszystkich aktualizacji', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Einen neuen Abonnenten hinzufügen', + 'success' => 'Abonnent hinzugefügt.', + 'failure' => 'Coś poszło nie tak podczas dodawania subskrybenta, proszę spróbować ponownie.', + 'help' => 'Wpisz każdego subskrybenta w nowym wierszu.', + ], + 'edit' => [ + 'title' => 'Abonnent aktualisieren', + 'success' => 'Abonnent aktualisiert.', + 'failure' => 'Coś poszło nie tak podczas edytowania subskrybenta, proszę spróbować ponownie.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Mitglied', + 'profile' => 'Profil', + 'description' => 'Teammitglieder werden die Möglichkeit haben, Komponente sowie Vorfälle hinzuzufügen und zu verändern.', + 'add' => [ + 'title' => 'Neues Teammitglied hinzufügen', + 'success' => 'Dodano członka zespołu.', + 'failure' => 'Członek zespołu nie mógł zostać dodany, proszę spróbować ponownie.', + ], + 'edit' => [ + 'title' => 'Profil aktualisieren', + 'success' => 'Zaktualizowano profil.', + 'failure' => 'Coś poszło nie tak podczas aktualizacji profilu, proszę spróbować ponownie.', + ], + 'delete' => [ + 'success' => 'Benutzer aktualisiert.', + 'failure' => 'Członek zespołu nie mógł zostać dodany, proszę spróbować ponownie.', + ], + 'invite' => [ + 'title' => 'Zaproś nowego członka zespołu', + 'success' => 'Zaproszenie zostało wysłane', + 'failure' => 'Zaproszenie nie mogło zostać wysłane, proszę spróbować ponownie.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Einstellungen', + 'app-setup' => [ + 'app-setup' => 'Anwendungsinstallation', + 'images-only' => 'Es können nur Bilder hochgeladen werden.', + 'too-big' => 'Die von Ihnen hochgeladene Datei ist zu groß. Laden Sie ein Bild welches kleiner als :size ist hoch', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Logi', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Dostosowywanie', + 'header' => 'Niestandardowy nagłówek HTML', + 'footer' => 'Niestandardowa stopka HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Sicherheit', + 'two-factor' => 'Nutzer ohne Zwei-Faktor-Authentifizierung', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Einstellungen gespeichert.', + 'failure' => 'Einstellungen konnten nicht gespeichert werden.', + ], + 'credits' => [ + 'credits' => 'Autorzy', + 'contributors' => 'Współtwórcy', + 'license' => 'Catchet jest otwartym źródłem z licencją BSD utworzonym przez Alt Three Services Limited.', + 'backers-title' => 'Patronaci i sponsorzy', + 'backers' => 'Jeśli chciałbyś wspomóc przyszły rozwój sprawdź kampanię Cachet Patreon.', + 'thank-you' => 'Dziękujemy każdemu :count współtwórcy.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Anmelden', + 'logged_in' => 'Sie sind angemeldet.', + 'welcome' => 'Willkommen zurück!', + 'two-factor' => 'Bitte geben Sie Ihren Token ein.', + ], + + // Sidebar footer + 'help' => 'Hilfe', + 'status_page' => 'Statusseite', + 'logout' => 'Abmelden', + + // Notifications + 'notifications' => [ + 'notifications' => 'Benachrichtigungen', + 'awesome' => 'Großartig.', + 'whoops' => 'Hoppla.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Wspomóż Cachet', + 'support_subtitle' => 'Sprawdź również naszą stronę na Patreon!', + 'news' => 'Aktualności', + 'news_subtitle' => 'Pobierz najnowszą aktualizację', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Witamy w nowym statusie strony!', + 'message' => 'Ihre Statusseite ist fast fertig! Vielleicht möchten Sie diese zusätzlichen Einstellungen konfigurieren', + 'close' => 'Przejdź prosto do panelu głównego', + 'steps' => [ + 'component' => 'Komponenten erstellen', + 'incident' => 'Vorfälle erstellen', + 'customize' => 'Personalisieren', + 'team' => 'Benutzer hinzufügen', + 'api' => 'API Token generieren', + 'two-factor' => 'Zwei-Faktor-Authentifizierung', + ], + ], + +]; diff --git a/resources/lang/pl-PL/forms.php b/resources/lang/pl-PL/forms.php new file mode 100644 index 000000000000..0c1f804b920f --- /dev/null +++ b/resources/lang/pl-PL/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'E-Mail', + 'username' => 'Nazwa Użytkownika', + 'password' => 'Hasło', + 'site_name' => 'Nazwa strony', + 'site_domain' => 'Domena', + 'site_timezone' => 'Wybierz swoją strefę czasową', + 'site_locale' => 'Wybierz swój język', + 'enable_google2fa' => 'Włącz weryfikację dwuetapową Google Authenticator', + 'cache_driver' => 'Sposób przechowywania cache', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Sposób przechowywania sesji', + 'mail_driver' => 'Sposób wysyłania wiadomości e-mail', + 'mail_host' => 'Adres hosta poczty', + 'mail_address' => 'Nadawca wiadomości', + 'mail_username' => 'Nazwa użytkownika poczty', + 'mail_password' => 'Hasło użytkownika poczty', + ], + + // Login form fields + 'login' => [ + 'login' => 'Nazwa użytkownika lub e-mail', + 'email' => 'E-Mail', + 'password' => 'Hasło', + '2fauth' => 'Kod autoryzacyjny', + 'invalid' => 'Nieprawidłowa nazwa użytkownika lub hasło', + 'invalid-token' => 'Nieprawidłowy token', + 'cookies' => 'Musisz włączyć obsługę cookies, aby móc się zalogować.', + 'rate-limit' => 'Przekroczono limit.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nazwa', + 'status' => 'Status', + 'component' => 'Komponent', + 'component_status' => 'Component Status', + 'message' => 'Nachricht', + 'message-help' => 'Można użyć również języka znaczników.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Powiadomić subskrybentów?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Widoczność zdarzenia', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Widoczne publicznie', + 'logged_in_only' => 'Widoczne tylko dla zalogowanych użytkowników', + 'templates' => [ + 'name' => 'Nazwa', + 'template' => 'Szablon', + 'twig' => 'Szablony wydarzeń mogą korzystać z języka szablonów Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nazwa', + 'status' => 'Status', + 'message' => 'Nachricht', + 'message-help' => 'Można użyć również języka znaczników.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nazwa', + 'template' => 'Szablon', + 'twig' => 'Szablony wydarzeń mogą korzystać z języka szablonów Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nazwa', + 'status' => 'Status', + 'group' => 'Gruppe', + 'description' => 'Beschreibung', + 'link' => 'Link', + 'tags' => 'Schlagwörter', + 'tags-help' => 'Durch Kommata trennen.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Nazwa', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Zawsze rozwinięte', + 'collapsed' => 'Domyślnie zwiń grupę', + 'collapsed_incident' => 'Zwiń grupę, ale rozwiń ją w razie problemów', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nazwa', + 'description' => 'Beschreibung', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Gruppe', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nazwa', + 'suffix' => 'Przyrostek', + 'description' => 'Beschreibung', + 'description-help' => 'Można użyć również języka znaczników.', + 'display-chart' => 'Pokazać diagram na stronie statusu?', + 'default-value' => 'Warość domyślna', + 'calc_type' => 'Obliczanie metryk', + 'type_sum' => 'Suma', + 'type_avg' => 'Średnia', + 'places' => 'Miejsca dziesiętne', + 'default_view' => 'Domyślny widok', + 'threshold' => 'Ile minut przerwy między punktami metrycznymi?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Wartość', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Nazwa strony', + 'site-url' => 'Adres URL strony', + 'display-graphs' => 'Pokazać wykresy na stronie statusu?', + 'about-this-page' => 'Informacje o tej stronie', + 'days-of-incidents' => 'Z ilu ostatnich dni pokazywać incydenty?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Baner', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Czy zezwolić użytkownikom na subskrypcje e-mail w celu otrzymywania powiadomień?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatycznie tłumaczyć twoją stronę statusu na język odwiedzającego?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Kod Google Analytics', + 'analytics_gosquared' => 'Kod GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'ID strony Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Strefa czasowa strony', + 'site-locale' => 'Język strony', + 'date-format' => 'Format daty', + 'incident-date-format' => 'Format daty przy zdarzeniach', + ], + 'security' => [ + 'allowed-domains' => 'Dozwolone domeny', + 'allowed-domains-help' => 'Oddzielone przecinkami. Domena jest automatycznie ustawiona wyżej domyślnie, jako dozwolona.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Niestandardowy arkusz stylów', + ], + 'theme' => [ + 'background-color' => 'Kolor tła', + 'background-fills' => 'Wypełnianie tła (komponenty, zdarzenia, stopka)', + 'banner-background-color' => 'Kolor tła pod banerem', + 'banner-padding' => 'Odstęp banera', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Kolor tekstu', + 'dashboard-login' => 'Pokazywać przycisk panelu głównego w stopce?', + 'reds' => 'Czerwony (używany przy błędach)', + 'blues' => 'Niebieski (używany przy informacjach)', + 'greens' => 'Zielony (używany przy powodzeniu)', + 'yellows' => 'Żółty (używany przy ostrzeżeniach)', + 'oranges' => 'Pomarańczowy (używany przy ogłoszeniach)', + 'metrics' => 'Wypełnienie metryki', + 'links' => 'Łącza', + ], + ], + + 'user' => [ + 'username' => 'Nazwa Użytkownika', + 'email' => 'E-Mail', + 'password' => 'Hasło', + 'api-token' => 'Token API', + 'api-token-help' => 'Ponowne wygenerowanie nowego tokenu API spowoduje, że aplikacje korzystające obecnie z Cachet utracą do niego dostęp.', + 'gravatar' => 'Zmień swój awatar na Gravatar.', + 'user_level' => 'Poziom użytkownika', + 'levels' => [ + 'admin' => 'Administrator', + 'user' => 'Użytkownik', + ], + '2fa' => [ + 'help' => 'Włączenie weryfikacji dwuetapowej zwiększa bezpieczeństwo. Pobierz Google Authenticator lub podobną aplikację. Po zalogowaniu zostaniesz poproszony o podanie kodu wygenerowanego przez aplikację.', + ], + 'team' => [ + 'description' => 'Zaproś nowych członków do swojego zespołu. Wpisz ich adresy e-mail tutaj.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Dodaj', + 'save' => 'Zapisz', + 'update' => 'Zaktualizuj', + 'create' => 'Utwórz', + 'edit' => 'Edytuj', + 'delete' => 'Usuń', + 'submit' => 'Prześlij', + 'cancel' => 'Anuluj', + 'remove' => 'Skasuj', + 'invite' => 'Zaproś', + 'signup' => 'Zarejestruj się', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Opcjonalnie', +]; diff --git a/resources/lang/pl-PL/notifications.php b/resources/lang/pl-PL/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/pl-PL/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/pl-PL/pagination.php b/resources/lang/pl-PL/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/pl-PL/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/pl-PL/setup.php b/resources/lang/pl-PL/setup.php new file mode 100644 index 000000000000..a298117818bc --- /dev/null +++ b/resources/lang/pl-PL/setup.php @@ -0,0 +1,23 @@ + 'Instalacja', + 'title' => 'Skonfiguruj Cachet', + 'service_details' => 'Szczegóły usługi', + 'env_setup' => 'Konfiguracja środowiska', + 'status_page_setup' => 'Skonfiguruj stronę statusu', + 'show_support' => 'Pokazać wsparcie dla Cachet?', + 'admin_account' => 'Konto Administratora', + 'complete_setup' => 'Zakończ instalację', + 'completed' => 'Cachet został pomyślnie skonfigurowany!', + 'finish_setup' => 'Przejdź do pulpitu', +]; diff --git a/resources/lang/pl-PL/validation.php b/resources/lang/pl-PL/validation.php new file mode 100644 index 000000000000..27272da7a26d --- /dev/null +++ b/resources/lang/pl-PL/validation.php @@ -0,0 +1,122 @@ + ':attribute muss akzeptiert werden.', + 'active_url' => ':attribute ist keine gültige Internet-Adresse.', + 'after' => ':attribute muss ein Datum nach dem :date sein.', + 'alpha' => ':attribute darf nur aus Buchstaben bestehen.', + 'alpha_dash' => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen. Umlaute (ä, ö, ü) und Eszett (ß) sind nicht erlaubt.', + 'alpha_num' => ':attribute darf nur aus Buchstaben, Zahlen, Binde- und Unterstrichen bestehen. Umlaute (ä, ö, ü) und Eszett (ß) sind nicht erlaubt.', + 'array' => ':attribute muss ein Array sein.', + 'before' => ':attribute muss ein Datum vor dem :date sein.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attribute muss zwischen :min & :max Elemente haben.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'Pole :attribute zawiera podwójną wartość.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute muss ein Bild sein.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'Pole :attribute nie istnieje w :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute musi być prawidłowym węzłem JSON.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute darf nicht mehr als :max Elemente haben.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute muss mindestens :min Kilobytes groß sein.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'Pole :attribute musi być obecne.', + 'regex' => 'Format atrybutu ":attribute" jest nieprawidłowy.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'Pole :attribute jest wymagane, chyba że :other jest w :values.', + 'required_with' => 'Pole :attribute jest wymagane kiedy obecne jest :values.', + 'required_with_all' => 'Pole :attribute jest wymagane kiedy obecne jest :values.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute muss :size Kilobytes groß sein.', + 'string' => ':attribute muss :size Zeichen lang sein.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute muss eine gültige Zeitzone sein.', + 'unique' => ':attribute ist schon vergeben.', + 'url' => 'Format atrybutu ":attribute" jest nieprawidłowy.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'Individuelle Nachricht', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/pl/dashboard.php b/resources/lang/pl/dashboard.php index 53d4e9b8bab8..28bc7e996c7f 100644 --- a/resources/lang/pl/dashboard.php +++ b/resources/lang/pl/dashboard.php @@ -11,15 +11,17 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => 'Ereignisse & Termine', + 'title' => 'Incidents & Schedule', 'incidents' => 'Vorfälle', 'logged' => '{0} Es gibt keine Vorfälle, gute Arbeit.|Du hast einen Vorfall gemeldet.|Du hast :count Vorfälle gemeldet.', 'incident-create-template' => 'Vorlage erstellen', 'incident-templates' => 'Vorfall Vorlagen', + 'updates' => '{0} Zero aktualizacji|Jedna aktualizacja|:count aktualizacji', 'add' => [ 'title' => 'Vorfall hinzufügen', 'success' => 'Dodano zdarzenie.', @@ -34,6 +36,10 @@ 'success' => 'Wydarzenie zostało usunięte i nie będzie widoczne na stronie statusu.', 'failure' => 'Wydarzenie nie mogło zostać usunięte, proszę spróbować ponownie.', ], + 'update' => [ + 'title' => 'Utwórz nową aktualizację zdarzenia', + 'subtitle' => 'Dodaj aktualizację do :incident', + ], // Incident templates 'templates' => [ @@ -105,12 +111,12 @@ 'add' => [ 'title' => 'Eine Komponentengruppe hinzufügen', 'success' => 'Dodano grupę komponentów.', - 'failure' => 'Coś poszło nie tak z grupą komponentów, proszę spróbować ponownie.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', ], 'edit' => [ 'title' => 'Komponentengruppe bearbeiten', 'success' => 'Zaktualizowano grupę komponentów.', - 'failure' => 'Coś poszło nie tak z grupą komponentów, proszę spróbować ponownie.', + 'failure' => 'Coś poszło nie tak z komponentem, proszę spróbować ponownie.', ], 'delete' => [ 'success' => 'Grupa komponentów została usunięta!', @@ -164,7 +170,7 @@ 'team' => 'Team', 'member' => 'Mitglied', 'profile' => 'Profil', - 'description' => 'Teammitglieder werden die Möglichkeit haben, Komponente sowie Vorfälle hinzuzufügen und zu verändern.', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ 'title' => 'Neues Teammitglied hinzufügen', 'success' => 'Dodano członka zespołu.', @@ -197,6 +203,9 @@ 'analytics' => [ 'analytics' => 'Analytics', ], + 'log' => [ + 'log' => 'Logi', + ], 'localization' => [ 'localization' => 'Localization', ], @@ -205,6 +214,14 @@ 'header' => 'Niestandardowy nagłówek HTML', 'footer' => 'Niestandardowa stopka HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Sicherheit', 'two-factor' => 'Nutzer ohne Zwei-Faktor-Authentifizierung', @@ -220,12 +237,12 @@ 'failure' => 'Einstellungen konnten nicht gespeichert werden.', ], 'credits' => [ - 'credits' => 'Credits', - 'contributors' => 'Contributors', - 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', - 'backers-title' => 'Backers & Sponsors', - 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', - 'thank-you' => 'Thank you to each and every one of the :count contributors.', + 'credits' => 'Autorzy', + 'contributors' => 'Współtwórcy', + 'license' => 'Catchet jest otwartym źródłem z licencją BSD utworzonym przez Alt Three Services Limited.', + 'backers-title' => 'Patronaci i sponsorzy', + 'backers' => 'Jeśli chciałbyś wspomóc przyszły rozwój sprawdź kampanię Cachet Patreon.', + 'thank-you' => 'Dziękujemy każdemu :count współtwórcy.', ], ], @@ -251,10 +268,10 @@ // Widgets 'widgets' => [ - 'support' => 'Support Cachet', - 'support_subtitle' => 'Check out our Patreon page!', - 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'support' => 'Wspomóż Cachet', + 'support_subtitle' => 'Sprawdź również naszą stronę na Patreon!', + 'news' => 'Aktualności', + 'news_subtitle' => 'Pobierz najnowszą aktualizację', ], // Welcome modal diff --git a/resources/lang/pl/forms.php b/resources/lang/pl/forms.php index 9c0c1f7f7ee4..e76f161cb890 100644 --- a/resources/lang/pl/forms.php +++ b/resources/lang/pl/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Vorlage', - 'twig' => 'Szablony wydarzeń mogą korzystać z języka szablonów Twig.', + 'twig' => 'Szablony wydarzeń mogą korzystać z języka szablonów Twig.', ], ], diff --git a/resources/lang/pt-BR/cachet.php b/resources/lang/pt-BR/cachet.php index 2f52ea1e6da9..b43dc750b4ed 100644 --- a/resources/lang/pt-BR/cachet.php +++ b/resources/lang/pt-BR/cachet.php @@ -14,6 +14,7 @@ 'components' => [ 'last_updated' => 'Última atualização :timestamp', 'status' => [ + 0 => 'Desconhecido', 1 => 'Operacional', 2 => 'Problemas de performance', 3 => 'Indisponibilidade parcial', @@ -22,18 +23,20 @@ 'group' => [ 'other' => 'Outros componentes', ], + 'select_all' => 'Marcar todos', + 'deselect_all' => 'Desmarcar todos', ], // Incidents 'incidents' => [ - 'none' => 'Nenhum incidente reportado', - 'past' => 'Incidentes anteriores', - 'previous_week' => 'Semana anterior', - 'next_week' => 'Próxima semana', - 'scheduled' => 'Manutenção Agendada', - 'scheduled_at' => ', agendada :timestamp', - 'status' => [ - 0 => 'Agendado', // TODO: Hopefully remove this. + 'none' => 'Nenhum incidente reportado', + 'past' => 'Incidentes anteriores', + 'stickied' => 'Incidentes Fixados', + 'scheduled' => 'Manutenção', + 'scheduled_at' => ', agendada :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Postado em :timestamp', + 'status' => [ 1 => 'Investigando', 2 => 'Identificado', 3 => 'Observando', @@ -41,11 +44,20 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Em breve', + 1 => 'Em Progresso', + 2 => 'Concluído', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] Sistema operacional|[2,Inf] Todos os sistemas estão operacionais', - 'bad' => '[0,1] O sistema encontra-se com alguns problemas|[2,Inf] Alguns sistemas estão com problemas', - 'major' => '[0,1] O serviço encontra-se com uma falha geral.|[2,Inf] Alguns sistemas encontram-se com falhas gerais', + 'good' => '[0,1] Sistema operacional | [2, *] Todos os sistemas estão operacionais', + 'bad' => '[0,1] O sistema apresenta falhas|[2,*] Alguns sistemas apresentam falhas', + 'major' => '[0,1] O sistema apresenta falhas críticas|[2,Inf] Alguns sistemas apresentam falhas críticas', ], 'api' => [ @@ -65,47 +77,29 @@ // Subscriber 'subscriber' => [ - 'subscribe' => 'Inscreva-se para obter as atualizações mais recentes', - 'button' => 'Inscreva-se', - 'manage' => [ - 'no_subscriptions' => 'Você está atualmente inscrito a todas as atualizações.', - 'my_subscriptions' => 'Você está atualmente inscrito para as seguintes atualizações.', + 'subscribe' => 'Inscreva-se para mudanças de status e atualizações de incidentes', + 'unsubscribe' => 'Cancelar inscrição', + 'button' => 'Inscreva-se', + 'manage_subscription' => 'Gerenciar inscrição', + 'manage' => [ + 'notifications' => 'Notificações', + 'notifications_for' => 'Gerenciar notificações', + 'no_subscriptions' => 'Você está atualmente inscrito a todas as atualizações.', + 'update_subscription' => 'Atualizar inscrição', + 'my_subscriptions' => 'Você está atualmente inscrito para as seguintes atualizações.', + 'manage_at_link' => 'Gerencie suas inscrições aqui :link', ], 'email' => [ - 'subscribe' => 'Inscreva-se para atualizações via e-mail.', - 'subscribed' => 'Inscrição realizada com sucesso! Por favor verifique o e-mail que enviamos à você para confirmar sua inscrição.', - 'verified' => 'Sua inscrição foi confirmada! Obrigado!', - 'manage' => 'Gerencie sua assinatura', - 'unsubscribe' => 'Não desejo mais receber notificações via e-mail.', - 'unsubscribed' => 'Sua inscrição foi cancelada.', - 'failure' => 'Ocorreu um problema na sua inscrição.', - 'already-subscribed' => 'Impossível inscrever :email pois já se encontra inscrito.', - 'verify' => [ - 'text' => "Por favor, confirme sua assinatura de e-mail para receber atualizações de status de :app_name. \n:link", - 'html' => '

          Por favor, confirme sua assinatura de e-mail para receber atualizações de status de :app_name.

          ', - 'button' => 'Confirmar inscrição', - ], - 'maintenance' => [ - 'subject' => '[Manutenção Programada] :name', - ], - 'incident' => [ - 'subject' => '[Novo incidente] :status: :name', - ], - 'component' => [ - 'subject' => 'Atualização do Estado do Componente', - 'text' => 'O componente :component_name teve uma mudança de estado. O componente está agora em :component_human_status.\nObrigado, :app_name', - 'html' => '

          O componente :component_name teve uma mudança de estado. O componente está agora em :component_human_status.

          Obrigado, :app_name

          ', - 'tooltip-title' => 'Inscrever-se as notificações de :component_name.', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o próximo link.\n:link\nObrigado,: app_name", - 'html' => '

          Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o seguinte link.

          :link

          Obrigado, :app_name

          ', - ], + 'manage_subscription' => 'Enviamos um e-mail para você, por favor clique no link para gerenciar sua assinatura', + 'subscribe' => 'Inscreva-se para atualizações via e-mail.', + 'subscribed' => 'Inscrição realizada com sucesso! Por favor verifique o e-mail que enviamos à você para confirmar sua inscrição.', + 'updated-subscribe' => 'Suas assinaturas foram atualizadas com sucesso.', + 'verified' => 'Sua inscrição foi confirmada! Obrigado!', + 'manage' => 'Gerencie sua assinatura', + 'unsubscribe' => 'Não desejo mais receber notificações via e-mail.', + 'unsubscribed' => 'Sua inscrição foi cancelada.', + 'failure' => 'Ocorreu um problema na sua inscrição.', + 'already-subscribed' => 'Impossível inscrever :email pois já se encontra inscrito.', ], ], @@ -132,10 +126,20 @@ ], ], + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Detalhes e atualizações sobre o ​​incidente :name ocorrido em :date', + 'schedule' => 'Detalhes sobre o período de manutenção agendada :name que começa em :startDate', + 'subscribe' => 'Inscreva-se para o :app e receba atualizações de incidentes e períodos de manutenção agendada', + 'overview' => 'Mantenha-se atualizado com as últimas atualizações de serviço de: app.', + ], + ], + // Other 'home' => 'Início', - 'description' => 'Mantenha-se atualizado com as últimas atualizações de serviço de: app.', 'powered_by' => 'Desenvolvido por Cachet.', + 'timezone' => 'Horários são exibidos em :timezone.', 'about_this_site' => 'Sobre este Site', 'rss-feed' => 'RSS', 'atom-feed' => 'Atom', diff --git a/resources/lang/pt-BR/dashboard.php b/resources/lang/pt-BR/dashboard.php index 833694603d20..2a8796aa88fe 100644 --- a/resources/lang/pt-BR/dashboard.php +++ b/resources/lang/pt-BR/dashboard.php @@ -11,15 +11,31 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Dashboard', + 'writeable_settings' => 'O diretório de configurações do Cachet não é gravável. Certifique-se de que ./bootstrap/cachet é gravável pelo servidor web.', // Incidents 'incidents' => [ - 'title' => 'Incidentes & Agenda', + 'title' => 'Incidentes & Agendamentos', 'incidents' => 'Incidentes', - 'logged' => '{0} Não existem incidentes, bom trabalho.|Você registrou um incidente.|Você reportou :count incidentes.', + 'logged' => '{0}Não existem incidentes, bom trabalho.|[1]Você adicionou um incidente.|[2,*]Você reportou :count incidentes.', 'incident-create-template' => 'Criar template', 'incident-templates' => 'Template de incidentes', + 'updates' => [ + 'title' => 'Atualizações para o incidente :incident', + 'count' => '{0}Nenhuma atualização|[1]Uma atualização|[2]Duas atualizações|[3,*]Várias atualizações', + 'add' => [ + 'title' => 'Crie uma nova atualização de incidente', + 'success' => 'Sua atualização de incidente foi criada.', + 'failure' => 'Algo deu errado com a atualização do incidente.', + ], + 'edit' => [ + 'title' => 'Editar atualização do incidente', + 'success' => 'Sua atualização de incidente foi atualizada.', + 'failure' => 'Algo deu errado ao atualizar as informações do incidente', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', 'add' => [ 'title' => 'Relatar um incidente', 'success' => 'Incidente adicionado.', @@ -40,7 +56,7 @@ 'title' => 'Template de incidentes', 'add' => [ 'title' => 'Criar um modelo de incidente', - 'message' => 'Você deve adicionar um modelo de incidente.', + 'message' => 'Crie seu primeiro template de incidente.', 'success' => 'Seu novo modelo de incidente foi criado.', 'failure' => 'Algo deu errado com o modelo de incidente.', ], @@ -58,22 +74,22 @@ // Incident Maintenance 'schedule' => [ - 'schedule' => 'Manutenção Agendada', - 'logged' => '{0} Não existem agendamentos, bom trabalho.|Você introduziu um agendamento.|Você reportou :count agendamentos.', + 'schedule' => 'Manutenção', + 'logged' => '{0}Ainda não ocorreu nenhuma manuteção, bom trabalho. |[1]Você agendou uma manuteção. | [2, *] Você adicionou : manutenções.', 'scheduled_at' => 'Agendada em :timestamp', 'add' => [ - 'title' => 'Adicionar manutenção programada', - 'success' => 'Programação adicionada.', - 'failure' => 'Ocorreu um problema ao adicionar a programação, por favor tente novamente.', + 'title' => 'Adicionar manutenção agendada', + 'success' => 'Manutenção adicionada.', + 'failure' => 'Algo deu errado ao adicionar a Manutenção, por favor tente novamente.', ], 'edit' => [ - 'title' => 'Edite a manutenção agendada', - 'success' => 'A programação foi atualizada!', - 'failure' => 'Ocorreu um problema ao editar a programação, por favor tente novamente.', + 'title' => 'Editar Manutenção', + 'success' => 'Manutenção atualizada!', + 'failure' => 'Algo deu errado ao editar a Manutenção, por favor tente novamente.', ], 'delete' => [ 'success' => 'A manutenção programada foi excluída e não aparecerá na sua página de status.', - 'failure' => 'A manutenção programada não pode ser excluída, por favor tente novamente.', + 'failure' => 'A Manutenção não pôde ser excluída, por favor tente novamente.', ], ], @@ -105,12 +121,12 @@ 'add' => [ 'title' => 'Adicionar um grupo de componentes', 'success' => 'Grupo de componentes adicionado.', - 'failure' => 'Algo deu errado com o grupo de componentes, por favor tente novamente.', + 'failure' => 'Algo deu errado com o componente, por favor tente novamente.', ], 'edit' => [ 'title' => 'Editar um grupo de componentes', 'success' => 'Grupo de componentes atualizado.', - 'failure' => 'Algo deu errado com o grupo de componentes, por favor tente novamente.', + 'failure' => 'Algo deu errado com o componente, por favor tente novamente.', ], 'delete' => [ 'success' => 'O grupo de componentes foi excluído!', @@ -140,13 +156,15 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Assinantes', - 'description' => 'Assinantes vão receber atualizações de e-mail quando incidentes criados ou componentes atualizados.', - 'verified' => 'Verificado', - 'not_verified' => 'Não verificado', - 'subscriber' => ':email, inscreveu-se em :date', - 'no_subscriptions' => 'Inscrito em todas as atualizações', - 'add' => [ + 'subscribers' => 'Assinantes', + 'description' => 'Assinantes vão receber atualizações de e-mail quando incidentes criados ou componentes atualizados.', + 'description_disabled' => 'Para utilizar esse recurso, você precisa permitir que as pessoas se cadastrem para notificações.', + 'verified' => 'Verificado', + 'not_verified' => 'Não verificado', + 'subscriber' => ':email, inscreveu-se em :date', + 'no_subscriptions' => 'Inscrito em todas as atualizações', + 'global' => 'Inscrito globalmente', + 'add' => [ 'title' => 'Adicionar um novo assinante', 'success' => 'Inscrito adicionado.', 'failure' => 'Algo deu errado adicionando o assinante, por favor tente novamente.', @@ -197,6 +215,9 @@ 'analytics' => [ 'analytics' => 'Estatísticas', ], + 'log' => [ + 'log' => 'Log', + ], 'localization' => [ 'localization' => 'Idioma', ], @@ -205,6 +226,14 @@ 'header' => 'HTML de cabeçalho personalizado', 'footer' => 'HTML de rodapé personalizado', ], + 'mail' => [ + 'mail' => 'E-Mail', + 'test' => 'Teste', + 'email' => [ + 'subject' => 'Notificação de teste do Cachet', + 'body' => 'Esta é uma notificação de teste do Cachet.', + ], + ], 'security' => [ 'security' => 'Segurança', 'two-factor' => 'Usuários sem autenticação de dois fatores', diff --git a/resources/lang/pt-BR/forms.php b/resources/lang/pt-BR/forms.php index a633671aad53..bc56f515f4ef 100644 --- a/resources/lang/pt-BR/forms.php +++ b/resources/lang/pt-BR/forms.php @@ -22,7 +22,13 @@ 'site_locale' => 'Selecione seu idioma', 'enable_google2fa' => 'Habilitar a autenticação de dois fatores do Google', 'cache_driver' => 'Driver de Cache', + 'queue_driver' => 'Driver na fila', 'session_driver' => 'Driver de Sessão', + 'mail_driver' => 'Driver de correio', + 'mail_host' => 'Host de correio', + 'mail_address' => 'Correio do endereço', + 'mail_username' => 'Nome de usuário de email', + 'mail_password' => 'Senha de email', ], // Login form fields @@ -35,6 +41,7 @@ 'invalid-token' => 'Token inválido', 'cookies' => 'Você deve habilitar os cookies do navegador para logar.', 'rate-limit' => 'Limite de acesso excedido.', + 'remember_me' => 'Lembrar-me', ], // Incidents form fields @@ -42,18 +49,36 @@ 'name' => 'Nome', 'status' => 'Status', 'component' => 'Componente', + 'component_status' => 'Status do componente', 'message' => 'Mensagem', 'message-help' => 'Você também pode usar o Markdown.', - 'scheduled_at' => 'Agendar a manutenção para quando?', - 'incident_time' => 'Quando esse incidente ocorreu?', + 'occurred_at' => 'Quando este incidente ocorreu?', 'notify_subscribers' => 'Notificar os assinantes?', + 'notify_disabled' => 'Devido a manutenção programada, notificações sobre este incidente ou seus componentes não serão feitas.', 'visibility' => 'Visibilidade do incidente', + 'stick_status' => 'Incidente fixado', + 'stickied' => 'Fixado', + 'not_stickied' => 'Não Fixado', 'public' => 'Visível para todos', 'logged_in_only' => 'Visível somente para usuários logados', 'templates' => [ 'name' => 'Nome', 'template' => 'Template', - 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', + 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nome', + 'status' => 'Status', + 'message' => 'Mensagem', + 'message-help' => 'Você também pode usar o Markdown.', + 'scheduled_at' => 'Esta manutenção foi programada para quando?', + 'completed_at' => 'Quando esta manutenção foi concluída?', + 'templates' => [ + 'name' => 'Nome', + 'template' => 'Template', + 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', ], ], @@ -69,28 +94,50 @@ 'enabled' => 'Componente activado?', 'groups' => [ - 'name' => 'Nome', - 'collapsing' => 'Escolha a visibilidade do grupo', - 'visible' => 'Sempre expandido', - 'collapsed' => 'Colapsar o grupo por padrão', - 'collapsed_incident' => 'Colapsar o grupo, mas expandir se ocorrer algum problema', + 'name' => 'Nome', + 'collapsing' => 'Expandir/recolher opções', + 'visible' => 'Sempre expandido', + 'collapsed' => 'Colapsar o grupo por padrão', + 'collapsed_incident' => 'Colapsar o grupo, mas expandir se ocorrer algum problema', + 'visibility' => 'Visibilidade', + 'visibility_public' => 'Visível ao Público', + 'visibility_authenticated' => 'Visível apenas para usuários autenticados', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nome', + 'description' => 'Descrição', + 'start_at' => 'Agendar horário de início', + 'timezone' => 'Fuso horário', + 'schedule_frequency' => 'Agendar frequência (em segundos)', + 'completion_latency' => 'Latência de conclusão (em segundos)', + 'group' => 'Grupo', + 'active' => 'Ativado?', + 'groups' => [ + 'name' => 'Nome do Grupo', ], ], // Metric form fields 'metrics' => [ - 'name' => 'Nome', - 'suffix' => 'Sufixo', - 'description' => 'Descrição', - 'description-help' => 'Você também pode usar Markdown.', - 'display-chart' => 'Exibir o gráfico na página de status?', - 'default-value' => 'Valor padrão', - 'calc_type' => 'Cálculo de métricas', - 'type_sum' => 'Soma', - 'type_avg' => 'Média', - 'places' => 'Casas decimais', - 'default_view' => 'Visualização padrão', - 'threshold' => 'Quantos minutos de limite entre os pontos das métricas?', + 'name' => 'Nome', + 'suffix' => 'Sufixo', + 'description' => 'Descrição', + 'description-help' => 'Você também pode usar o Markdown.', + 'display-chart' => 'Exibir o gráfico na página de status?', + 'default-value' => 'Valor padrão', + 'calc_type' => 'Cálculo de métricas', + 'type_sum' => 'Soma', + 'type_avg' => 'Média', + 'places' => 'Casas decimais', + 'default_view' => 'Visualização padrão', + 'threshold' => 'Quantos minutos de limite entre os pontos das métricas?', + 'visibility' => 'Visibilidade', + 'visibility_authenticated' => 'Visível para usuários autenticados', + 'visibility_public' => 'Visível para todos', + 'visibility_hidden' => 'Sempre oculto', 'points' => [ 'value' => 'Valor', @@ -99,22 +146,29 @@ // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => 'Nome do site', - 'site-url' => 'URL do site', - 'display-graphs' => 'Exibir gráficos na página de status?', - 'about-this-page' => 'Sobre esta página', - 'days-of-incidents' => 'Quantos dias de incidentes para mostrar?', - 'banner' => 'Imagem do banner', - 'banner-help' => 'É recomendável que você faça upload de arquivos menores que 930px .', - 'subscribers' => 'Permitir que outras pessoas se cadastrem para notificações via e-mail?', - 'automatic_localization' => 'Localizar sua página de status de acordo com o idioma do visitante automaticamente?', + 'site-name' => 'Nome do site', + 'site-url' => 'URL do site', + 'display-graphs' => 'Exibir gráficos na página de status?', + 'about-this-page' => 'Sobre esta página', + 'days-of-incidents' => 'Quantos dias de incidentes para mostrar?', + 'time_before_refresh' => 'Frequência de atualização da página de status (em segundos)', + 'major_outage_rate' => 'Limite de indisponibilidade (em %)', + 'banner' => 'Imagem do banner', + 'banner-help' => 'Recomenda-se que você envie arquivos com até 930 pixels de largura', + 'subscribers' => 'Permitir que outras pessoas se cadastrem para notificações via e-mail?', + 'suppress_notifications_in_maintenance' => 'Não enviar notificações quando o incidente ocorrer durante o período de manutenção?', + 'skip_subscriber_verification' => 'Ignorar verificação de usuários? (Cuidado, você pode sofrer com spam)', + 'automatic_localization' => 'Localizar sua página de status de acordo com o idioma do visitante automaticamente?', + 'enable_external_dependencies' => 'Ativar dependências de terceiros (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Mostrar o fuso horário no qual a página de status está sendo executada', + 'only_disrupted_days' => 'Mostrar apenas os dias que contenham incidentes na linha do tempo?', ], 'analytics' => [ 'analytics_google' => 'Código do Google Analytics', 'analytics_gosquared' => 'Código do GoSquared Analytics', - 'analytics_piwik_url' => 'URL para a instância do Piwik (sem o http(s)://)', + 'analytics_piwik_url' => 'URL da sua instância Piwik', 'analytics_piwik_siteid' => 'Id do site no Piwik', ], 'localization' => [ @@ -124,8 +178,10 @@ 'incident-date-format' => 'Formato de Hora do Incidente', ], 'security' => [ - 'allowed-domains' => 'Domínios permitidos', - 'allowed-domains-help' => 'Separados por vírgula. O domínio definido acima é permitido automaticamente por padrão.', + 'allowed-domains' => 'Domínios permitidos', + 'allowed-domains-help' => 'Separados por vírgula. O domínio definido acima é permitido automaticamente por padrão.', + 'always-authenticate' => 'Autenticar sempre', + 'always-authenticate-help' => 'Exigir login para ver qualquer página do sistema', ], 'stylesheet' => [ 'custom-css' => 'Folha de estilos personalizada', @@ -135,7 +191,7 @@ 'background-fills' => 'Preenchimento de Fundo (Componentes, Incidentes, Rodapé)', 'banner-background-color' => 'Cor de Fundo do banner', 'banner-padding' => 'Margem interna', - 'fullwidth-banner' => 'Habilitar largura completa do banner?', + 'fullwidth-banner' => 'Habilitar banner com largura total?', 'text-color' => 'Cor do Texto', 'dashboard-login' => 'Mostrar botão para painel no rodapé?', 'reds' => 'Vermelho (Usado para erros)', @@ -165,22 +221,32 @@ ], 'team' => [ 'description' => 'Convide membros da sua equipe através do endereço de e-mail aqui.', - 'email' => 'Email #:id', + 'email' => 'Endereço de e-mail dos membros da sua equipe', ], ], + 'general' => [ + 'timezone' => 'Selecione o fuso horário', + ], + + 'seo' => [ + 'title' => 'Título para SEO', + 'description' => 'Descrição para SEO', + ], + // Buttons - 'add' => 'Adicionar', - 'save' => 'Salvar', - 'update' => 'Atualizar', - 'create' => 'Criar', - 'edit' => 'Editar', - 'delete' => 'Apagar', - 'submit' => 'Enviar', - 'cancel' => 'Cancelar', - 'remove' => 'Remover', - 'invite' => 'Convite', - 'signup' => 'Cadastrar-se', + 'add' => 'Adicionar', + 'save' => 'Salvar', + 'update' => 'Atualizar', + 'create' => 'Criar', + 'edit' => 'Editar', + 'delete' => 'Apagar', + 'submit' => 'Enviar', + 'cancel' => 'Cancelar', + 'remove' => 'Remover', + 'invite' => 'Convite', + 'signup' => 'Cadastrar-se', + 'manage_updates' => 'Gerenciar atualizações', // Other 'optional' => '* Opcional', diff --git a/resources/lang/pt-BR/notifications.php b/resources/lang/pt-BR/notifications.php new file mode 100644 index 000000000000..a4fb209890f9 --- /dev/null +++ b/resources/lang/pt-BR/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Status do Componente Atualizado', + 'greeting' => 'O status de um componente foi atualizado!', + 'content' => 'O status de :name mudou de :old_status para :new_status.', + 'action' => 'Visualizar', + ], + 'slack' => [ + 'title' => 'Status do Componente Atualizado', + 'content' => 'O status de :name mudou de :old_status para :new_status.', + ], + 'sms' => [ + 'content' => 'O status de :name mudou de :old_status para :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Novo incidente reportado', + 'greeting' => 'Um novo incidente foi reportado em :app_name.', + 'content' => 'O Incidente :name foi reportado', + 'action' => 'Visualizar', + ], + 'slack' => [ + 'title' => 'Incidente :name reportado', + 'content' => 'Um novo incidente foi relatado em :app_name', + ], + 'sms' => [ + 'content' => 'Um novo incidente foi reportado em :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incidente Atualizado', + 'content' => ':name foi atualizado', + 'title' => ':name foi atualizado para :new_status', + 'action' => 'Visualizar', + ], + 'slack' => [ + 'title' => ':name atualizado', + 'content' => ':name foi atualizado para :new_status', + ], + 'sms' => [ + 'content' => 'Incidente :name foi atualizado', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'Novo Agendamento Criado', + 'content' => ':name foi agendado para :date', + 'title' => 'Uma nova manutenção agendada foi criada.', + 'action' => 'Visualizar', + ], + 'slack' => [ + 'title' => 'Novo Agendamento Criado!', + 'content' => ':name foi agendado para :date', + ], + 'sms' => [ + 'content' => ':name foi agendado para :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verifique a sua inscrição', + 'content' => 'Clique para verificar sua inscrição na página de status :app_name.', + 'title' => 'Verifique sua inscrição na página de status de :app_name.', + 'action' => 'Verifique', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Gerenciar inscrição', + 'content' => 'Clique para gerenciar sua inscrição na página de status de :app_name.', + 'title' => 'Clique para gerenciar sua inscrição na página de status de :app_name.', + 'action' => 'Gerenciar inscrição', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping do Cachet!', + 'content' => 'Esta é uma notificação de teste do Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Seu convite está aqui dentro...', + 'content' => 'Você foi convidado para fazer parte da página de status :app_name.', + 'title' => 'Você foi convidado para fazer parte da página de status :app_name.', + 'action' => 'Aceitar', + ], + ], + ], +]; diff --git a/resources/lang/pt-BR/pagination.php b/resources/lang/pt-BR/pagination.php index 5599d696218b..2eccd92284f0 100644 --- a/resources/lang/pt-BR/pagination.php +++ b/resources/lang/pt-BR/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« Anterior', - 'next' => 'Próximo »', + 'previous' => 'Anterior', + 'next' => 'Próxima', ]; diff --git a/resources/lang/pt-BR/validation.php b/resources/lang/pt-BR/validation.php index 4029fd21797b..37dfb385d9e9 100644 --- a/resources/lang/pt-BR/validation.php +++ b/resources/lang/pt-BR/validation.php @@ -23,7 +23,7 @@ */ 'accepted' => 'O campo :attribute deve ser aceito.', - 'active_url' => 'O campo :attribute não é uma URL válida.', + 'active_url' => 'O campo :attribute não contém uma URL válida.', 'after' => 'O campo :attribute deverá conter uma data posterior a :date.', 'alpha' => 'O campo :attribute deverá conter apenas letras.', 'alpha_dash' => 'O campo :attribute só pode conter letras, números, e hifens.', @@ -31,60 +31,60 @@ 'array' => 'O campo :attribute deve ser um vetor.', 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', 'between' => [ - 'numeric' => 'O campo :attribute deverá conter uma data anterior a :date.', - 'file' => 'O campo :attribute deverá ter um valor entre :min - :max.', - 'string' => 'O campo :attribute deverá ter um tamanho entre :min - :max kilobytes.', + 'numeric' => 'O campo :attribute deverá ter um valor entre :min - :max.', + 'file' => 'O campo :attribute deve estar entre :min e :max kilobytes.', + 'string' => 'O campo :attribute deve ter entre :min e :max caracteres.', 'array' => 'O campo :attribute deve ter entre :min e :max itens.', ], - 'boolean' => 'O campo :attribute deve ter entre :min e :max itens.', - 'confirmed' => 'O campo :attribute deve ser verdadeiro ou falso.', - 'date' => 'A confirmação do :attribute é inválida ou não correspondente.', - 'date_format' => 'O campo :attribute não contém uma data válida.', - 'different' => 'A data indicada para o campo :attribute não respeita o formato :format.', - 'digits' => 'Os campos :attribute e :other devem conter valores diferentes.', - 'digits_between' => 'O campo :attribute deve conter :digits dígitos.', - 'email' => 'O campo :attribute deve conter entre :min a :max dígitos.', - 'exists' => 'O campo :attribute tem que ser um e-mail válido.', + 'boolean' => 'O campo :attribute deve ser verdadeiro ou falso.', + 'confirmed' => 'A confirmação do campo :attribute não corresponde.', + 'date' => 'O campo :attribute não é uma data válida.', + 'date_format' => 'O campo :attribute não corresponde ao formato :format.', + 'different' => 'O campo :attribute e :other devem ser diferentes.', + 'digits' => 'O campo :attribute deve ter :digits dígitos.', + 'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.', + 'email' => 'O campo :attribute deve ser um endereço de email válido.', + 'exists' => 'O campo :attribute é inválido.', 'distinct' => 'O campo :attribute tem um valor duplicado.', - 'filled' => 'O formato de :attribute é inválido.', + 'filled' => 'O campo :attribute é obrigatório.', 'image' => 'O :attribute deve ser uma imagem.', - 'in' => 'O :attribute deve ser uma imagem.', + 'in' => 'O campo :attribute é inválido.', 'in_array' => 'O campo :attribute não existe em :other.', - 'integer' => 'O valor selecionado para o campo :attribute é inválido.', - 'ip' => 'O campo :attribute deve ser um número inteiro.', + 'integer' => 'O campo :attribute deve ser um número inteiro.', + 'ip' => 'O campo :attribute deve ser um endereço de IP válido.', 'json' => 'O :attribute tem que ser uma string JSON válida.', 'max' => [ - 'numeric' => 'O campo :attribute deve ser um IP válido.', - 'file' => 'O campo :attribute não pode ser maior do que :max.', - 'string' => 'O campo :attribute não deverá ter um tamanho superior a :max kilobytes.', + 'numeric' => 'O campo :attribute não deve ser maior que :max.', + 'file' => 'O campo :attribute não deve ser maior que :max kilobytes.', + 'string' => 'O campo :attribute não deve ser maior que :max caracteres.', 'array' => 'A: atributo não pode ter mais de que :max itens.', ], - 'mimes' => 'A: atributo não pode ter mais de que :max itens.', + 'mimes' => 'O campo :attribute deve ser um arquivo do tipo: :values.', 'min' => [ - 'numeric' => 'O campo :attribute deverá conter um arquivo do tipo: :values.', + 'numeric' => 'O campo :attribute deve ter no mínimo :min.', 'file' => 'O :attribute deve ter pelo menos :min kilobytes.', - 'string' => 'O :attribute deve ter pelo menos :min kilobytes.', - 'array' => 'O campo :attribute deverá conter no mínimo :min caracteres.', + 'string' => 'O campo :attribute deve ter no mínimo :min caracteres.', + 'array' => 'O campo :attribute deve ter no mínimo :min itens.', ], - 'not_in' => 'O campo :attribute deve ter pelo menos :min itens.', - 'numeric' => 'O valor selecionado para o campo :attribute é inválido.', + 'not_in' => 'O campo :attribute é inválido.', + 'numeric' => 'O campo :attribute deve ser um número.', 'present' => 'O campo :attribute deve estar presente.', - 'regex' => 'O campo :attribute deve ser um número.', - 'required' => 'O formato de :attribute é inválido.', - 'required_if' => 'O campo :attribute é obrigatório.', - 'required_unless' => 'O campo :attribute é obrigatório a não ser que :other estiver em :values.', - 'required_with' => 'O campo :attribute é obrigatório quando :other é :value.', + 'regex' => 'O formato de :attribute é inválido.', + 'required' => 'O campo :attribute é obrigatório.', + 'required_if' => 'O campo :attribute é obrigatório quando :other é :value.', + 'required_unless' => 'O campo :attribute é obrigatório a não ser que :other esteja entre :values.', + 'required_with' => 'O campo :attribute é obrigatório quando :values está presente.', 'required_with_all' => 'O campo :attribute é obrigatório quando :values está presente.', - 'required_without' => 'O campo :attribute é obrigatório quando :values está presente.', - 'required_without_all' => 'O campo :attribute é obrigatório quando :values não está presente.', - 'same' => 'O campo :attribute é necessário quando não há :values presentes.', + 'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.', + 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.', + 'same' => 'O campo :attribute e :other devem ser iguais.', 'size' => [ - 'numeric' => 'Os campos :attribute e :other devem ser iguais.', + 'numeric' => 'O campo :attribute deve ter :size caracteres.', 'file' => 'O :attribute deve ter :size kilobytes.', 'string' => 'O :attribute deve ter :size caracteres.', - 'array' => 'O :attribute deve ter :size caracteres.', + 'array' => 'O campo :attribute deve ter :size itens.', ], - 'string' => 'O campo :attribute deve ter :size itens.', + 'string' => 'O campo :attribute deve ser uma string.', 'timezone' => 'O :attribute deve ser uma zona válida.', 'unique' => 'O :attribute já existe.', 'url' => 'O formato de :attribute é inválido.', diff --git a/resources/lang/pt-PT/cachet.php b/resources/lang/pt-PT/cachet.php index 1b23057be9a7..8c50a99d1e4e 100644 --- a/resources/lang/pt-PT/cachet.php +++ b/resources/lang/pt-PT/cachet.php @@ -14,6 +14,7 @@ 'components' => [ 'last_updated' => 'Last updated :timestamp', 'status' => [ + 0 => 'Unknown', 1 => 'Operacional', 2 => 'Problemas de performance', 3 => 'Indisponibilidade parcial', @@ -22,18 +23,20 @@ 'group' => [ 'other' => 'Other Components', ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', ], // Incidents 'incidents' => [ - 'none' => 'Nenhum incidente reportado', - 'past' => 'Incidentes anteriores', - 'previous_week' => 'Semana anterior', - 'next_week' => 'Próxima semana', - 'scheduled' => 'Manutenção Agendada', - 'scheduled_at' => ', agendada :timestamp', - 'status' => [ - 0 => 'Agendada', // TODO: Hopefully remove this. + 'none' => 'Nenhum incidente reportado', + 'past' => 'Incidentes anteriores', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', agendada :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ 1 => 'Investigando', 2 => 'Identificado', 3 => 'Observando', @@ -41,11 +44,20 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] Sistema operacional|[2,Inf] Todos os sistemas estão operacionais', - 'bad' => '[0,1] O sistema encontra-se com alguns problemas|[2,Inf] Alguns sistemas estão com problemas', - 'major' => '[0,1] O serviço encontra-se com uma falha geral.|[2,Inf] Alguns sistemas encontram-se com falhas gerais', + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', ], 'api' => [ @@ -65,47 +77,29 @@ // Subscriber 'subscriber' => [ - 'subscribe' => 'Inscreva-se para obter as atualizações mais recentes', - 'button' => 'Subscrever', - 'manage' => [ - 'no_subscriptions' => 'You\'re currently subscribed to all updates.', - 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscrever', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notificações', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', ], 'email' => [ - 'subscribe' => 'Subscrever actualizações via email.', - 'subscribed' => 'Subscreveu as notificações por e-mail, por favor verifique o seu e-mail para confirmar a subscrição.', - 'verified' => 'A sua subscrição por e-mail foi confirmada. Obrigado!', - 'manage' => 'Manage your subscription', - 'unsubscribe' => 'Remover subscrição de e-mail.', - 'unsubscribed' => 'A sua subscrição de e-mail foi cancelada.', - 'failure' => 'Algo correu mal com a sua subscrição.', - 'already-subscribed' => 'Não posso subscrever :email pois já se encontra subscrito.', - 'verify' => [ - 'text' => "Please confirm your email subscription to :app_name status updates.\n:link", - 'html' => '

          Please confirm your email subscription to :app_name status updates.

          ', - 'button' => 'Confirm Subscription', - ], - 'maintenance' => [ - 'subject' => '[Maintenance Scheduled] :name', - ], - 'incident' => [ - 'subject' => '[New Incident] :status: :name', - ], - 'component' => [ - 'subject' => 'Atualização do Estado do Componente', - 'text' => 'O componente :component_name teve uma mudança de estado. O componente está agora em :component_human_status.\nObrigado, :app_name', - 'html' => '

          O componente :component_name teve uma mudança de estado. O componente está agora em :component_human_status.

          Obrigado, :app_name

          ', - 'tooltip-title' => 'Subscrever a notificações de :component_name.', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "Você foi convidado para a equipa :app_name página de status, para se inscrever siga o próximo link.\n:link\nObrigado, :app_name", - 'html' => '

          Foi convidado para a equipa :app_name página de status, para se inscrever siga o seguinte link.

          :link

          Obrigado, :app_name

          ', - ], + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscrever actualizações via email.', + 'subscribed' => 'Subscreveu as notificações por e-mail, por favor verifique o seu e-mail para confirmar a subscrição.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'A sua subscrição por e-mail foi confirmada. Obrigado!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Remover subscrição de e-mail.', + 'unsubscribed' => 'A sua subscrição de e-mail foi cancelada.', + 'failure' => 'Algo correu mal com a sua subscrição.', + 'already-subscribed' => 'Não posso subscrever :email pois já se encontra subscrito.', ], ], @@ -132,10 +126,20 @@ ], ], + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + // Other 'home' => 'Home', - 'description' => 'Stay up to date with the latest service updates from :app.', 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', 'about_this_site' => 'Sobre este Site', 'rss-feed' => 'RSS', 'atom-feed' => 'Atom', diff --git a/resources/lang/pt-PT/dashboard.php b/resources/lang/pt-PT/dashboard.php index 3f54feb36e06..353828fcb1a7 100644 --- a/resources/lang/pt-PT/dashboard.php +++ b/resources/lang/pt-PT/dashboard.php @@ -11,15 +11,31 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => 'Incidentes & Agendamentos', + 'title' => 'Incidents & Maintenance', 'incidents' => 'Ocorrências', - 'logged' => '{0} Não existem incidentes, bom trabalho.|Você registrou um incidente.|Você reportou :count incidentes.', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', 'incident-create-template' => 'Criar template', 'incident-templates' => 'Template de incidentes', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', 'add' => [ 'title' => 'Adicionar um incidente', 'success' => 'Incident added.', @@ -40,7 +56,7 @@ 'title' => 'Template de incidentes', 'add' => [ 'title' => 'Criar um modelo de incidente', - 'message' => 'Adicione um esboço de incidente.', + 'message' => 'Create your first incident template.', 'success' => 'Your new incident template has been created.', 'failure' => 'Something went wrong with the incident template.', ], @@ -58,22 +74,22 @@ // Incident Maintenance 'schedule' => [ - 'schedule' => 'Manutenção Agendada', - 'logged' => '{0} Não existem agendamentos, bom trabalho.|Você introduziu um agendamento.|Você reportou :count agendamentos.', + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', 'scheduled_at' => 'Agendada em :timestamp', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', ], ], @@ -86,12 +102,12 @@ 'title' => 'Adicionar um Componente', 'message' => 'Você deve adicionar um componente.', 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ 'title' => 'Editar um Componente', 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ 'success' => 'O componente foi apagado!', @@ -140,13 +156,15 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Assinantes', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => 'Verificado', - 'not_verified' => 'Não Verificado', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', - 'add' => [ + 'subscribers' => 'Assinantes', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verificado', + 'not_verified' => 'Não Verificado', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ 'title' => 'Adicionar um novo assinante', 'success' => 'Assinante adicionado.', 'failure' => 'Something went wrong adding the subscriber, please try again.', @@ -197,6 +215,9 @@ 'analytics' => [ 'analytics' => 'Analítica', ], + 'log' => [ + 'log' => 'Log', + ], 'localization' => [ 'localization' => 'Localização', ], @@ -205,6 +226,14 @@ 'header' => 'Custom Header HTML', 'footer' => 'Custom Footer HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Segurança', 'two-factor' => 'Utilizados sem factor de dupla autenticação', @@ -254,14 +283,14 @@ 'support' => 'Support Cachet', 'support_subtitle' => 'Check out our Patreon page!', 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'news_subtitle' => 'Get the latest update', ], // Welcome modal 'welcome' => [ 'welcome' => 'Bem vindo à sua página de estado!', 'message' => 'Sua página de status está quase pronta! Tavez vocë queira checar essas configurações extras', - 'close' => 'Take me straight to my dashboard', + 'close' => 'I\'m good thanks!', 'steps' => [ 'component' => 'Criar componentes', 'incident' => 'Criar incidentes', diff --git a/resources/lang/pt-PT/forms.php b/resources/lang/pt-PT/forms.php index cc77da2b87a3..c2ebe4556647 100644 --- a/resources/lang/pt-PT/forms.php +++ b/resources/lang/pt-PT/forms.php @@ -22,19 +22,26 @@ 'site_locale' => 'Selecione seu idioma', 'enable_google2fa' => 'Habilitar a autenticação de dois fatores do Google', 'cache_driver' => 'Driver de Cache', + 'queue_driver' => 'Queue Driver', 'session_driver' => 'Driver de Sessão', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', ], // Login form fields 'login' => [ 'login' => 'Nome de utilizador ou E-mail', - 'email' => 'Endereço de Correio', + 'email' => 'E-mail', 'password' => 'Senha', '2fauth' => 'Código de autenticação', 'invalid' => 'Nome de utilizador ou palavra-passe inválidos', 'invalid-token' => 'Token inválido', 'cookies' => 'Deverá activar cookies para efectuar autenticação.', 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', ], // Incidents form fields @@ -42,18 +49,36 @@ 'name' => 'Nome', 'status' => 'Estado', 'component' => 'Componente', + 'component_status' => 'Component Status', 'message' => 'Mensagem', 'message-help' => 'Você também pode usar o Markdown.', - 'scheduled_at' => 'Para quando pretende agendar a manutenção?', - 'incident_time' => 'Quando é que este incidente ocorreu?', + 'occurred_at' => 'When did this incident occur?', 'notify_subscribers' => 'Notificar subscritores?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', 'public' => 'Visível ao Publico', 'logged_in_only' => 'Apenas visível para users autenticados', 'templates' => [ 'name' => 'Nome', 'template' => 'Template', - 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', + 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nome', + 'status' => 'Estado', + 'message' => 'Mensagem', + 'message-help' => 'Você também pode usar o Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nome', + 'template' => 'Template', + 'twig' => 'Esboços de incidentes podem fazer uso da linguagem de template Twig.', ], ], @@ -69,28 +94,50 @@ 'enabled' => 'Componente activado?', 'groups' => [ - 'name' => 'Nome', - 'collapsing' => 'Choose visibility of the group', - 'visible' => 'Always expanded', - 'collapsed' => 'Collapse the group by default', - 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'name' => 'Nome', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nome', + 'description' => 'Descrição', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Grupo', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', ], ], // Metric form fields 'metrics' => [ - 'name' => 'Nome', - 'suffix' => 'Sufixo', - 'description' => 'Descrição', - 'description-help' => 'Poderá também usar Markdown.', - 'display-chart' => 'Mostrar gráfico na página de estado?', - 'default-value' => 'Valor Padrão', - 'calc_type' => 'Cálculo de Métricas', - 'type_sum' => 'Soma', - 'type_avg' => 'Média', - 'places' => 'Casas Decimais', - 'default_view' => 'Vista por defeito', - 'threshold' => 'How many minutes of threshold between metric points?', + 'name' => 'Nome', + 'suffix' => 'Sufixo', + 'description' => 'Descrição', + 'description-help' => 'Você também pode usar o Markdown.', + 'display-chart' => 'Mostrar gráfico na página de estado?', + 'default-value' => 'Valor Padrão', + 'calc_type' => 'Cálculo de Métricas', + 'type_sum' => 'Soma', + 'type_avg' => 'Média', + 'places' => 'Casas Decimais', + 'default_view' => 'Vista por defeito', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', 'points' => [ 'value' => 'Valor', @@ -99,22 +146,29 @@ // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => 'Nome do site', - 'site-url' => 'URL do site', - 'display-graphs' => 'Mostrar gráficos na página de estado?', - 'about-this-page' => 'Sobre esta página', - 'days-of-incidents' => 'Quantos dias de incidentes para mostrar?', - 'banner' => 'Banner Image', - 'banner-help' => 'É recomendável que você faça upload de arquivos menores que 930px .', - 'subscribers' => 'Permitir que as pessoas subscrevam as notificações?', - 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'site-name' => 'Nome do site', + 'site-url' => 'URL do site', + 'display-graphs' => 'Mostrar gráficos na página de estado?', + 'about-this-page' => 'Sobre esta página', + 'days-of-incidents' => 'Quantos dias de incidentes para mostrar?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Permitir que as pessoas subscrevam as notificações?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', ], 'analytics' => [ 'analytics_google' => 'Código do Google Analytics', 'analytics_gosquared' => 'Código do GoSquared Analytics', - 'analytics_piwik_url' => 'URL da instância do Piwik (sem http(s)://)', + 'analytics_piwik_url' => 'URL of your Piwik instance', 'analytics_piwik_siteid' => 'ID do site Piwik', ], 'localization' => [ @@ -124,19 +178,21 @@ 'incident-date-format' => 'Formato da Hora do Incidente', ], 'security' => [ - 'allowed-domains' => 'Domínios permitidos', - 'allowed-domains-help' => 'Separados por vírgula. O domínio definido acima é permitido automaticamente por padrão.', + 'allowed-domains' => 'Domínios permitidos', + 'allowed-domains-help' => 'Separados por vírgula. O domínio definido acima é permitido automaticamente por padrão.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', ], 'stylesheet' => [ 'custom-css' => 'Custom Stylesheet', ], 'theme' => [ - 'background-color' => 'Background Color', + 'background-color' => 'Background color', 'background-fills' => 'Preenchimento de Fundo (Componentes, Incidentes, Rodapé)', 'banner-background-color' => 'Cor de Fundo do banner', 'banner-padding' => 'Espaçamento do Banner', - 'fullwidth-banner' => 'Habilitar largura completa do banner?', - 'text-color' => 'Text Color', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', 'dashboard-login' => 'Mostrar botão para painel no rodapé?', 'reds' => 'Vermelho (Usado para erros)', 'blues' => 'Azul (usado para informações)', @@ -165,22 +221,32 @@ ], 'team' => [ 'description' => 'Convide membros da sua equipa através do endereço de e-mail aqui.', - 'email' => 'Email', + 'email' => 'Your Team Members Email Address', ], ], + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + // Buttons - 'add' => 'Adicionar', - 'save' => 'Salvar', - 'update' => 'Atualizar', - 'create' => 'Criar', - 'edit' => 'Editar', - 'delete' => 'Apagar', - 'submit' => 'Enviar', - 'cancel' => 'Cancelar', - 'remove' => 'Remover', - 'invite' => 'Convite', - 'signup' => 'Registrar', + 'add' => 'Adicionar', + 'save' => 'Salvar', + 'update' => 'Atualizar', + 'create' => 'Criar', + 'edit' => 'Editar', + 'delete' => 'Apagar', + 'submit' => 'Enviar', + 'cancel' => 'Cancelar', + 'remove' => 'Remover', + 'invite' => 'Convite', + 'signup' => 'Registrar', + 'manage_updates' => 'Manage Updates', // Other 'optional' => '* Opcional', diff --git a/resources/lang/pt-PT/notifications.php b/resources/lang/pt-PT/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/pt-PT/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/pt-PT/pagination.php b/resources/lang/pt-PT/pagination.php index 5599d696218b..0ee724cf086b 100644 --- a/resources/lang/pt-PT/pagination.php +++ b/resources/lang/pt-PT/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« Anterior', - 'next' => 'Próximo »', + 'previous' => 'Previous', + 'next' => 'Next', ]; diff --git a/resources/lang/pt-PT/validation.php b/resources/lang/pt-PT/validation.php index 9527edde261c..c6f650c7b985 100644 --- a/resources/lang/pt-PT/validation.php +++ b/resources/lang/pt-PT/validation.php @@ -31,60 +31,60 @@ 'array' => 'O campo :attribute deve ser um vetor.', 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', 'between' => [ - 'numeric' => 'O campo :attribute deverá conter uma data anterior a :date.', - 'file' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', 'array' => 'O campo :attribute deve ter entre :min e :max itens.', ], - 'boolean' => 'O campo :attribute deve ter entre :min e :max itens.', - 'confirmed' => 'The :attribute field must be true or false.', - 'date' => 'The :attribute confirmation does not match.', - 'date_format' => 'The :attribute is not a valid date.', - 'different' => 'The :attribute does not match the format :format.', - 'digits' => 'The :attribute and :other must be different.', - 'digits_between' => 'The :attribute must be :digits digits.', - 'email' => 'The :attribute must be between :min and :max digits.', - 'exists' => 'The :attribute must be a valid email address.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', 'distinct' => 'The :attribute field has a duplicate value.', - 'filled' => 'O formato de :attribute é inválido.', + 'filled' => 'The :attribute field is required.', 'image' => 'O :attribute deve ser uma imagem.', - 'in' => 'O :attribute deve ser uma imagem.', + 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The selected :attribute is invalid.', - 'ip' => 'The :attribute must be an integer.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', 'json' => 'O :attribute tem que ser uma string JSON válida.', 'max' => [ - 'numeric' => 'The :attribute must be a valid IP address.', - 'file' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max kilobytes.', + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', 'array' => 'A: atributo não pode ter mais de que :max itens.', ], - 'mimes' => 'A: atributo não pode ter mais de que :max itens.', + 'mimes' => 'The :attribute must be a file of type: :values.', 'min' => [ - 'numeric' => 'The :attribute must be a file of type: :values.', + 'numeric' => 'The :attribute must be at least :min.', 'file' => 'O :attribute deve ter pelo menos :min kilobytes.', - 'string' => 'O :attribute deve ter pelo menos :min kilobytes.', - 'array' => 'The :attribute must be at least :min characters.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', ], - 'not_in' => 'The :attribute must have at least :min items.', - 'numeric' => 'The selected :attribute is invalid.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute must be a number.', - 'required' => 'O formato de :attribute é inválido.', - 'required_if' => 'The :attribute field is required.', + 'regex' => 'O formato de :attribute é inválido.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => 'O campo :attribute é obrigatório a não ser que :other estiver em :values.', - 'required_with' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'O campo :attribute é obrigatório quando :values está presente.', 'required_with_all' => 'O campo :attribute é obrigatório quando :values está presente.', - 'required_without' => 'O campo :attribute é obrigatório quando :values está presente.', - 'required_without_all' => 'The :attribute field is required when :values is not present.', - 'same' => 'The :attribute field is required when none of :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', 'size' => [ - 'numeric' => 'The :attribute and :other must match.', + 'numeric' => 'The :attribute must be :size.', 'file' => 'O :attribute deve ter :size kilobytes.', 'string' => 'O :attribute deve ter :size caracteres.', - 'array' => 'O :attribute deve ter :size caracteres.', + 'array' => 'The :attribute must contain :size items.', ], - 'string' => 'The :attribute must contain :size items.', + 'string' => 'The :attribute must be a string.', 'timezone' => 'O :attribute deve ser uma zona válida.', 'unique' => 'O :attribute já existe.', 'url' => 'O formato de :attribute é inválido.', diff --git a/resources/lang/ro-RO/cachet.php b/resources/lang/ro-RO/cachet.php new file mode 100644 index 000000000000..52c20a098607 --- /dev/null +++ b/resources/lang/ro-RO/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Ultima actualizare :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operaţional', + 2 => 'Probleme de performanţă', + 3 => 'Ȋntrerupere parțială', + 4 => 'Ȋntrerupere gravă', + ], + 'group' => [ + 'other' => 'Alte Componente', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Nici un incident raportat', + 'past' => 'Incidente anterioare', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', programată: timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Sub investigație', + 2 => 'Identificat', + 3 => 'Sub observație', + 4 => 'Remediat', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerează cheia API', + 'revoke' => 'Revocă cheia API', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Ultima Oră', + 'hourly' => 'Ultimele 12 ore', + 'weekly' => 'Săptămână', + 'monthly' => 'Lună', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Abonează-te', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notificări', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Acum eşti abonat la toate actualizările.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Acum eşti abonat la următoarele actualizări.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Abonează-te la actualizări prin email.', + 'subscribed' => 'Te-ai abonat la actualizări prin email, te rugăm să îți verifici adresa email și să confirmi abonarea.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Abonarea prin email a fost confirmată. Mulțumim!', + 'manage' => 'Gestionează-ţi abonările', + 'unsubscribe' => 'Dezabonare de la actualizări prin email.', + 'unsubscribed' => 'Actualizările prin email au fost anulate.', + 'failure' => 'Ceva nu a funcționat în legătură cu abonarea.', + 'already-subscribed' => 'Adresa :email nu poate fi folosită deoarece este deja abonată.', + ], + ], + + 'signup' => [ + 'title' => 'Înregistrează-te', + 'username' => 'Utilizator', + 'email' => 'Email', + 'password' => 'Parolă', + 'success' => 'Contul tău a fost creat.', + 'failure' => 'Ceva a mers greșit cu procesul de înregistrare.', + ], + + 'system' => [ + 'update' => 'O nouă versiune a Cachet este disponibilă. Află cum să o actualizezi aici!', + ], + + // Modal + 'modal' => [ + 'close' => 'Închide', + 'subscribe' => [ + 'title' => 'Abonează-te la actualizările componentei', + 'body' => 'Introdu adresa ta de email pentru a te abona la actualizări pentru această componentă. Dacă ești deja abonat, vei primi deja emailuri pentru această componentă.', + 'button' => 'Abonează-te', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Fii la curent cu cele mai recente actualizări ale serviciilor pentru :app.', + ], + ], + + // Other + 'home' => 'Acasă', + 'powered_by' => 'Cu sprijinul Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Despre acest Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Feed Stare', + +]; diff --git a/resources/lang/ro-RO/dashboard.php b/resources/lang/ro-RO/dashboard.php new file mode 100644 index 000000000000..d5506b975044 --- /dev/null +++ b/resources/lang/ro-RO/dashboard.php @@ -0,0 +1,304 @@ + 'Panou de control', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidente', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Crează şablon', + 'incident-templates' => 'Şabloane incident', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Raportează un incident', + 'success' => 'Incidentul a fost adăugat.', + 'failure' => 'A avut loc o eroare la adăugarea incidentului, vă rugăm să încercaţi din nou.', + ], + 'edit' => [ + 'title' => 'Editează un incident', + 'success' => 'Incidentul a fost actualizat.', + 'failure' => 'A avut loc o eroare la actualizarea incidentului, vă rugăm să încercaţi din nou.', + ], + 'delete' => [ + 'success' => 'Incidentul a fost şters şi nu va mai apărea pe pagina de status.', + 'failure' => 'Incidentul nu a putut fi şters, vă rugăm încercaţi din nou.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Şabloane incident', + 'add' => [ + 'title' => 'Adaugă un nou şablon pentru incident', + 'message' => 'Create your first incident template.', + 'success' => 'Noul şablon pentru incident a fost creat.', + 'failure' => 'Ceva nu a funcționat legat de șablonul incidentului.', + ], + 'edit' => [ + 'title' => 'Editare Şablon', + 'success' => 'Şablonul incidentului a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de actualizarea șablonului incidentului', + ], + 'delete' => [ + 'success' => 'Şablonul incidentului a fost şters.', + 'failure' => 'Şablonul incidentului nu a putut fi şters, vă rugăm încercaţi din nou.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Programat la :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Componente', + 'component_statuses' => 'Stările Componentei', + 'listed_group' => 'Grupat ca :name', + 'add' => [ + 'title' => 'Adăugați o componentă', + 'message' => 'Ar trebui să adăugați o componentă.', + 'success' => 'Componenta a fost creată.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', + ], + 'edit' => [ + 'title' => 'Modificați o componentă', + 'success' => 'Componenta a fost actualizată.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', + ], + 'delete' => [ + 'success' => 'Componenta a fost ștearsă!', + 'failure' => 'Component nu a putut fi ștearsă, vă rugăm încercați din nou.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Group de componente|Grupuri de componente', + 'no_components' => 'Ar trebui să adăugați un grup de componente.', + 'add' => [ + 'title' => 'Adăugați un grup de componente', + 'success' => 'Grupul de componente a fost adăugat.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', + ], + 'edit' => [ + 'title' => 'Modificați un grup de componente', + 'success' => 'Grupul de componente a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', + ], + 'delete' => [ + 'success' => 'Grupul de componente a fost șters!', + 'failure' => 'Grupul de componente nu a putut fi șters, vă rugăm încercați din nou.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Măsurători', + 'add' => [ + 'title' => 'Adaugă o măsurătoare', + 'message' => 'Ar trebui să adaugi o măsurătoare.', + 'success' => 'Măsurătoarea a fost creată.', + 'failure' => 'Ceva nu a funcționat legat de măsurătoare, vă rugăm încercați din nou.', + ], + 'edit' => [ + 'title' => 'Modificați o măsurătoare', + 'success' => 'Măsurătoarea a fost actualizată.', + 'failure' => 'Ceva nu a funcționat legat de măsurătoare, vă rugăm încercați din nou.', + ], + 'delete' => [ + 'success' => 'Măsurătoarea a fost ștearsă și nu va mai apărea pe pagina dvs. de stare.', + 'failure' => 'Măsurătoarea nu a putut fi ștearsă, vă rugăm încercați din nou.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Abonați', + 'description' => 'Abonații vor primi actualizări prin email când incidente noi sunt adăugate sau componentele sunt actualizate.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verificat', + 'not_verified' => 'Neverificat', + 'subscriber' => ':email, abonat la :date', + 'no_subscriptions' => 'Ați fost abonat la toate actualizările', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Adaugă un nou abonat', + 'success' => 'Abonatul a fost adăugat!', + 'failure' => 'Ceva nu a funcționat legat de adăugarea abonatului, vă rugăm încercați din nou.', + 'help' => 'Introduceți fiecare abonat pe o nouă linie.', + ], + 'edit' => [ + 'title' => 'Actualizează abonatul', + 'success' => 'Abonatul a fost actualizat!', + 'failure' => 'Ceva nu a funcționat legat de modificarea abonatului, vă rugăm încercați din nou.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Echipa', + 'member' => 'Membru', + 'profile' => 'Profil', + 'description' => 'Membrii echipei vor avea posibilitatea să adauge, modifice & actualiza componentele și incidentele.', + 'add' => [ + 'title' => 'Adaugă un nou membru la echipă', + 'success' => 'Un nou membru a fost adăugat la echipă.', + 'failure' => 'Un nou membru nu a putut fi adăugat la echipă, vă rugăm încercați din nou.', + ], + 'edit' => [ + 'title' => 'Actualizați profilul', + 'success' => 'Profilul a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de actualizarea profilului, vă rugăm încercați din nou.', + ], + 'delete' => [ + 'success' => 'Membrul echipei a fost șters și nu va mai avea acces la panoul de control!', + 'failure' => 'Un nou membru nu a putut fi adăugat la echipă, vă rugăm încercați din nou.', + ], + 'invite' => [ + 'title' => 'Invită un nou membru în echipă', + 'success' => 'Invitația a fost trimisă', + 'failure' => 'Invitația nu a putut fi trimisă, vă rugăm încercați din nou.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Setări', + 'app-setup' => [ + 'app-setup' => 'Instalarea Aplicației', + 'images-only' => 'Puteți urca doar imagini.', + 'too-big' => 'Fișierul urcat este prea mare. Urcați o imagine mai mică de :size', + ], + 'analytics' => [ + 'analytics' => 'Analize', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localizare', + ], + 'customization' => [ + 'customization' => 'Personalizare', + 'header' => 'Header HTML Personalizat', + 'footer' => 'Footer HTML Personalizat', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Securitate', + 'two-factor' => 'Utilizatori care nu folosesc autentificare two-factor', + ], + 'stylesheet' => [ + 'stylesheet' => 'Listă de stiluri', + ], + 'theme' => [ + 'theme' => 'Tema', + ], + 'edit' => [ + 'success' => 'Setările au fost salvate.', + 'failure' => 'Setările nu au putut fi salvate.', + ], + 'credits' => [ + 'credits' => 'Autori', + 'contributors' => 'Contribuitori', + 'license' => 'Cachet este un proiect open source cu licență BSD-3, realizat de Alt Three Services Limited.', + 'backers-title' => 'Susținători & Sponsori', + 'backers' => 'Dacă vreți să susțineți dezvoltarea proiectului, vizitați pagina de campanie Cachet Patreon.', + 'thank-you' => 'Mulțumim tuturor celor :count contribuitori.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Autentificare', + 'logged_in' => 'Ești autentificat.', + 'welcome' => 'Bine ai revenit!', + 'two-factor' => 'Te rog introdu token-ul tău.', + ], + + // Sidebar footer + 'help' => 'Ajutor', + 'status_page' => 'Pagina de Stare', + 'logout' => 'Deconectează-te', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notificări', + 'awesome' => 'Minunat.', + 'whoops' => 'Hopa.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Susțineți Cachet', + 'support_subtitle' => 'Vizitați pagina noastră pe Patreon!', + 'news' => 'Ultimele Știri', + 'news_subtitle' => 'Obţineţi cea mai recentă actualizare', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Bun venit pe noua pagină de Stare!', + 'message' => 'Pagina de stare este aproape gata! S-ar putea să doriți să configurați aceste setări suplimentare', + 'close' => 'Du-mă direct la panoul de control', + 'steps' => [ + 'component' => 'Creează componente', + 'incident' => 'Creează incidente', + 'customize' => 'Personalizează', + 'team' => 'Adaugă utilizatori', + 'api' => 'Generează un token pentru API', + 'two-factor' => 'Autentificare Two Factor', + ], + ], + +]; diff --git a/resources/lang/ro-RO/forms.php b/resources/lang/ro-RO/forms.php new file mode 100644 index 000000000000..5f167eee6bac --- /dev/null +++ b/resources/lang/ro-RO/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Utilizator', + 'password' => 'Parolă', + 'site_name' => 'Numele site-ului', + 'site_domain' => 'Domeniu Site', + 'site_timezone' => 'Selectaţi fusul orar', + 'site_locale' => 'Selectaţi limba dumneavoastră', + 'enable_google2fa' => 'Activaţi Google Two Factor Authentication', + 'cache_driver' => 'Driver Cache', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Driver Sesiune', + 'mail_driver' => 'Driver Mail', + 'mail_host' => 'Gazdă Mail', + 'mail_address' => 'Adresa Email Expeditor', + 'mail_username' => 'Utilizator Mail', + 'mail_password' => 'Parolă Mail', + ], + + // Login form fields + 'login' => [ + 'login' => 'Utilizator sau Email', + 'email' => 'Email', + 'password' => 'Parolă', + '2fauth' => 'Cod de Autentificare', + 'invalid' => 'Utilizator sau parolă incorecte', + 'invalid-token' => 'Token incorect', + 'cookies' => 'Trebuie să activaţi cookies pentru a vă putea autentifica.', + 'rate-limit' => 'Limita de folosire a fost depăşită.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Nume', + 'status' => 'Stare', + 'component' => 'Componentă', + 'component_status' => 'Component Status', + 'message' => 'Mesaj', + 'message-help' => 'Puteţi utiliza şi Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notificaţi abonaţii?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Vizibilitatea Incidentului', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Vizibilă public', + 'logged_in_only' => 'Vizibilă numai pentru utilizatorii autentificaţi', + 'templates' => [ + 'name' => 'Nume', + 'template' => 'Șablon', + 'twig' => 'Şabloanele pentru incidente pot folosi limbajul Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Nume', + 'status' => 'Stare', + 'message' => 'Mesaj', + 'message-help' => 'Puteţi utiliza şi Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Nume', + 'template' => 'Șablon', + 'twig' => 'Şabloanele pentru incidente pot folosi limbajul Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Nume', + 'status' => 'Stare', + 'group' => 'Grup', + 'description' => 'Descriere', + 'link' => 'Legătură', + 'tags' => 'Etichete', + 'tags-help' => 'Separate prin virgulă.', + 'enabled' => 'Componentă activată?', + + 'groups' => [ + 'name' => 'Nume', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Întotdeauna extins', + 'collapsed' => 'Restrânge grupul implicit', + 'collapsed_incident' => 'Restrânge grupul, dar extinde în cazul în care sunt probleme', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Nume', + 'description' => 'Descriere', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Grup', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Nume', + 'suffix' => 'Sufix', + 'description' => 'Descriere', + 'description-help' => 'Puteţi utiliza şi Markdown.', + 'display-chart' => 'Afişaţi graficul pe pagina de stare?', + 'default-value' => 'Valoare implicită', + 'calc_type' => 'Calculul măsurătorilor', + 'type_sum' => 'Sumă', + 'type_avg' => 'Medie', + 'places' => 'Zecimale', + 'default_view' => 'Opţiunea implicită', + 'threshold' => 'Ce interval de timp(în minute) doriţi între măsurători?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Valoarea', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Numele site-ului', + 'site-url' => 'URL-ul site-ului', + 'display-graphs' => 'Afişaţi grafice pe pagina stare?', + 'about-this-page' => 'Despre această pagină', + 'days-of-incidents' => 'Câte zile de incidente vreţi să fie afişate?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Imagine Banner', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Permiteţi vizitatorilor să se aboneze la notificări prin email?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Schimbaţi automat limba pentru pagina de stare în funcţie de limba vizitatorului?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Cod Google Analytics', + 'analytics_gosquared' => 'Cod GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Id site Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Fusul orar al site-ului', + 'site-locale' => 'Limba site-ului', + 'date-format' => 'Formatul datei', + 'incident-date-format' => 'Formatul de timp al incidentului', + ], + 'security' => [ + 'allowed-domains' => 'Domenii permise', + 'allowed-domains-help' => 'Separate prin virgulă. Domeniul configurat mai sus este automat permis implicit.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Personalizează Stilurile', + ], + 'theme' => [ + 'background-color' => 'Culoarea de fundal', + 'background-fills' => 'Gradient Fundal (componente, incidente, subsol)', + 'banner-background-color' => 'Culoarea de fundal pentru banner', + 'banner-padding' => 'Spaţiere banner', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Culoare Text', + 'dashboard-login' => 'Arătaţi butonul Dashboard în subsol?', + 'reds' => 'Roşu (utilizat pentru mesaje de eroare)', + 'blues' => 'Albastru (utilizat pentru mesaje de informare)', + 'greens' => 'Verde (folosit pentru mesaje de succes)', + 'yellows' => 'Galben (folosit pentru alerte)', + 'oranges' => 'Orange (folosit pentru mesaje de notificare)', + 'metrics' => 'Măsurători de umplere', + 'links' => 'Legături', + ], + ], + + 'user' => [ + 'username' => 'Utilizator', + 'email' => 'Email', + 'password' => 'Parolă', + 'api-token' => 'Token API', + 'api-token-help' => 'Regenerarea token-ului API va împiedica aplicaţiile existente să acceseze Cachet.', + 'gravatar' => 'Schimbaţi poza de profil pe Gravatar.', + 'user_level' => 'Nivel utilizator', + 'levels' => [ + 'admin' => 'Administator', + 'user' => 'Utilizator', + ], + '2fa' => [ + 'help' => 'Activând autentificarea two factor securitatea contului dvs. este mult îmbunătăţită. Trebuie să descărcaţi Google Authenticator sau o aplicaţie similară pe telefonul dvs. Când vă autentificaţi, vi se va cere token-ul generat de aplicaţie.', + ], + 'team' => [ + 'description' => 'Invităţi membrii echipei introducând aici adresele lor de email.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Adaugă', + 'save' => 'Salvează', + 'update' => 'Actualizează', + 'create' => 'Creează', + 'edit' => 'Modifică', + 'delete' => 'Şterge', + 'submit' => 'Trimite', + 'cancel' => 'Renunță', + 'remove' => 'Elimină', + 'invite' => 'Invită', + 'signup' => 'Înregistrează-te', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Opţional', +]; diff --git a/resources/lang/ro-RO/notifications.php b/resources/lang/ro-RO/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/ro-RO/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ro-RO/pagination.php b/resources/lang/ro-RO/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/ro-RO/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/ro-RO/setup.php b/resources/lang/ro-RO/setup.php new file mode 100644 index 000000000000..73337a743268 --- /dev/null +++ b/resources/lang/ro-RO/setup.php @@ -0,0 +1,23 @@ + 'Instalare', + 'title' => 'Instalare Cachet', + 'service_details' => 'Detalii Serviciu', + 'env_setup' => 'Instalare Mediu', + 'status_page_setup' => 'Instalare Pagină de Status', + 'show_support' => 'Vrei să contribui la proiectul Cachet?', + 'admin_account' => 'Cont Administrator', + 'complete_setup' => 'Completaţi Instalarea', + 'completed' => 'Cachet a fost configurat cu succes!', + 'finish_setup' => 'Mergi la panoul de comenzi', +]; diff --git a/resources/lang/ro-RO/validation.php b/resources/lang/ro-RO/validation.php new file mode 100644 index 000000000000..d5082e01b06e --- /dev/null +++ b/resources/lang/ro-RO/validation.php @@ -0,0 +1,122 @@ + ':attribute trebuie să fie acceptat.', + 'active_url' => ':attribute nu este un URL valid.', + 'after' => ':attribute trebuie să fie o dată după :date.', + 'alpha' => ':attribute poate să conțină numai litere.', + 'alpha_dash' => ':attribute poate să conțină numai litere, cifre şi semne de punctuație.', + 'alpha_num' => ':attribute poate să conțină numai litere şi cifre.', + 'array' => ':attribute trebuie să fie o matrice.', + 'before' => ':attribute trebuie să fie o dată înainte de :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attribute trebuie să aibă între :min şi :max elemente.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => ':attribute are o valoare duplicată.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute trebuie să fie o imagine.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'Câmpul :attribute nu există în :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute trebuie să fie un şir JSON valid.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute nu poate avea mai mult de :max elemente.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute trebuie să aibă cel puţin :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'Câmpul :attribute trebuie să fie prezent.', + 'regex' => 'Formatul :attribute nu este valid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'Câmpul :attribute este necesar dacă :other nu există în :values.', + 'required_with' => 'Câmpul :attribute este obligatoriu atunci când :values este prezent.', + 'required_with_all' => 'Câmpul :attribute este obligatoriu atunci când :values este prezent.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute trebuie să aibă :size kilobytes.', + 'string' => ':attribute trebuie să aibă :size caractere.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute trebuie să fie o zonă validă.', + 'unique' => ':attribute este deja folosit.', + 'url' => 'Formatul :attribute nu este valid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'mesaj-personalizat', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ro/dashboard.php b/resources/lang/ro/dashboard.php index 16e33d775126..59e4e59100b1 100644 --- a/resources/lang/ro/dashboard.php +++ b/resources/lang/ro/dashboard.php @@ -11,47 +11,53 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Panou de control', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ 'title' => 'Incidents & Schedule', - 'incidents' => 'Incidents', - 'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported :count incidents.', - 'incident-create-template' => 'Create Template', - 'incident-templates' => 'Incident Templates', + 'incidents' => 'Incidente', + 'logged' => '{0} Nu sunt incidente, bravo! | Ai adăugat un incident. | Ai raportat :count incidente.', + 'incident-create-template' => 'Crează şablon', + 'incident-templates' => 'Şabloane incident', + 'updates' => '{0} Nicio actualizare|O actualizare|:count Actualizări', 'add' => [ - 'title' => 'Report an incident', - 'success' => 'Incident added.', - 'failure' => 'There was an error adding the incident, please try again.', + 'title' => 'Raportează un incident', + 'success' => 'Incidentul a fost adăugat.', + 'failure' => 'A avut loc o eroare la adăugarea incidentului, vă rugăm să încercaţi din nou.', ], 'edit' => [ - 'title' => 'Edit an incident', - 'success' => 'Incident updated.', - 'failure' => 'There was an error editing the incident, please try again.', + 'title' => 'Editează un incident', + 'success' => 'Incidentul a fost actualizat.', + 'failure' => 'A avut loc o eroare la actualizarea incidentului, vă rugăm să încercaţi din nou.', ], 'delete' => [ - 'success' => 'The incident has been deleted and will not show on your status page.', - 'failure' => 'The incident could not be deleted, please try again.', + 'success' => 'Incidentul a fost şters şi nu va mai apărea pe pagina de status.', + 'failure' => 'Incidentul nu a putut fi şters, vă rugăm încercaţi din nou.', + ], + 'update' => [ + 'title' => 'Adaugă o nouă actualizare a incidentului', + 'subtitle' => 'Adaugă o actualizare la :incident', ], // Incident templates 'templates' => [ - 'title' => 'Incident Templates', + 'title' => 'Şabloane incident', 'add' => [ - 'title' => 'Create an incident template', - 'message' => 'You should add an incident template.', - 'success' => 'Your new incident template has been created.', - 'failure' => 'Something went wrong with the incident template.', + 'title' => 'Adaugă un nou şablon pentru incident', + 'message' => 'Trebuie să adaugi un şablon pentru incident.', + 'success' => 'Noul şablon pentru incident a fost creat.', + 'failure' => 'Ceva nu a funcționat legat de șablonul incidentului.', ], 'edit' => [ - 'title' => 'Edit Template', - 'success' => 'The incident template has been updated.', - 'failure' => 'Something went wrong updating the incident template', + 'title' => 'Editare Şablon', + 'success' => 'Şablonul incidentului a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de actualizarea șablonului incidentului', ], 'delete' => [ - 'success' => 'The incident template has been deleted.', - 'failure' => 'The incident template could not be deleted, please try again.', + 'success' => 'Şablonul incidentului a fost şters.', + 'failure' => 'Şablonul incidentului nu a putut fi şters, vă rugăm încercaţi din nou.', ], ], ], @@ -59,216 +65,227 @@ // Incident Maintenance 'schedule' => [ 'schedule' => 'Întreținere programată', - 'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported :count schedules.', - 'scheduled_at' => 'Scheduled at :timestamp', + 'logged' => '{0} Nu există programări, bravo.|Ai o singură programare.|Ai :count programări.', + 'scheduled_at' => 'Programat la :timestamp', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Adăugaţi Programare Mentenanţă', + 'success' => 'Programare adăugată.', + 'failure' => 'Ceva nu a funcționat legat de adăugarea unei programări, vă rugăm încercați din nou.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Modificați Programarea Mentenanței', + 'success' => 'Programarea a fost actualizată!', + 'failure' => 'Ceva nu a funcționat legat de modificarea programării, vă rugăm încercați din nou.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'Programarea mentenanței a fost ștearsă și nu va mai apărea pe pagina dvs. de stare.', + 'failure' => 'Programarea mentenanței nu a putut fi ștearsă, vă rugăm încercați din nou.', ], ], // Components 'components' => [ - 'components' => 'Components', - 'component_statuses' => 'Component Statuses', - 'listed_group' => 'Grouped under :name', + 'components' => 'Componente', + 'component_statuses' => 'Stările Componentei', + 'listed_group' => 'Grupat ca :name', 'add' => [ - 'title' => 'Add a component', - 'message' => 'You should add a component.', - 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'title' => 'Adăugați o componentă', + 'message' => 'Ar trebui să adăugați o componentă.', + 'success' => 'Componenta a fost creată.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', ], 'edit' => [ - 'title' => 'Edit a component', - 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'title' => 'Modificați o componentă', + 'success' => 'Componenta a fost actualizată.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', ], 'delete' => [ - 'success' => 'The component has been deleted!', - 'failure' => 'The component could not be deleted, please try again.', + 'success' => 'Componenta a fost ștearsă!', + 'failure' => 'Component nu a putut fi ștearsă, vă rugăm încercați din nou.', ], // Component groups 'groups' => [ - 'groups' => 'Component group|Component groups', - 'no_components' => 'You should add a component group.', + 'groups' => 'Group de componente|Grupuri de componente', + 'no_components' => 'Ar trebui să adăugați un grup de componente.', 'add' => [ - 'title' => 'Add a component group', - 'success' => 'Component group added.', - 'failure' => 'Something went wrong with the component group, please try again.', + 'title' => 'Adăugați un grup de componente', + 'success' => 'Grupul de componente a fost adăugat.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', ], 'edit' => [ - 'title' => 'Edit a component group', - 'success' => 'Component group updated.', - 'failure' => 'Something went wrong with the component group, please try again.', + 'title' => 'Modificați un grup de componente', + 'success' => 'Grupul de componente a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de grupul de componente, vă rugăm încercați din nou.', ], 'delete' => [ - 'success' => 'Component group has been deleted!', - 'failure' => 'The component group could not be deleted, please try again.', + 'success' => 'Grupul de componente a fost șters!', + 'failure' => 'Grupul de componente nu a putut fi șters, vă rugăm încercați din nou.', ], ], ], // Metrics 'metrics' => [ - 'metrics' => 'Metrics', + 'metrics' => 'Măsurători', 'add' => [ - 'title' => 'Create a metric', - 'message' => 'You should add a metric.', - 'success' => 'Metric created.', - 'failure' => 'Something went wrong with the metric, please try again.', + 'title' => 'Adaugă o măsurătoare', + 'message' => 'Ar trebui să adaugi o măsurătoare.', + 'success' => 'Măsurătoarea a fost creată.', + 'failure' => 'Ceva nu a funcționat legat de măsurătoare, vă rugăm încercați din nou.', ], 'edit' => [ - 'title' => 'Edit a metric', - 'success' => 'Metric updated.', - 'failure' => 'Something went wrong with the metric, please try again.', + 'title' => 'Modificați o măsurătoare', + 'success' => 'Măsurătoarea a fost actualizată.', + 'failure' => 'Ceva nu a funcționat legat de măsurătoare, vă rugăm încercați din nou.', ], 'delete' => [ - 'success' => 'The metric has been deleted and will no longer display on your status page.', - 'failure' => 'The metric could not be deleted, please try again.', + 'success' => 'Măsurătoarea a fost ștearsă și nu va mai apărea pe pagina dvs. de stare.', + 'failure' => 'Măsurătoarea nu a putut fi ștearsă, vă rugăm încercați din nou.', ], ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Subscribers', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => 'Verified', - 'not_verified' => 'Not verified', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', + 'subscribers' => 'Abonați', + 'description' => 'Abonații vor primi actualizări prin email când incidente noi sunt adăugate sau componentele sunt actualizate.', + 'verified' => 'Verificat', + 'not_verified' => 'Neverificat', + 'subscriber' => ':email, abonat la :date', + 'no_subscriptions' => 'Ați fost abonat la toate actualizările', 'add' => [ - 'title' => 'Add a new subscriber', - 'success' => 'Subscriber has been added!', - 'failure' => 'Something went wrong adding the subscriber, please try again.', - 'help' => 'Enter each subscriber on a new line.', + 'title' => 'Adaugă un nou abonat', + 'success' => 'Abonatul a fost adăugat!', + 'failure' => 'Ceva nu a funcționat legat de adăugarea abonatului, vă rugăm încercați din nou.', + 'help' => 'Introduceți fiecare abonat pe o nouă linie.', ], 'edit' => [ - 'title' => 'Update subscriber', - 'success' => 'Subscriber has been updated!', - 'failure' => 'Something went wrong editing the subscriber, please try again.', + 'title' => 'Actualizează abonatul', + 'success' => 'Abonatul a fost actualizat!', + 'failure' => 'Ceva nu a funcționat legat de modificarea abonatului, vă rugăm încercați din nou.', ], ], // Team 'team' => [ - 'team' => 'Team', - 'member' => 'Member', - 'profile' => 'Profile', + 'team' => 'Echipa', + 'member' => 'Membru', + 'profile' => 'Profil', 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ - 'title' => 'Add a new team member', - 'success' => 'Team member added.', - 'failure' => 'The team member could not be added, please try again.', + 'title' => 'Adaugă un nou membru la echipă', + 'success' => 'Un nou membru a fost adăugat la echipă.', + 'failure' => 'Un nou membru nu a putut fi adăugat la echipă, vă rugăm încercați din nou.', ], 'edit' => [ - 'title' => 'Update profile', - 'success' => 'Profile updated.', - 'failure' => 'Something went wrong updating the profile, please try again.', + 'title' => 'Actualizați profilul', + 'success' => 'Profilul a fost actualizat.', + 'failure' => 'Ceva nu a funcționat legat de actualizarea profilului, vă rugăm încercați din nou.', ], 'delete' => [ - 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', - 'failure' => 'The team member could not be added, please try again.', + 'success' => 'Membrul echipei a fost șters și nu va mai avea acces la panoul de control!', + 'failure' => 'Un nou membru nu a putut fi adăugat la echipă, vă rugăm încercați din nou.', ], 'invite' => [ - 'title' => 'Invite a new team member', - 'success' => 'An invite has been sent', - 'failure' => 'The invite could not be sent, please try again.', + 'title' => 'Invită un nou membru în echipă', + 'success' => 'Invitația a fost trimisă', + 'failure' => 'Invitația nu a putut fi trimisă, vă rugăm încercați din nou.', ], ], // Settings 'settings' => [ - 'settings' => 'Settings', + 'settings' => 'Setări', 'app-setup' => [ - 'app-setup' => 'Application Setup', - 'images-only' => 'Only images may be uploaded.', - 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + 'app-setup' => 'Instalarea Aplicației', + 'images-only' => 'Puteți urca doar imagini.', + 'too-big' => 'Fișierul urcat este prea mare. Urcați o imagine mai mică de :size', ], 'analytics' => [ - 'analytics' => 'Analytics', + 'analytics' => 'Analize', + ], + 'log' => [ + 'log' => 'Jurnal', ], 'localization' => [ - 'localization' => 'Localization', + 'localization' => 'Localizare', ], 'customization' => [ - 'customization' => 'Customization', - 'header' => 'Custom Header HTML', - 'footer' => 'Custom Footer HTML', + 'customization' => 'Personalizare', + 'header' => 'Header HTML Personalizat', + 'footer' => 'Footer HTML Personalizat', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], ], 'security' => [ - 'security' => 'Security', - 'two-factor' => 'Users without two-factor authentication', + 'security' => 'Securitate', + 'two-factor' => 'Utilizatori care nu folosesc autentificare two-factor', ], 'stylesheet' => [ - 'stylesheet' => 'Stylesheet', + 'stylesheet' => 'Listă de stiluri', ], 'theme' => [ - 'theme' => 'Theme', + 'theme' => 'Tema', ], 'edit' => [ - 'success' => 'Settings saved.', - 'failure' => 'Settings could not be saved.', + 'success' => 'Setările au fost salvate.', + 'failure' => 'Setările nu au putut fi salvate.', ], 'credits' => [ - 'credits' => 'Credits', - 'contributors' => 'Contributors', - 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', - 'backers-title' => 'Backers & Sponsors', - 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', - 'thank-you' => 'Thank you to each and every one of the :count contributors.', + 'credits' => 'Autori', + 'contributors' => 'Contribuitori', + 'license' => 'Cachet este un proiect open source cu licență BSD-3, realizat de Alt Three Services Limited.', + 'backers-title' => 'Susținători & Sponsori', + 'backers' => 'Dacă vreți să susțineți dezvoltarea proiectului, vizitați pagina de campanie Cachet Patreon.', + 'thank-you' => 'Mulțumim tuturor celor :count contribuitori.', ], ], // Login 'login' => [ - 'login' => 'Login', - 'logged_in' => 'You\'re logged in.', - 'welcome' => 'Welcome Back!', - 'two-factor' => 'Please enter your token.', + 'login' => 'Autentificare', + 'logged_in' => 'Ești autentificat.', + 'welcome' => 'Bine ai revenit!', + 'two-factor' => 'Te rog introdu token-ul tău.', ], // Sidebar footer - 'help' => 'Help', - 'status_page' => 'Status Page', - 'logout' => 'Logout', + 'help' => 'Ajutor', + 'status_page' => 'Pagina de Stare', + 'logout' => 'Deconectează-te', // Notifications 'notifications' => [ - 'notifications' => 'Notifications', - 'awesome' => 'Awesome.', - 'whoops' => 'Whoops.', + 'notifications' => 'Notificări', + 'awesome' => 'Minunat.', + 'whoops' => 'Hopa.', ], // Widgets 'widgets' => [ - 'support' => 'Support Cachet', - 'support_subtitle' => 'Check out our Patreon page!', - 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'support' => 'Susțineți Cachet', + 'support_subtitle' => 'Vizitați pagina noastră pe Patreon!', + 'news' => 'Ultimele Știri', + 'news_subtitle' => 'Obţineţi cea mai recentă actualizare', ], // Welcome modal 'welcome' => [ - 'welcome' => 'Welcome to your new status page!', - 'message' => 'Your status page is almost ready! You might want to configure these extra settings', - 'close' => 'Take me straight to my dashboard', + 'welcome' => 'Bun venit pe noua pagină de Stare!', + 'message' => 'Pagina de stare este aproape gata! S-ar putea să doriți să configurați aceste setări suplimentare', + 'close' => 'Du-mă direct la panoul de control', 'steps' => [ - 'component' => 'Create components', - 'incident' => 'Create incidents', - 'customize' => 'Customize', - 'team' => 'Add users', - 'api' => 'Generate API token', - 'two-factor' => 'Two Factor Authentication', + 'component' => 'Creează componente', + 'incident' => 'Creează incidente', + 'customize' => 'Personalizează', + 'team' => 'Adaugă utilizatori', + 'api' => 'Generează un token pentru API', + 'two-factor' => 'Autentificare Two Factor', ], ], diff --git a/resources/lang/ro/forms.php b/resources/lang/ro/forms.php index e37dce2dd6b2..360ec491d852 100644 --- a/resources/lang/ro/forms.php +++ b/resources/lang/ro/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/ru-RU/cachet.php b/resources/lang/ru-RU/cachet.php new file mode 100644 index 000000000000..08dcc52186b2 --- /dev/null +++ b/resources/lang/ru-RU/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Последнее обновление :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Работает', + 2 => 'Падение производительности', + 3 => 'Перебои в работе', + 4 => 'Значительные неполадки', + ], + 'group' => [ + 'other' => 'Другие компоненты', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'Без происшествий', + 'past' => 'Последние инциденты', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', запланированы :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Проводим анализ проблемы', + 2 => 'Причина определена', + 3 => 'Под наблюдением', + 4 => 'Исправлено', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Сгенерировать ключ API заново', + 'revoke' => 'Отозвать ключ API', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Последний час', + 'hourly' => 'Последние 12 часов', + 'weekly' => 'Неделя', + 'monthly' => 'Месяц', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Подписаться', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Уведомления', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Вы подписаны на все изменения.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Вы подписаны на следующие изменения.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Подписка на рассылку об изменениях.', + 'subscribed' => 'Вы подписались на рассылку email уведомлений. Проверьте вашу почту, чтобы подтвердить подписку.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Ваша подписка подтверждена. Спасибо!', + 'manage' => 'Управление подпиской', + 'unsubscribe' => 'Отписаться от рассылки.', + 'unsubscribed' => 'Ваша подписка отменена.', + 'failure' => 'Произошла ошибка при подписке на рассылку.', + 'already-subscribed' => 'Невозможно оформить подписку на :email, т.к. на него уже оформлена подписка.', + ], + ], + + 'signup' => [ + 'title' => 'Зарегистрироваться', + 'username' => 'Имя пользователя', + 'email' => 'Email', + 'password' => 'Пароль', + 'success' => 'Ваша учетная запись создана.', + 'failure' => 'Что-то пошло не так при регистрации.', + ], + + 'system' => [ + 'update' => 'Доступна новая версия Cachet. Инструкции по обновлению можно получить здесь!', + ], + + // Modal + 'modal' => [ + 'close' => 'Закрыть', + 'subscribe' => [ + 'title' => 'Подписка на изменения статуса компонента', + 'body' => 'Введите ваш email, чтобы подписаться на изменения статуса этого компонента. Если вы уже подписаны на обновления, значит сообщения об этом компоненте вам должны приходить.', + 'button' => 'Подписаться', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Будьте в курсе последних новостей о состоянии сервиса от :app.', + ], + ], + + // Other + 'home' => 'Главный экран', + 'powered_by' => 'Работает на Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'Об этом сайте', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Статусная лента', + +]; diff --git a/resources/lang/ru-RU/dashboard.php b/resources/lang/ru-RU/dashboard.php new file mode 100644 index 000000000000..0948919056a2 --- /dev/null +++ b/resources/lang/ru-RU/dashboard.php @@ -0,0 +1,304 @@ + 'Панель управления', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Инциденты', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Создать шаблон', + 'incident-templates' => 'Шаблоны инцидентов', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Добавить инцидент', + 'success' => 'Инцидент добавлен.', + 'failure' => 'При добавлении инцидента произошла ошибка, пожалуйста, попробуйте ещё раз.', + ], + 'edit' => [ + 'title' => 'Изменить инцидент', + 'success' => 'Инцидент обновлен.', + 'failure' => 'При редактировании инцидента произошла ошибка, пожалуйста, попробуйте ещё раз.', + ], + 'delete' => [ + 'success' => 'Инцидент удалён и больше не будет отображаться на статусной странице.', + 'failure' => 'Инцидент не может быть уделён, пожалуйста, попробуйте ещё раз.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Шаблоны инцидентов', + 'add' => [ + 'title' => 'Создать шаблон инцидента', + 'message' => 'Create your first incident template.', + 'success' => 'Новый шаблон инцидента создан.', + 'failure' => 'С шаблоном инцидента что-то не так.', + ], + 'edit' => [ + 'title' => 'Изменить шаблон', + 'success' => 'Шаблон инцидента обновлён.', + 'failure' => 'Что-то пошло не так при изменении шаблона инцидента', + ], + 'delete' => [ + 'success' => 'Шаблон инцидента удалён.', + 'failure' => 'Шаблон инцидента не может быть уделён, пожалуйста, попробуйте ещё раз.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Запланировано на :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Компоненты', + 'component_statuses' => ' Статусы компонентов', + 'listed_group' => 'В группе :name', + 'add' => [ + 'title' => 'Добавить компонент', + 'message' => 'Необходимо добавить компонент.', + 'success' => 'Компонент создан.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', + ], + 'edit' => [ + 'title' => 'Изменить компонент', + 'success' => 'Компонент обновлён.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', + ], + 'delete' => [ + 'success' => 'Компонент удалён!', + 'failure' => 'Компонент не может быть удалён, пожалуйста, повторите ещё раз.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Группа компонентов|Группы компонентов', + 'no_components' => 'Необходимо добавить группу компонентов.', + 'add' => [ + 'title' => 'Добавить группу компонентов', + 'success' => 'Группа компонентов добавлена.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', + ], + 'edit' => [ + 'title' => 'Изменить группу компонентов', + 'success' => 'Группа компонентов обновлена.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', + ], + 'delete' => [ + 'success' => 'Группа компонентов удалена!', + 'failure' => 'Группа компонентов не может быть удалена, пожалуйста, повторите ещё раз.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Метрики', + 'add' => [ + 'title' => 'Создать метрику', + 'message' => 'Необходимо добавить метрику.', + 'success' => 'Метрика создана.', + 'failure' => 'С метрикой что-то пошло не так, пожалуйста, повторите ещё раз.', + ], + 'edit' => [ + 'title' => 'Изменить метрику', + 'success' => 'Метрика обновлена.', + 'failure' => 'С метрикой что-то пошло не так, пожалуйста, повторите ещё раз.', + ], + 'delete' => [ + 'success' => 'Метрика удалена и больше не будет отображаться на статусной странице.', + 'failure' => 'Метрика не может быть удалена, пожалуйста, повторите ещё раз.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Подписчики', + 'description' => 'Подписчики будут получать уведомления по электронной почте при добавлении инцидентов или изменении статусов компонентов.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Подтверждён', + 'not_verified' => 'Не подтверждён', + 'subscriber' => ':email, подписан :date', + 'no_subscriptions' => 'Подписан на все обновления', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Добавить нового подписчика', + 'success' => 'Подписчик добавлен!', + 'failure' => 'Что-то пошло не так при добавлении подписчика, пожалуйста, повторите ещё раз.', + 'help' => 'Введите каждого подписчика с новой строки.', + ], + 'edit' => [ + 'title' => 'Обновить подписчика', + 'success' => 'Подписчик обновлён!', + 'failure' => 'Что-то пошло не так при изменении подписчика, пожалуйста, попробуйте ещё раз.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Команда', + 'member' => 'Участник', + 'profile' => 'Профиль', + 'description' => 'Участники команды смогут добавлять и изменять компоненты и инциденты.', + 'add' => [ + 'title' => 'Добавить нового участника команды', + 'success' => 'Участник команды добавлен.', + 'failure' => 'Участник команды не может быть добавлен, пожалуйста, повторите ещё раз.', + ], + 'edit' => [ + 'title' => 'Обновить профиль', + 'success' => 'Профиль обновлён.', + 'failure' => 'Что-то пошло не так при обновлении профиля, пожалуйста, повторите ещё раз.', + ], + 'delete' => [ + 'success' => 'Участник команды удалён и больше не сможет получить доступ к панели управления!', + 'failure' => 'Участник команды не может быть добавлен, пожалуйста, повторите ещё раз.', + ], + 'invite' => [ + 'title' => 'Пригласить нового участника команды', + 'success' => 'Приглашение отправлено', + 'failure' => 'Не получается отправить приглашение, пожалуйста, попробуйте ещё раз.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Настройки', + 'app-setup' => [ + 'app-setup' => 'Настройки приложения', + 'images-only' => 'Можно загружать только изображения.', + 'too-big' => 'Загруженный вами файл слишком большой. Загрузите картинку меньше чем :size', + ], + 'analytics' => [ + 'analytics' => 'Аналитика', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Региональные настройки', + ], + 'customization' => [ + 'customization' => 'Пользовательские настройки', + 'header' => 'Верхний колонтитул HTML', + 'footer' => 'Нижний колонтитул HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Безопасность', + 'two-factor' => 'Пользователи без двухфакторной аутентификации', + ], + 'stylesheet' => [ + 'stylesheet' => 'Таблица стилей', + ], + 'theme' => [ + 'theme' => 'Тема', + ], + 'edit' => [ + 'success' => 'Настройки сохранены.', + 'failure' => 'Не удаётся сохранить настройки.', + ], + 'credits' => [ + 'credits' => 'Разработчики', + 'contributors' => 'Контрибьюторы', + 'license' => 'Cachet - это проект с открытым исходным кодом по лицензии BSD-3, разрабатываемый компанией Alt Three Services Limited.', + 'backers-title' => 'Партнеры и спонсоры', + 'backers' => 'Если вы хотите поддержать будущую разработку, присоединяйтесь к сбору средств в Cachet Patreon.', + 'thank-you' => 'Спасибо всем нашим :count контрибьюторам.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Войти', + 'logged_in' => 'Вы вошли в систему.', + 'welcome' => 'С возвращением!', + 'two-factor' => 'Пожалуйста, введите ваш токен.', + ], + + // Sidebar footer + 'help' => 'Помощь', + 'status_page' => 'Статусная страница', + 'logout' => 'Выйти', + + // Notifications + 'notifications' => [ + 'notifications' => 'Уведомления', + 'awesome' => 'Отлично.', + 'whoops' => 'Ой-ой!', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Поддержать Cachet', + 'support_subtitle' => 'Посетите нашу страницу на Patreon!', + 'news' => 'Последние новости', + 'news_subtitle' => 'Проверить обновления', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Добро пожаловать на вашу статусную страницу!', + 'message' => 'Ваша статусная страница почти готова! Возможно, вы захотите настроить дополнительные параметры', + 'close' => 'Закрыть и перейти к панели управления', + 'steps' => [ + 'component' => 'Создание компонентов', + 'incident' => 'Создание инцидентов', + 'customize' => 'Настройка', + 'team' => 'Добавление пользователей', + 'api' => 'Создание API токена', + 'two-factor' => 'Двухфакторная аутентификация', + ], + ], + +]; diff --git a/resources/lang/ru-RU/forms.php b/resources/lang/ru-RU/forms.php new file mode 100644 index 000000000000..b80957cfd3fb --- /dev/null +++ b/resources/lang/ru-RU/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Имя пользователя', + 'password' => 'Пароль', + 'site_name' => 'Название сайта', + 'site_domain' => 'Домен сайта', + 'site_timezone' => 'Часовой пояс', + 'site_locale' => 'Язык интерфейса', + 'enable_google2fa' => 'Включить двухфакторную аутентификацию Google', + 'cache_driver' => 'Хранилище кеша', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Хранилище сессий', + 'mail_driver' => 'Водитель почты', + 'mail_host' => 'Почтовый хост', + 'mail_address' => 'Почту с адреса', + 'mail_username' => 'Имя пользователя электронной почты', + 'mail_password' => 'Почтовый пароль', + ], + + // Login form fields + 'login' => [ + 'login' => 'Имя пользователя или Email', + 'email' => 'Email', + 'password' => 'Пароль', + '2fauth' => 'Код аутентификации', + 'invalid' => 'Неверное имя пользователя или пароль', + 'invalid-token' => 'Неверный токен', + 'cookies' => 'Необходимо включить cookies для входа.', + 'rate-limit' => 'Превышено ограничение скорости.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Название', + 'status' => 'Статус', + 'component' => 'Компонент', + 'component_status' => 'Component Status', + 'message' => 'Сообщение', + 'message-help' => 'Вы также можете использовать Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Уведомить подписчиков?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Отображение инцидента', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Доступен публично', + 'logged_in_only' => 'Показывать только авторизованным пользователям', + 'templates' => [ + 'name' => 'Название', + 'template' => 'Шаблон', + 'twig' => 'В шаблонах инцидентов можно использовать Twig.', + ], + ], + + 'schedules' => [ + 'name' => 'Название', + 'status' => 'Статус', + 'message' => 'Сообщение', + 'message-help' => 'Вы также можете использовать Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Название', + 'template' => 'Шаблон', + 'twig' => 'В шаблонах инцидентов можно использовать Twig.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Название', + 'status' => 'Статус', + 'group' => 'Группа', + 'description' => 'Описание', + 'link' => 'Ссылка', + 'tags' => 'Теги', + 'tags-help' => 'Разделяйте запятыми.', + 'enabled' => 'Компонент включен?', + + 'groups' => [ + 'name' => 'Название', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Всегда развернута', + 'collapsed' => 'Свернута по умолчанию', + 'collapsed_incident' => 'Свернута, но разворачивать, если есть проблема', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Название', + 'description' => 'Описание', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Группа', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Название', + 'suffix' => 'Суффикс', + 'description' => 'Описание', + 'description-help' => 'Вы также можете использовать Markdown.', + 'display-chart' => 'Отображать график на статусной странице?', + 'default-value' => 'Значение по умолчанию', + 'calc_type' => 'Расчет метрики', + 'type_sum' => 'Сумма', + 'type_avg' => 'Среднее значение', + 'places' => 'Количество цифр после точки', + 'default_view' => 'Представление по умолчанию', + 'threshold' => 'Количество минут между снятием метрик?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Значение', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Название сайта', + 'site-url' => 'URL сайта', + 'display-graphs' => 'Отображать графики на статусной странице?', + 'about-this-page' => 'Об этой странице', + 'days-of-incidents' => 'За сколько дней показывать инциденты?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Картинка-баннер', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Разрешить посетителям подписываться на email-уведомления?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Автоматически переводить вашу статусную страницу на язык посетителя?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Код Google Analytics', + 'analytics_gosquared' => 'Код GoSquared Analytics', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Идентификатор сайта в Piwik', + ], + 'localization' => [ + 'site-timezone' => 'Часовой пояс сайта', + 'site-locale' => 'Язык сайта', + 'date-format' => 'Формат даты', + 'incident-date-format' => 'Формат даты и времени для инцидента', + ], + 'security' => [ + 'allowed-domains' => 'Разрешённые домены', + 'allowed-domains-help' => 'Разделяйте запятыми. Домен, установленный в настройках, разрешен по умолчанию.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Код пользовательских стилей (CSS)', + ], + 'theme' => [ + 'background-color' => 'Цвет фона', + 'background-fills' => 'Заливка фона (компоненты, инциденты, «подвал»)', + 'banner-background-color' => 'Цвет фона для баннера', + 'banner-padding' => 'Отступы баннера', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Цвет текста', + 'dashboard-login' => 'Отображать кнопку панели управления в «подвале»?', + 'reds' => 'Красный (для ошибок)', + 'blues' => 'Синий (для информации)', + 'greens' => 'Зеленый (для сообщений о выполнении)', + 'yellows' => 'Желтый (для тревожных сообщений)', + 'oranges' => 'Оранжевый (для предупреждений)', + 'metrics' => 'Заливка метрик', + 'links' => 'Ссылки', + ], + ], + + 'user' => [ + 'username' => 'Имя пользователя', + 'email' => 'Email', + 'password' => 'Пароль', + 'api-token' => 'API токен', + 'api-token-help' => 'Обновление вашего API токена заблокирует существующим приложениям доступ в Cachet. Вам будет необходимо прописать в них новый токен.', + 'gravatar' => 'Изменить своё изображение на Gravatar.', + 'user_level' => 'Тип пользователя', + 'levels' => [ + 'admin' => 'Администратор', + 'user' => 'Пользователь', + ], + '2fa' => [ + 'help' => 'Включение двухфакторной аутентификации увеличивает безопасность вашей учетной записи. Вам понадобится скачать Google Authenticator или аналогичное приложение на свой смартфон. Для входа в панель управления, вам понадобится код, выданный этим приложением.', + ], + 'team' => [ + 'description' => 'Пригласите своих коллег введя их адреса электронной почты.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Добавить', + 'save' => 'Сохранить', + 'update' => 'Обновить', + 'create' => 'Создать', + 'edit' => 'Изменить', + 'delete' => 'Удалить', + 'submit' => 'Отправить', + 'cancel' => 'Отменить', + 'remove' => 'Удалить', + 'invite' => 'Пригласить', + 'signup' => 'Зарегистрироваться', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Необязательно', +]; diff --git a/resources/lang/ru-RU/notifications.php b/resources/lang/ru-RU/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/ru-RU/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/ru-RU/pagination.php b/resources/lang/ru-RU/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/ru-RU/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/ru-RU/setup.php b/resources/lang/ru-RU/setup.php new file mode 100644 index 000000000000..4a80ab495757 --- /dev/null +++ b/resources/lang/ru-RU/setup.php @@ -0,0 +1,23 @@ + 'Установка', + 'title' => 'Установка Cachet', + 'service_details' => 'Параметры сервиса', + 'env_setup' => 'Настройка окружения', + 'status_page_setup' => 'Настройки статусной страницы', + 'show_support' => 'Показывать, что статусная страница создана на Cachet?', + 'admin_account' => 'Учетная запись администратора', + 'complete_setup' => 'Завершить установку', + 'completed' => 'Вы успешно настроили Cachet!', + 'finish_setup' => 'Перейти в панель управления', +]; diff --git a/resources/lang/ru-RU/validation.php b/resources/lang/ru-RU/validation.php new file mode 100644 index 000000000000..851af2f8d4b2 --- /dev/null +++ b/resources/lang/ru-RU/validation.php @@ -0,0 +1,122 @@ + ':attribute должен быть принят.', + 'active_url' => ':attribute не является допустимым URL.', + 'after' => ':attribute должно быть датой после :date.', + 'alpha' => ':attribute может содержать только буквы.', + 'alpha_dash' => ':attribute может содержать только латинские буквы, цифры и дефис.', + 'alpha_num' => ':attribute может содержать только буквы и цифры.', + 'array' => ': attribute должно быть массивом.', + 'before' => ':attribute должно быть датой до :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => ':attribute должно содержать от :min до :max элементов.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'Поле :attribute содержит дублирующееся значение.', + 'filled' => 'The :attribute field is required.', + 'image' => ':attribute должно быть изображением.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'Поле :attribute не существует в :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => ':attribute должен быть в JSON формате.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => ':attribute не может содержать больше чем :max элементов.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => ':attribute должно быть не меньше :min килобайт.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'Поле :attribute должно быть заполнено.', + 'regex' => 'Неправильный формат :attribute.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'Поле :attribute обязательно, если :other не из :values.', + 'required_with' => 'Поле :attribute является обязательным, если все :values заполнены.', + 'required_with_all' => 'Поле :attribute является обязательным, если все :values заполнены.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => ':attribute должно быть объемом :size килобайт.', + 'string' => 'Поле :attribute должно содержать :size символов.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => ':attribute должно быть корректным часовым поясом.', + 'unique' => ':attribute уже занято.', + 'url' => 'Неправильный формат :attribute.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'настраиваемое сообщение', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/ru/dashboard.php b/resources/lang/ru/dashboard.php index 590acd4d785e..44fd4adb4bd2 100644 --- a/resources/lang/ru/dashboard.php +++ b/resources/lang/ru/dashboard.php @@ -11,15 +11,17 @@ return [ - 'dashboard' => 'Панель управления', + 'dashboard' => 'Панель управления', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => 'Инциденты и плановые работы', + 'title' => 'Incidents & Schedule', 'incidents' => 'Инциденты', 'logged' => '{0} Нет инцидентов, отличная работа!|У вас зарегистрирован :count инцидент.|У вас зарегистрировано :count инцидента.|У вас зарегистрировано :count инцидентов.', 'incident-create-template' => 'Создать шаблон', 'incident-templates' => 'Шаблоны инцидентов', + 'updates' => '{0} Zero Updates|One Update|:count Updates', 'add' => [ 'title' => 'Добавить инцидент', 'success' => 'Инцидент добавлен.', @@ -34,6 +36,10 @@ 'success' => 'Инцидент удалён и больше не будет отображаться на статусной странице.', 'failure' => 'Инцидент не может быть уделён, пожалуйста, попробуйте ещё раз.', ], + 'update' => [ + 'title' => 'Create new incident update', + 'subtitle' => 'Добавить обновление к :incident', + ], // Incident templates 'templates' => [ @@ -105,12 +111,12 @@ 'add' => [ 'title' => 'Добавить группу компонентов', 'success' => 'Группа компонентов добавлена.', - 'failure' => 'Что-то не так с группой компонентов, пожалуйста, повторите ещё раз.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', ], 'edit' => [ 'title' => 'Изменить группу компонентов', 'success' => 'Группа компонентов обновлена.', - 'failure' => 'Что-то не так с группой компонентов, пожалуйста, повторите ещё раз.', + 'failure' => 'Что-то не так с компонентом, пожалуйста, повторите ещё раз.', ], 'delete' => [ 'success' => 'Группа компонентов удалена!', @@ -150,7 +156,7 @@ 'title' => 'Добавить нового подписчика', 'success' => 'Подписчик добавлен!', 'failure' => 'Что-то пошло не так при добавлении подписчика, пожалуйста, повторите ещё раз.', - 'help' => 'Enter each subscriber on a new line.', + 'help' => 'Введите каждого подписчика с новой строки.', ], 'edit' => [ 'title' => 'Обновить подписчика', @@ -164,7 +170,7 @@ 'team' => 'Команда', 'member' => 'Участник', 'profile' => 'Профиль', - 'description' => 'Участники команды смогут добавлять и изменять компоненты и инциденты.', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', 'add' => [ 'title' => 'Добавить нового участника команды', 'success' => 'Участник команды добавлен.', @@ -197,6 +203,9 @@ 'analytics' => [ 'analytics' => 'Аналитика', ], + 'log' => [ + 'log' => 'Журнал', + ], 'localization' => [ 'localization' => 'Региональные настройки', ], @@ -205,6 +214,14 @@ 'header' => 'Верхний колонтитул HTML', 'footer' => 'Нижний колонтитул HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Безопасность', 'two-factor' => 'Пользователи без двухфакторной аутентификации', @@ -221,11 +238,11 @@ ], 'credits' => [ 'credits' => 'Разработчики', - 'contributors' => 'Разработчики', - 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', - 'backers-title' => 'Партнеры & спонсоры', - 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', - 'thank-you' => 'Thank you to each and every one of the :count contributors.', + 'contributors' => 'Контрибьюторы', + 'license' => 'Cachet - это проект с открытым исходным кодом по лицензии BSD-3, разрабатываемый компанией Alt Three Services Limited.', + 'backers-title' => 'Партнеры и спонсоры', + 'backers' => 'Если вы хотите поддержать будущую разработку, присоединяйтесь к сбору средств в Cachet Patreon.', + 'thank-you' => 'Спасибо всем нашим :count контрибьюторам.', ], ], @@ -252,7 +269,7 @@ // Widgets 'widgets' => [ 'support' => 'Поддержать Cachet', - 'support_subtitle' => 'Check out our Patreon page!', + 'support_subtitle' => 'Посетите нашу страницу на Patreon!', 'news' => 'Последние новости', 'news_subtitle' => 'Проверить обновления', ], diff --git a/resources/lang/ru/forms.php b/resources/lang/ru/forms.php index f8db14d2465d..148f28458e3a 100644 --- a/resources/lang/ru/forms.php +++ b/resources/lang/ru/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Название', 'template' => 'Шаблон', - 'twig' => 'В шаблонах инцидентов можно использовать Twig.', + 'twig' => 'В шаблонах инцидентов можно использовать Twig.', ], ], diff --git a/resources/lang/sl-SI/cachet.php b/resources/lang/sl-SI/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/sl-SI/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/sl-SI/dashboard.php b/resources/lang/sl-SI/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/sl-SI/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/sl-SI/forms.php b/resources/lang/sl-SI/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/sl-SI/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/sl-SI/notifications.php b/resources/lang/sl-SI/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/sl-SI/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/sl-SI/pagination.php b/resources/lang/sl-SI/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/sl-SI/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/sl-SI/setup.php b/resources/lang/sl-SI/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/sl-SI/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/sl-SI/validation.php b/resources/lang/sl-SI/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/sl-SI/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/sq-AL/cachet.php b/resources/lang/sq-AL/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/sq-AL/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/sq-AL/dashboard.php b/resources/lang/sq-AL/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/sq-AL/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/sq-AL/forms.php b/resources/lang/sq-AL/forms.php new file mode 100644 index 000000000000..2cd3fff48be9 --- /dev/null +++ b/resources/lang/sq-AL/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => ' Përditëso', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/sq-AL/notifications.php b/resources/lang/sq-AL/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/sq-AL/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/sq-AL/pagination.php b/resources/lang/sq-AL/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/sq-AL/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/sq-AL/setup.php b/resources/lang/sq-AL/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/sq-AL/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/sq-AL/validation.php b/resources/lang/sq-AL/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/sq-AL/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/sq/forms.php b/resources/lang/sq/forms.php index 6b01fff910dc..6e184e60064e 100644 --- a/resources/lang/sq/forms.php +++ b/resources/lang/sq/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Emri', 'template' => 'Paraqitja', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/sr/forms.php b/resources/lang/sr/forms.php index e37dce2dd6b2..360ec491d852 100644 --- a/resources/lang/sr/forms.php +++ b/resources/lang/sr/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Name', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/sv-SE/cachet.php b/resources/lang/sv-SE/cachet.php index 379b6a200963..319cdda9b486 100644 --- a/resources/lang/sv-SE/cachet.php +++ b/resources/lang/sv-SE/cachet.php @@ -12,28 +12,31 @@ return [ // Components 'components' => [ - 'last_updated' => 'Last updated :timestamp', + 'last_updated' => 'Senast uppdaterad :timestamp', 'status' => [ + 0 => 'Unknown', 1 => 'Fungerar', 2 => 'Prestandaproblem', 3 => 'Mindre avbrott', 4 => 'Större avbrott', ], 'group' => [ - 'other' => 'Other Components', + 'other' => 'Andra komponenter', ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', ], // Incidents 'incidents' => [ - 'none' => 'Inga händelser har rapporterats', - 'past' => 'Tidigare händelser', - 'previous_week' => 'Förra veckan', - 'next_week' => 'Nästa vecka', - 'scheduled' => 'Planerat underhåll', - 'scheduled_at' => ', schemalagda: tidsstämpel', - 'status' => [ - 0 => 'Schemalagd', // TODO: Hopefully remove this. + 'none' => 'Inga händelser har rapporterats', + 'past' => 'Tidigare händelser', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Planerat underhåll', + 'scheduled_at' => ', schemalagda: tidsstämpel', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ 1 => 'Undersöker', 2 => 'Identifierat', 3 => 'Bevakar', @@ -41,11 +44,20 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] Systemet fungerar |[2,Inf] Alla system fungerar', - 'bad' => '[0,1] Systemet har för närvarande problem|[2,Inf] Vissa system har problem', - 'major' => '[0,1] Stora störningar på tjänsten [2,Inf] Stora störningar på vissa system', + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', ], 'api' => [ @@ -65,47 +77,29 @@ // Subscriber 'subscriber' => [ - 'subscribe' => 'Prenumerera för att få de senaste uppdateringarna', - 'button' => 'Prenumerera', - 'manage' => [ - 'no_subscriptions' => 'You\'re currently subscribed to all updates.', - 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Prenumerera', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifieringar', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'Du prenumererar på alla uppdateringar.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'Du prenumererar på följande uppdateringar.', + 'manage_at_link' => 'Manage your subscriptions at :link', ], 'email' => [ - 'subscribe' => 'Prenumerera på epost-uppdateringar.', - 'subscribed' => 'Du har börjat prenumerera på e-postmeddelanden, vänligen kontrollera din e-post för att bekräfta din prenumeration.', - 'verified' => 'Din epost-prenumeration har bekräftats. Tack!', - 'manage' => 'Manage your subscription', - 'unsubscribe' => 'Avbeställ epost-uppdateringar.', - 'unsubscribed' => 'Din epost-prenumeration har avbrutits.', - 'failure' => 'Något blev fel med prenumerationen.', - 'already-subscribed' => 'Kan inte skapa en prenumeration för :email eftersom den redan prenumererar.', - 'verify' => [ - 'text' => "Please confirm your email subscription to :app_name status updates.\n:link", - 'html' => '

          Please confirm your email subscription to :app_name status updates.

          ', - 'button' => 'Confirm Subscription', - ], - 'maintenance' => [ - 'subject' => '[Maintenance Scheduled] :name', - ], - 'incident' => [ - 'subject' => '[New Incident] :status: :name', - ], - 'component' => [ - 'subject' => 'Komponentstatusuppdatering', - 'text' => 'Komponenten :component_name har fått en ny status. Komponenten har nu status :component_human_status.\nTack, :app_name', - 'html' => '

          Komponenten :component_name har fått en ny status. Komponenten har nu status :component_human_status.

          Tack, :app_name

          ', - 'tooltip-title' => 'Prenumerera på uppdateringar för :component_name.', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "Du har blivit inbjuden till teamet för :app_names statussida, registrera dig genom att trycka på länken.\n:link\nTack, :app_name", - 'html' => '

          Du har blivit inbjuden till teamet :app_names statussida. Registrera dig genom att trycka på den här länken

          Tack, :app_name

          ', - ], + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Prenumerera på epost-uppdateringar.', + 'subscribed' => 'Du har börjat prenumerera på e-postmeddelanden, vänligen kontrollera din e-post för att bekräfta din prenumeration.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Din epost-prenumeration har bekräftats. Tack!', + 'manage' => 'Hantera din prenumeration', + 'unsubscribe' => 'Avbeställ epost-uppdateringar.', + 'unsubscribed' => 'Din epost-prenumeration har avbrutits.', + 'failure' => 'Något blev fel med prenumerationen.', + 'already-subscribed' => 'Kan inte skapa en prenumeration för :email eftersom den redan prenumererar.', ], ], @@ -132,10 +126,20 @@ ], ], + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Håll dig uppdaterad med de senaste uppdateringarna från :app.', + ], + ], + // Other - 'home' => 'Home', - 'description' => 'Stay up to date with the latest service updates from :app.', - 'powered_by' => 'Powered by Cachet.', + 'home' => 'Hem', + 'powered_by' => 'Drivs av Cachet.', + 'timezone' => 'Times are shown in :timezone.', 'about_this_site' => 'Om sidan', 'rss-feed' => 'RSS', 'atom-feed' => 'Atom', diff --git a/resources/lang/sv-SE/dashboard.php b/resources/lang/sv-SE/dashboard.php index dc563901273b..49427ace1432 100644 --- a/resources/lang/sv-SE/dashboard.php +++ b/resources/lang/sv-SE/dashboard.php @@ -11,15 +11,31 @@ return [ - 'dashboard' => 'Översiktspanel', + 'dashboard' => 'Översiktspanel', + 'writeable_settings' => 'Cachets inställningskatalog är inte skrivbar. Kontrollera att ./bootstrap/cachet är skrivbar av webbservern.', // Incidents 'incidents' => [ - 'title' => 'Händelser & Schema', + 'title' => 'Incidents & Maintenance', 'incidents' => 'Händelser', - 'logged' => '{0} Det finns inga händelser, bra jobbat!|Du har skapat en händelse.|Du har skapat :count händelser.', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', 'incident-create-template' => 'Skapa mall', 'incident-templates' => 'Händelsemallar', + 'updates' => [ + 'title' => 'Uppdateringar för :incident', + 'count' => '{0}Inga uppdateringar|[1]En uppdatering|[2]Två uppdateringar|[3,*]Flera uppdateringar', + 'add' => [ + 'title' => 'Skapa en ny incidentuppdatering', + 'success' => 'Din nya incidentuppdatering har skapats.', + 'failure' => 'Något gick fel under uppdatering av incidenten.', + ], + 'edit' => [ + 'title' => 'Redigera incidentuppdatering', + 'success' => 'Incidentuppdateringen har uppdaterats.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', 'add' => [ 'title' => 'Lägg till händelse', 'success' => 'Incident added.', @@ -40,7 +56,7 @@ 'title' => 'Händelsemallar', 'add' => [ 'title' => 'Skapa en händelsemall', - 'message' => 'Du borde lägga till en händelsemall.', + 'message' => 'Create your first incident template.', 'success' => 'Your new incident template has been created.', 'failure' => 'Something went wrong with the incident template.', ], @@ -59,21 +75,21 @@ // Incident Maintenance 'schedule' => [ 'schedule' => 'Planerat underhåll', - 'logged' => '{0} Det finns inget schemalagt, bra jobbat!|Du har skapat ett schemalagt underhåll.|Du har skapat :count schemalagda underhåll.', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', 'scheduled_at' => 'Schemalagd till: tidsstämpel', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Lägg till planerat underhåll', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', ], ], @@ -86,12 +102,12 @@ 'title' => 'Lägg till en komponent', 'message' => 'Du borde lägga till en komponent.', 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ 'title' => 'Redigera komponent', 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ 'success' => 'Komponenten har tagits bort!', @@ -140,13 +156,15 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => 'Prenumeranter', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => 'Bekräftad', - 'not_verified' => 'Inte bekräftad', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', - 'add' => [ + 'subscribers' => 'Prenumeranter', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Bekräftad', + 'not_verified' => 'Inte bekräftad', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ 'title' => 'Lägg till en prenumerant', 'success' => 'Prenumerant tillagd!', 'failure' => 'Something went wrong adding the subscriber, please try again.', @@ -197,6 +215,9 @@ 'analytics' => [ 'analytics' => 'Analys', ], + 'log' => [ + 'log' => 'Log', + ], 'localization' => [ 'localization' => 'Platsanpassning', ], @@ -205,6 +226,14 @@ 'header' => 'Custom Header HTML', 'footer' => 'Custom Footer HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Säkerhet', 'two-factor' => 'Användare utan tvåfaktorsautentisering', @@ -254,14 +283,14 @@ 'support' => 'Support Cachet', 'support_subtitle' => 'Check out our Patreon page!', 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'news_subtitle' => 'Get the latest update', ], // Welcome modal 'welcome' => [ 'welcome' => 'Välkommen till din statussida!', 'message' => 'Din statussida är nästan redo. Du kan vilja konfigerara de här extra inställningarna', - 'close' => 'Take me straight to my dashboard', + 'close' => 'I\'m good thanks!', 'steps' => [ 'component' => 'Skapa komponenter', 'incident' => 'Skapa händelser', diff --git a/resources/lang/sv-SE/forms.php b/resources/lang/sv-SE/forms.php index d361de4d7dfd..1c6f0a15c84d 100644 --- a/resources/lang/sv-SE/forms.php +++ b/resources/lang/sv-SE/forms.php @@ -22,7 +22,13 @@ 'site_locale' => 'Välj ditt språk', 'enable_google2fa' => 'Aktivera Google tvåfaktorsautentisering', 'cache_driver' => 'Cachedrivrutin', + 'queue_driver' => 'Queue Driver', 'session_driver' => 'Sessionsdrivrutin', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', ], // Login form fields @@ -35,6 +41,7 @@ 'invalid-token' => 'Ogiltig nyckel', 'cookies' => 'Du måste aktivera cookies för att kunna logga in.', 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', ], // Incidents form fields @@ -42,18 +49,36 @@ 'name' => 'Namn', 'status' => 'Status', 'component' => 'Komponent', + 'component_status' => 'Component Status', 'message' => 'Meddelande', 'message-help' => 'Du kan även använda Markdown.', - 'scheduled_at' => 'När vill du schemalägga underhållet?', - 'incident_time' => 'När inträffade händelsen?', + 'occurred_at' => 'When did this incident occur?', 'notify_subscribers' => 'Meddela prenumeranter?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', 'public' => 'Kan ses av allmänheten', 'logged_in_only' => 'Endast synlig för inloggade användare', 'templates' => [ 'name' => 'Namn', 'template' => 'Mall', - 'twig' => 'Händelsmallar kan använda Twig-mallspråk.', + 'twig' => 'Händelsmallar kan använda Twig-mallspråk.', + ], + ], + + 'schedules' => [ + 'name' => 'Namn', + 'status' => 'Status', + 'message' => 'Meddelande', + 'message-help' => 'Du kan även använda Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Namn', + 'template' => 'Mall', + 'twig' => 'Händelsmallar kan använda Twig-mallspråk.', ], ], @@ -69,28 +94,50 @@ 'enabled' => 'Komponent aktiverad?', 'groups' => [ - 'name' => 'Namn', - 'collapsing' => 'Choose visibility of the group', - 'visible' => 'Always expanded', - 'collapsed' => 'Collapse the group by default', - 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'name' => 'Namn', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Namn', + 'description' => 'Beskrivning', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Grupp', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', ], ], // Metric form fields 'metrics' => [ - 'name' => 'Namn', - 'suffix' => 'Suffix', - 'description' => 'Beskrivning', - 'description-help' => 'Du kan även använda Markdown.', - 'display-chart' => 'Visa diagram på statussidan?', - 'default-value' => 'Standardvärde', - 'calc_type' => 'Beräkning av mätetal', - 'type_sum' => 'Summa', - 'type_avg' => 'Medelvärde', - 'places' => 'Decimalplatser', - 'default_view' => 'Standardvy', - 'threshold' => 'How many minutes of threshold between metric points?', + 'name' => 'Namn', + 'suffix' => 'Suffix', + 'description' => 'Beskrivning', + 'description-help' => 'Du kan även använda Markdown.', + 'display-chart' => 'Visa diagram på statussidan?', + 'default-value' => 'Standardvärde', + 'calc_type' => 'Beräkning av mätetal', + 'type_sum' => 'Summa', + 'type_avg' => 'Medelvärde', + 'places' => 'Decimalplatser', + 'default_view' => 'Standardvy', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', 'points' => [ 'value' => 'Värde', @@ -99,22 +146,29 @@ // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => 'Webbplatsens namn', - 'site-url' => 'Webbplatsens URL', - 'display-graphs' => 'Visa grafer på statussidan?', - 'about-this-page' => 'Om den här sidan', - 'days-of-incidents' => 'Hur många dagar av händelser ska visas?', - 'banner' => 'Banner Image', - 'banner-help' => 'Vi rekommenderar att du inte laddar upp bilder som är bredare än 930 px.', - 'subscribers' => 'Tillåt att registrera sig för notifikationer via e-post?', - 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'site-name' => 'Webbplatsens namn', + 'site-url' => 'Webbplatsens URL', + 'display-graphs' => 'Visa grafer på statussidan?', + 'about-this-page' => 'Om den här sidan', + 'days-of-incidents' => 'Hur många dagar av händelser ska visas?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Tillåt att registrera sig för notifikationer via e-post?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', ], 'analytics' => [ 'analytics_google' => 'Google Analytics-kod', 'analytics_gosquared' => 'GoSquared Analytics-code', - 'analytics_piwik_url' => 'URL till din Piwik-instans (utan http(s)://)', + 'analytics_piwik_url' => 'URL of your Piwik instance', 'analytics_piwik_siteid' => 'Piwik\'s sajt-id', ], 'localization' => [ @@ -124,19 +178,21 @@ 'incident-date-format' => 'Händelsens tidsstämpelformat', ], 'security' => [ - 'allowed-domains' => 'Tillåtna domäner', - 'allowed-domains-help' => 'Kommaseparerad. Domänerna ovan tillåts automatiskt som standard.', + 'allowed-domains' => 'Tillåtna domäner', + 'allowed-domains-help' => 'Kommaseparerad. Domänerna ovan tillåts automatiskt som standard.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', ], 'stylesheet' => [ 'custom-css' => 'Custom Stylesheet', ], 'theme' => [ - 'background-color' => 'Background Color', + 'background-color' => 'Background color', 'background-fills' => 'Bakgrundsfärg (komponenter, händelser, sidfot)', 'banner-background-color' => 'Bakgrundsfärg för banner', 'banner-padding' => 'Bannerutfyllnad', - 'fullwidth-banner' => 'Aktivera fullbreddsbanner?', - 'text-color' => 'Text Color', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', 'dashboard-login' => 'Visa länk till översiktspanelen i sidfoten?', 'reds' => 'Röd (används för fel)', 'blues' => 'Blå (används för information)', @@ -165,22 +221,32 @@ ], 'team' => [ 'description' => 'Bjud in dina teammedlemmar genom att fylla i deras epostadresser här.', - 'email' => 'Epostadress #:id', + 'email' => 'Your Team Members Email Address', ], ], + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + // Buttons - 'add' => 'Lägg till', - 'save' => 'Spara', - 'update' => 'Uppdatera', - 'create' => 'Skapa', - 'edit' => 'Redigera', - 'delete' => 'Radera', - 'submit' => 'Skicka', - 'cancel' => 'Avbryt', - 'remove' => 'Ta bort', - 'invite' => 'Bjud In', - 'signup' => 'Registrera dig', + 'add' => 'Lägg till', + 'save' => 'Spara', + 'update' => 'Uppdatera', + 'create' => 'Skapa', + 'edit' => 'Redigera', + 'delete' => 'Radera', + 'submit' => 'Skicka', + 'cancel' => 'Avbryt', + 'remove' => 'Ta bort', + 'invite' => 'Bjud In', + 'signup' => 'Registrera dig', + 'manage_updates' => 'Manage Updates', // Other 'optional' => 'Valfri', diff --git a/resources/lang/sv-SE/notifications.php b/resources/lang/sv-SE/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/sv-SE/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/sv-SE/pagination.php b/resources/lang/sv-SE/pagination.php index 8c4ef806e8db..0ee724cf086b 100644 --- a/resources/lang/sv-SE/pagination.php +++ b/resources/lang/sv-SE/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« Föregående', - 'next' => 'Nästa »', + 'previous' => 'Previous', + 'next' => 'Next', ]; diff --git a/resources/lang/sv-SE/validation.php b/resources/lang/sv-SE/validation.php index 3c0173bc9fa5..89e504e7bab8 100644 --- a/resources/lang/sv-SE/validation.php +++ b/resources/lang/sv-SE/validation.php @@ -31,60 +31,60 @@ 'array' => '.attribute måste vara en lista med värden.', 'before' => ':attribute måste vara ett datum före :date.', 'between' => [ - 'numeric' => ':attribute måste vara ett datum före :date.', - 'file' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', 'array' => ':attribute måste ha mellan :min och :max föremål.', ], - 'boolean' => ':attribute måste ha mellan :min och :max föremål.', - 'confirmed' => 'The :attribute field must be true or false.', - 'date' => 'The :attribute confirmation does not match.', - 'date_format' => 'The :attribute is not a valid date.', - 'different' => 'The :attribute does not match the format :format.', - 'digits' => 'The :attribute and :other must be different.', - 'digits_between' => 'The :attribute must be :digits digits.', - 'email' => 'The :attribute must be between :min and :max digits.', - 'exists' => 'The :attribute must be a valid email address.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', 'distinct' => 'The :attribute field has a duplicate value.', - 'filled' => ':attribute-formatet är ogiltigt.', + 'filled' => 'The :attribute field is required.', 'image' => ':attribute måste vara en bild.', - 'in' => ':attribute måste vara en bild.', + 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The selected :attribute is invalid.', - 'ip' => 'The :attribute must be an integer.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', 'json' => ':attribute måste vara en giltig JSON-sträng.', 'max' => [ - 'numeric' => 'The :attribute must be a valid IP address.', - 'file' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max kilobytes.', + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', 'array' => ':attribute får inte innehålla mer än :max föremål.', ], - 'mimes' => ':attribute får inte innehålla mer än :max föremål.', + 'mimes' => 'The :attribute must be a file of type: :values.', 'min' => [ - 'numeric' => 'The :attribute must be a file of type: :values.', + 'numeric' => 'The :attribute must be at least :min.', 'file' => ':attribute måste vara större än :min kilobyte.', - 'string' => ':attribute måste vara större än :min kilobyte.', - 'array' => 'The :attribute must be at least :min characters.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', ], - 'not_in' => 'The :attribute must have at least :min items.', - 'numeric' => 'The selected :attribute is invalid.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute must be a number.', - 'required' => ':attribute-formatet är ogiltigt.', - 'required_if' => 'The :attribute field is required.', + 'regex' => ':attribute-formatet är ogiltigt.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => ':attribute-fältet är obligatoriskt om inte :other är :value.', - 'required_with' => 'The :attribute field is required when :other is :value.', + 'required_with' => ':attribute fältet är obligatoriskt när :values är valda.', 'required_with_all' => ':attribute fältet är obligatoriskt när :values är valda.', - 'required_without' => ':attribute fältet är obligatoriskt när :values är valda.', - 'required_without_all' => 'The :attribute field is required when :values is not present.', - 'same' => 'The :attribute field is required when none of :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', 'size' => [ - 'numeric' => 'The :attribute and :other must match.', + 'numeric' => 'The :attribute must be :size.', 'file' => ':attribute måste vara :size kilobyte.', 'string' => ':attribute måste vara :size tecken.', - 'array' => ':attribute måste vara :size tecken.', + 'array' => 'The :attribute must contain :size items.', ], - 'string' => 'The :attribute must contain :size items.', + 'string' => 'The :attribute must be a string.', 'timezone' => ':attribute måste vara en giltig zon.', 'unique' => ':attribute är upptaget.', 'url' => ':attribute-formatet är ogiltigt.', diff --git a/resources/lang/th-TH/cachet.php b/resources/lang/th-TH/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/th-TH/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/th-TH/dashboard.php b/resources/lang/th-TH/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/th-TH/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/th-TH/forms.php b/resources/lang/th-TH/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/th-TH/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/th-TH/notifications.php b/resources/lang/th-TH/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/th-TH/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/th-TH/pagination.php b/resources/lang/th-TH/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/th-TH/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/th-TH/setup.php b/resources/lang/th-TH/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/th-TH/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/th-TH/validation.php b/resources/lang/th-TH/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/th-TH/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/tr-TR/cachet.php b/resources/lang/tr-TR/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/tr-TR/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/tr-TR/dashboard.php b/resources/lang/tr-TR/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/tr-TR/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/tr-TR/forms.php b/resources/lang/tr-TR/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/tr-TR/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/tr-TR/notifications.php b/resources/lang/tr-TR/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/tr-TR/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/tr-TR/pagination.php b/resources/lang/tr-TR/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/tr-TR/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/tr-TR/setup.php b/resources/lang/tr-TR/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/tr-TR/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/tr-TR/validation.php b/resources/lang/tr-TR/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/tr-TR/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/tr/forms.php b/resources/lang/tr/forms.php index f4fde2e504bf..18d35750a82e 100644 --- a/resources/lang/tr/forms.php +++ b/resources/lang/tr/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'İsim', 'template' => 'Tema', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/uk-UA/cachet.php b/resources/lang/uk-UA/cachet.php new file mode 100644 index 000000000000..cb24fc10e7c8 --- /dev/null +++ b/resources/lang/uk-UA/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Operational', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/uk-UA/dashboard.php b/resources/lang/uk-UA/dashboard.php new file mode 100644 index 000000000000..7dc9af669deb --- /dev/null +++ b/resources/lang/uk-UA/dashboard.php @@ -0,0 +1,304 @@ + 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/uk-UA/forms.php b/resources/lang/uk-UA/forms.php new file mode 100644 index 000000000000..075b7588a9cd --- /dev/null +++ b/resources/lang/uk-UA/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Password', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/uk-UA/notifications.php b/resources/lang/uk-UA/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/uk-UA/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/uk-UA/pagination.php b/resources/lang/uk-UA/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/uk-UA/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/uk-UA/setup.php b/resources/lang/uk-UA/setup.php new file mode 100644 index 000000000000..bdc2a457873f --- /dev/null +++ b/resources/lang/uk-UA/setup.php @@ -0,0 +1,23 @@ + 'Setup', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/uk-UA/validation.php b/resources/lang/uk-UA/validation.php new file mode 100644 index 000000000000..7d196d984dd0 --- /dev/null +++ b/resources/lang/uk-UA/validation.php @@ -0,0 +1,122 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/uk/dashboard.php b/resources/lang/uk/dashboard.php index 0078d64f5760..335952b7c96e 100644 --- a/resources/lang/uk/dashboard.php +++ b/resources/lang/uk/dashboard.php @@ -11,7 +11,8 @@ return [ - 'dashboard' => 'Dashboard', + 'dashboard' => 'Dashboard', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ @@ -20,6 +21,7 @@ 'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported :count incidents.', 'incident-create-template' => 'Create Template', 'incident-templates' => 'Incident Templates', + 'updates' => '{0} Zero Updates|One Update|:count Updates', 'add' => [ 'title' => 'Report an incident', 'success' => 'Incident added.', @@ -34,6 +36,10 @@ 'success' => 'The incident has been deleted and will not show on your status page.', 'failure' => 'The incident could not be deleted, please try again.', ], + 'update' => [ + 'title' => 'Create new incident update', + 'subtitle' => 'Add an update to :incident', + ], // Incident templates 'templates' => [ @@ -86,12 +92,12 @@ 'title' => 'Add a component', 'message' => 'You should add a component.', 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ 'title' => 'Edit a component', 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ 'success' => 'The component has been deleted!', @@ -197,6 +203,9 @@ 'analytics' => [ 'analytics' => 'Analytics', ], + 'log' => [ + 'log' => 'Log', + ], 'localization' => [ 'localization' => 'Localization', ], @@ -205,6 +214,14 @@ 'header' => 'Custom Header HTML', 'footer' => 'Custom Footer HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => 'Security', 'two-factor' => 'Users without two-factor authentication', @@ -233,7 +250,7 @@ 'login' => [ 'login' => 'Login', 'logged_in' => 'You\'re logged in.', - 'welcome' => 'Welcome Back!', + 'welcome' => 'Welcome back!', 'two-factor' => 'Please enter your token.', ], @@ -254,21 +271,21 @@ 'support' => 'Support Cachet', 'support_subtitle' => 'Check out our Patreon page!', 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'news_subtitle' => 'Get the latest update', ], // Welcome modal 'welcome' => [ - 'welcome' => 'Welcome to your new status page!', - 'message' => 'Your status page is almost ready! You might want to configure these extra settings', - 'close' => 'Take me straight to my dashboard', + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', 'steps' => [ - 'component' => 'Create components', - 'incident' => 'Create incidents', - 'customize' => 'Customize', - 'team' => 'Add users', - 'api' => 'Generate API token', - 'two-factor' => 'Two Factor Authentication', + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', ], ], diff --git a/resources/lang/uk/forms.php b/resources/lang/uk/forms.php index 84db8f651201..91ebe7c550d6 100644 --- a/resources/lang/uk/forms.php +++ b/resources/lang/uk/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Ім’я', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/vi-VN/cachet.php b/resources/lang/vi-VN/cachet.php new file mode 100644 index 000000000000..71eaee2c7428 --- /dev/null +++ b/resources/lang/vi-VN/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'Last updated :timestamp', + 'status' => [ + 0 => 'Unknown', + 1 => 'Hoạt động', + 2 => 'Performance Issues', + 3 => 'Partial Outage', + 4 => 'Major Outage', + ], + 'group' => [ + 'other' => 'Other Components', + ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', + ], + + // Incidents + 'incidents' => [ + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ', scheduled :timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ + 1 => 'Investigating', + 2 => 'Identified', + 3 => 'Watching', + 4 => 'Fixed', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + + // Service Status + 'service' => [ + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', + ], + + 'api' => [ + 'regenerate' => 'Regenerate API Key', + 'revoke' => 'Revoke API Key', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'Last Hour', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => 'Notifications', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', + ], + 'email' => [ + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', + ], + ], + + 'signup' => [ + 'title' => 'Sign Up', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Mật khẩu', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', + ], + + 'system' => [ + 'update' => 'There is a newer version of Cachet available. You can learn how to update here!', + ], + + // Modal + 'modal' => [ + 'close' => 'Close', + 'subscribe' => [ + 'title' => 'Subscribe to component updates', + 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', + ], + ], + + // Other + 'home' => 'Home', + 'powered_by' => 'Powered by Cachet.', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', + 'feed' => 'Status Feed', + +]; diff --git a/resources/lang/vi-VN/dashboard.php b/resources/lang/vi-VN/dashboard.php new file mode 100644 index 000000000000..270a50b1a372 --- /dev/null +++ b/resources/lang/vi-VN/dashboard.php @@ -0,0 +1,304 @@ + 'Bảng điều khiển', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', + + // Incidents + 'incidents' => [ + 'title' => 'Incidents & Maintenance', + 'incidents' => 'Incidents', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', + 'incident-create-template' => 'Create Template', + 'incident-templates' => 'Incident Templates', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', + 'add' => [ + 'title' => 'Report an incident', + 'success' => 'Incident added.', + 'failure' => 'There was an error adding the incident, please try again.', + ], + 'edit' => [ + 'title' => 'Edit an incident', + 'success' => 'Incident updated.', + 'failure' => 'There was an error editing the incident, please try again.', + ], + 'delete' => [ + 'success' => 'The incident has been deleted and will not show on your status page.', + 'failure' => 'The incident could not be deleted, please try again.', + ], + + // Incident templates + 'templates' => [ + 'title' => 'Incident Templates', + 'add' => [ + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', + 'success' => 'Your new incident template has been created.', + 'failure' => 'Something went wrong with the incident template.', + ], + 'edit' => [ + 'title' => 'Edit Template', + 'success' => 'The incident template has been updated.', + 'failure' => 'Something went wrong updating the incident template', + ], + 'delete' => [ + 'success' => 'The incident template has been deleted.', + 'failure' => 'The incident template could not be deleted, please try again.', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', + 'scheduled_at' => 'Scheduled at :timestamp', + 'add' => [ + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', + ], + 'edit' => [ + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', + ], + 'delete' => [ + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', + ], + ], + + // Components + 'components' => [ + 'components' => 'Components', + 'component_statuses' => 'Component Statuses', + 'listed_group' => 'Grouped under :name', + 'add' => [ + 'title' => 'Add a component', + 'message' => 'You should add a component.', + 'success' => 'Component created.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component', + 'success' => 'Component updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'The component has been deleted!', + 'failure' => 'The component could not be deleted, please try again.', + ], + + // Component groups + 'groups' => [ + 'groups' => 'Component group|Component groups', + 'no_components' => 'You should add a component group.', + 'add' => [ + 'title' => 'Add a component group', + 'success' => 'Component group added.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a component group', + 'success' => 'Component group updated.', + 'failure' => 'Something went wrong with the component group, please try again.', + ], + 'delete' => [ + 'success' => 'Component group has been deleted!', + 'failure' => 'The component group could not be deleted, please try again.', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'Metrics', + 'add' => [ + 'title' => 'Create a metric', + 'message' => 'You should add a metric.', + 'success' => 'Metric created.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'edit' => [ + 'title' => 'Edit a metric', + 'success' => 'Metric updated.', + 'failure' => 'Something went wrong with the metric, please try again.', + ], + 'delete' => [ + 'success' => 'The metric has been deleted and will no longer display on your status page.', + 'failure' => 'The metric could not be deleted, please try again.', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', + 'failure' => 'Something went wrong adding the subscriber, please try again.', + 'help' => 'Enter each subscriber on a new line.', + ], + 'edit' => [ + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', + 'failure' => 'Something went wrong editing the subscriber, please try again.', + ], + ], + + // Team + 'team' => [ + 'team' => 'Team', + 'member' => 'Member', + 'profile' => 'Profile', + 'description' => 'Team Members will be able to add, modify & edit components and incidents.', + 'add' => [ + 'title' => 'Add a new team member', + 'success' => 'Team member added.', + 'failure' => 'The team member could not be added, please try again.', + ], + 'edit' => [ + 'title' => 'Update profile', + 'success' => 'Profile updated.', + 'failure' => 'Something went wrong updating the profile, please try again.', + ], + 'delete' => [ + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', + 'failure' => 'The team member could not be added, please try again.', + ], + 'invite' => [ + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', + 'failure' => 'The invite could not be sent, please try again.', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'Settings', + 'app-setup' => [ + 'app-setup' => 'Application Setup', + 'images-only' => 'Only images may be uploaded.', + 'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size', + ], + 'analytics' => [ + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', + ], + 'localization' => [ + 'localization' => 'Localization', + ], + 'customization' => [ + 'customization' => 'Customization', + 'header' => 'Custom Header HTML', + 'footer' => 'Custom Footer HTML', + ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], + 'security' => [ + 'security' => 'Security', + 'two-factor' => 'Users without two-factor authentication', + ], + 'stylesheet' => [ + 'stylesheet' => 'Stylesheet', + ], + 'theme' => [ + 'theme' => 'Theme', + ], + 'edit' => [ + 'success' => 'Settings saved.', + 'failure' => 'Settings could not be saved.', + ], + 'credits' => [ + 'credits' => 'Credits', + 'contributors' => 'Contributors', + 'license' => 'Cachet is a BSD-3-licensed open source project, released by Alt Three Services Limited.', + 'backers-title' => 'Backers & Sponsors', + 'backers' => 'If you\'d like to support future development, check out the Cachet Patreon campaign.', + 'thank-you' => 'Thank you to each and every one of the :count contributors.', + ], + ], + + // Login + 'login' => [ + 'login' => 'Login', + 'logged_in' => 'You\'re logged in.', + 'welcome' => 'Welcome back!', + 'two-factor' => 'Please enter your token.', + ], + + // Sidebar footer + 'help' => 'Help', + 'status_page' => 'Status Page', + 'logout' => 'Logout', + + // Notifications + 'notifications' => [ + 'notifications' => 'Notifications', + 'awesome' => 'Awesome.', + 'whoops' => 'Whoops.', + ], + + // Widgets + 'widgets' => [ + 'support' => 'Support Cachet', + 'support_subtitle' => 'Check out our Patreon page!', + 'news' => 'Latest News', + 'news_subtitle' => 'Get the latest update', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'Welcome to your new status page, :username!', + 'message' => 'You\'re almost ready but you might want to configure these extra settings first...', + 'close' => 'I\'m good thanks!', + 'steps' => [ + 'component' => 'Add your components', + 'incident' => 'Create an incident', + 'customize' => 'Customize your page', + 'team' => 'Add your team', + 'api' => 'Generate an API token', + 'two-factor' => 'Setup Two Factor Authentication', + ], + ], + +]; diff --git a/resources/lang/vi-VN/forms.php b/resources/lang/vi-VN/forms.php new file mode 100644 index 000000000000..bb757767ef87 --- /dev/null +++ b/resources/lang/vi-VN/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Mật khẩu', + 'site_name' => 'Site Name', + 'site_domain' => 'Site Domain', + 'site_timezone' => 'Select your timezone', + 'site_locale' => 'Select your language', + 'enable_google2fa' => 'Enable Google Two Factor Authentication', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', + ], + + // Login form fields + 'login' => [ + 'login' => 'Username or Email', + 'email' => 'Email', + 'password' => 'Mật khẩu', + '2fauth' => 'Authentication Code', + 'invalid' => 'Invalid username or password', + 'invalid-token' => 'Invalid token', + 'cookies' => 'You must enable cookies to login.', + 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'Name', + 'status' => 'Status', + 'component' => 'Component', + 'component_status' => 'Component Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', + 'visibility' => 'Incident Visibility', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => 'Name', + 'status' => 'Status', + 'message' => 'Message', + 'message-help' => 'You may also use Markdown.', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => 'Name', + 'template' => 'Template', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'Name', + 'status' => 'Status', + 'group' => 'Group', + 'description' => 'Description', + 'link' => 'Link', + 'tags' => 'Tags', + 'tags-help' => 'Comma separated.', + 'enabled' => 'Component enabled?', + + 'groups' => [ + 'name' => 'Name', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'Name', + 'description' => 'Description', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => 'Group', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'Name', + 'suffix' => 'Suffix', + 'description' => 'Description', + 'description-help' => 'You may also use Markdown.', + 'display-chart' => 'Display chart on status page?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => 'Sum', + 'type_avg' => 'Average', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', + + 'points' => [ + 'value' => 'Value', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'Site Name', + 'site-url' => 'Site URL', + 'display-graphs' => 'Display graphs on status page?', + 'about-this-page' => 'About this page', + 'days-of-incidents' => 'How many days of incidents to show?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', + ], + 'analytics' => [ + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', + ], + 'localization' => [ + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', + ], + 'security' => [ + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', + ], + 'stylesheet' => [ + 'custom-css' => 'Custom Stylesheet', + ], + 'theme' => [ + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', + 'reds' => 'Red (used for errors)', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', + ], + ], + + 'user' => [ + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Mật khẩu', + 'api-token' => 'API Token', + 'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', + 'levels' => [ + 'admin' => 'Admin', + 'user' => 'User', + ], + '2fa' => [ + 'help' => 'Enabling two factor authentication increases security of your account. You will need to download Google Authenticator or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.', + ], + 'team' => [ + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', + ], + ], + + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + + // Buttons + 'add' => 'Add', + 'save' => 'Save', + 'update' => 'Update', + 'create' => 'Create', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'submit' => 'Submit', + 'cancel' => 'Cancel', + 'remove' => 'Remove', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', + + // Other + 'optional' => '* Optional', +]; diff --git a/resources/lang/vi-VN/notifications.php b/resources/lang/vi-VN/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/vi-VN/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/vi-VN/pagination.php b/resources/lang/vi-VN/pagination.php new file mode 100644 index 000000000000..0ee724cf086b --- /dev/null +++ b/resources/lang/vi-VN/pagination.php @@ -0,0 +1,28 @@ + 'Previous', + 'next' => 'Next', + +]; diff --git a/resources/lang/vi-VN/setup.php b/resources/lang/vi-VN/setup.php new file mode 100644 index 000000000000..2293c30db520 --- /dev/null +++ b/resources/lang/vi-VN/setup.php @@ -0,0 +1,23 @@ + 'Cài đặt', + 'title' => 'Install Cachet', + 'service_details' => 'Service Details', + 'env_setup' => 'Environment Setup', + 'status_page_setup' => 'Status Page Setup', + 'show_support' => 'Show support for Cachet?', + 'admin_account' => 'Administrator Account', + 'complete_setup' => 'Complete Setup', + 'completed' => 'Cachet has been configured successfully!', + 'finish_setup' => 'Go to dashboard', +]; diff --git a/resources/lang/vi-VN/validation.php b/resources/lang/vi-VN/validation.php new file mode 100644 index 000000000000..c29028ebe0f6 --- /dev/null +++ b/resources/lang/vi-VN/validation.php @@ -0,0 +1,122 @@ + ':attribute phải được chấp nhận.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'filled' => 'The :attribute field is required.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/vi/forms.php b/resources/lang/vi/forms.php index 602157090d0b..d9848d2a9f9e 100644 --- a/resources/lang/vi/forms.php +++ b/resources/lang/vi/forms.php @@ -53,7 +53,7 @@ 'templates' => [ 'name' => 'Tên', 'template' => 'Template', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], diff --git a/resources/lang/zh-CN/cachet.php b/resources/lang/zh-CN/cachet.php index 2f14285a5e99..47d5e6e4f99a 100644 --- a/resources/lang/zh-CN/cachet.php +++ b/resources/lang/zh-CN/cachet.php @@ -12,28 +12,31 @@ return [ // Components 'components' => [ - 'last_updated' => '最后更新 :timestamp', + 'last_updated' => '最后更新于 :timestamp', 'status' => [ + 0 => '未知', 1 => '运行正常', - 2 => '负载较高', - 3 => 'Partial Outage', - 4 => 'Major Outage', + 2 => '性能问题', + 3 => '部分中断', + 4 => '严重中断', ], 'group' => [ 'other' => '其他组件', ], + 'select_all' => '全选', + 'deselect_all' => '反选所有', ], // Incidents 'incidents' => [ - 'none' => '无故障报告', - 'past' => '历史状态', - 'previous_week' => '前一周', - 'next_week' => '后一周', - 'scheduled' => 'Scheduled Maintenance', - 'scheduled_at' => ', scheduled :timestamp', - 'status' => [ - 0 => '计划中', // TODO: Hopefully remove this. + 'none' => '无故障报告', + 'past' => '历史状态', + 'stickied' => '已关注的故障', + 'scheduled' => '计划维护', + 'scheduled_at' => ',计划于 :timestamp', + 'posted' => '在 :timestamp 由 :username 发布', + 'posted_at' => '发布于 :timestamp', + 'status' => [ 1 => '确认中', 2 => '修复中', 3 => '已更新', @@ -41,15 +44,24 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => '即将进行', + 1 => '正在进行', + 2 => '已完成', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] 系统工作正常|[2,Inf] 所有系统工作正常', - 'bad' => '[0,1] 一个系统出现了问题|[2,Inf] 一些系统出现了问题', - 'major' => '[0,1] 一个系统出现重大故障|[2,Inf] 一些系统出现重大故障', + 'good' => '[0,1] 系统工作正常|[2,*] 所有系统工作正常', + 'bad' => '[0,1] 系统出现了问题|[2,*] 一些系统出现了问题', + 'major' => '[0,1] 系统出现重大故障|[2,*] 一些系统出现重大故障', ], 'api' => [ - 'regenerate' => 'Regenerate API Key', + 'regenerate' => '重新生成 API 密钥', 'revoke' => '注销 API 密钥', ], @@ -65,55 +77,37 @@ // Subscriber 'subscriber' => [ - 'subscribe' => '订阅最新的更新。', - 'button' => 'Subscribe', - 'manage' => [ - 'no_subscriptions' => '您当前已订阅所有更新。', - 'my_subscriptions' => '您当前已订阅下列更新', + 'subscribe' => '关注状态更改和更新', + 'unsubscribe' => '取消订阅', + 'button' => '订阅', + 'manage_subscription' => '管理订阅', + 'manage' => [ + 'notifications' => '通知', + 'notifications_for' => '管理通知给', + 'no_subscriptions' => '您当前已订阅所有更新。', + 'update_subscription' => '更新订阅', + 'my_subscriptions' => '您当前已订阅下列更新', + 'manage_at_link' => '在 :link 管理你的订阅', ], 'email' => [ - 'subscribe' => 'Subscribe to email updates.', - 'subscribed' => '您已经订阅电子邮件通知,请检查您的电子邮件,确认您的订阅。', - 'verified' => 'Your email subscription has been confirmed. Thank you!', - 'manage' => '管理您的订阅', - 'unsubscribe' => '取消电子邮件订阅。', - 'unsubscribed' => 'Your email subscription has been cancelled.', - 'failure' => 'Something went wrong with the subscription.', - 'already-subscribed' => '无法订阅,因为这个邮箱地址 ( :email ) 已经在订阅列表中了。', - 'verify' => [ - 'text' => "请确认您的 :app_name 状态更新邮件订阅。\n:link", - 'html' => '

          请确认您的 :app_name 状态更新邮件订阅。

          ', - 'button' => '确认订阅', - ], - 'maintenance' => [ - 'subject' => '[计划维护] :name', - ], - 'incident' => [ - 'subject' => '[新事件] :status: :name', - ], - 'component' => [ - 'subject' => '组件状态更新', - 'text' => '组件 :component_name 的状态已经更新。:component_name 现在的状态为 :component_human_status。\n谢谢, :app_name', - 'html' => '

          组件 :component_name 有状态变更。:component_name 当前 :component_human_status。

          谢谢, :app_name

          ', - 'tooltip-title' => '订阅来自 component_name 的更新', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "您已被邀请加入 :app_name 团队的状态页, 请点击以下链接进行注册。\n:link\n谢谢, :app_name", - 'html' => '

          您已被邀请加入 :app_name 团队的状态页, 请点击以下链接进行注册。

          :link

          谢谢, :app_name

          ', - ], + 'manage_subscription' => '我们已经给您发送了一封电子邮件,请点击链接来管理您的订阅', + 'subscribe' => '订阅电子邮件更新。', + 'subscribed' => '您已经订阅电子邮件通知,请检查您的电子邮件进行确认。', + 'updated-subscribe' => '您已成功更新您的订阅。', + 'verified' => '您的电子邮件订阅已确认。谢谢!', + 'manage' => '管理您的订阅', + 'unsubscribe' => '取消电子邮件订阅。', + 'unsubscribed' => '您的电子邮件订阅已被取消。', + 'failure' => '邮件订阅失败。', + 'already-subscribed' => '无法订阅,因为这个邮箱地址 ( :email ) 已经在订阅列表中了。', ], ], 'signup' => [ 'title' => '注册', - 'username' => 'Username', + 'username' => '用户名', 'email' => '电子邮箱', - 'password' => 'Password', + 'password' => '密码', 'success' => '您的账号已注册成功。', 'failure' => '注册失败。', ], @@ -128,17 +122,27 @@ 'subscribe' => [ 'title' => '订阅组件状态更新', 'body' => '请输入您用于接收订阅该组件更新通知的电子邮箱。如果您已经订阅,您应已收到关于这个组件的一系列电子邮件。', - 'button' => 'Subscribe', + 'button' => '订阅', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => '有关于发生在 :date 的 :name 事件的细节与更新', + 'schedule' => '有关于计划维护时段 :name ,开始于 :startDate,的细节说明', + 'subscribe' => '订阅 :app 以接收故障更新和定期维护信息', + 'overview' => '始终保持对 :app 服务状态的关注。', ], ], // Other 'home' => '主屏幕', - 'description' => '始终保持对 :app 服务状态的关注。', 'powered_by' => '由 Cachet 驱动。', - 'about_this_site' => '关于我们', + 'timezone' => '时间将以 :timezone 时区显示。', + 'about_this_site' => '关于本站', 'rss-feed' => 'RSS', 'atom-feed' => 'Atom', - 'feed' => 'Status Feed', + 'feed' => '状态源', ]; diff --git a/resources/lang/zh-CN/dashboard.php b/resources/lang/zh-CN/dashboard.php index f675b48bdf97..7a8007d2ab5f 100644 --- a/resources/lang/zh-CN/dashboard.php +++ b/resources/lang/zh-CN/dashboard.php @@ -11,15 +11,31 @@ return [ - 'dashboard' => '控制台', + 'dashboard' => '控制台', + 'writeable_settings' => 'Cachet 设置目录无法写入。请确认 ./bootstrap/cachet 文件夹可被服务器写入。', // Incidents 'incidents' => [ 'title' => '故障和维护计划', - 'incidents' => 'Incidents', - 'logged' => '{0} 当前没有故障信息|您已经记录了一个故障|您已经报告了 :count 个故障', - 'incident-create-template' => 'Create Template', + 'incidents' => '事件', + 'logged' => '{0} 当前没有故障信息|[1]您已经记录了一个故障.|[2,*]您已经报告了 :count 个故障', + 'incident-create-template' => '创建模板', 'incident-templates' => '故障模板', + 'updates' => [ + 'title' => '关于 :incident 事件的更新', + 'count' => '{0} 无更新|[1] 一个更新|[2] 2个更新|[3,*] 多个更新', + 'add' => [ + 'title' => '添加故障更新', + 'success' => '您已创建新的故障更新。', + 'failure' => '创建故障更新时出现了问题。', + ], + 'edit' => [ + 'title' => '编辑故障更新', + 'success' => '成功更新故障。', + 'failure' => '修改故障更新时出现问题', + ], + ], + 'reported_by' => '在 :timestamp 由 :user 报告', 'add' => [ 'title' => '添加故障', 'success' => '故障已添加', @@ -37,10 +53,10 @@ // Incident templates 'templates' => [ - 'title' => '事件模板', + 'title' => '故障模板', 'add' => [ 'title' => '添加故障模板', - 'message' => '你应该增加一个故障模板', + 'message' => '创建你的第一个故障模板', 'success' => '成功创建新的故障模板。', 'failure' => '创建模板失败。', ], @@ -59,8 +75,8 @@ // Incident Maintenance 'schedule' => [ 'schedule' => '计划维护', - 'logged' => '{0} 现在没有维护计划,好样的。|你已经记录下 1 个维护计划|你已经报告了 :count 个维护计划', - 'scheduled_at' => 'Scheduled at :timestamp', + 'logged' => '{0}目前没有任何维护信息,很棒!|[1]你已经记录下1个维护计划.|[2,*]你已经报告了 :count 个维护计划.', + 'scheduled_at' => '计划在 :timestamp', 'add' => [ 'title' => '添加维护计划', 'success' => '维护计划已添加。', @@ -79,9 +95,9 @@ // Components 'components' => [ - 'components' => 'Components', - 'component_statuses' => 'Component Statuses', - 'listed_group' => 'Grouped under :name', + 'components' => '组件', + 'component_statuses' => '组件状态', + 'listed_group' => '根据 :name 分组', 'add' => [ 'title' => '添加组件', 'message' => '没有组件,马上添加一个吧', @@ -105,12 +121,12 @@ 'add' => [ 'title' => '添加组件分组', 'success' => '分组已添加。', - 'failure' => '分组更新失败,请重试。', + 'failure' => '组件更新失败,请稍后再试。', ], 'edit' => [ 'title' => '编辑组件分组', 'success' => '分组已更新。', - 'failure' => '分组更新失败,请重试。', + 'failure' => '组件更新失败,请稍后再试。', ], 'delete' => [ 'success' => '组建分组已删除。', @@ -121,9 +137,9 @@ // Metrics 'metrics' => [ - 'metrics' => 'Metrics', + 'metrics' => '图表', 'add' => [ - 'title' => '添加图表', + 'title' => '创建图表', 'message' => '你应该添加一个图表。', 'success' => '图表已创建。', 'failure' => '添加图表时出错了,请再试一次。', @@ -140,13 +156,15 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => '通知', - 'description' => '有新增故障或有组件更新时,订阅者将会收到邮件提醒。', - 'verified' => '已认证', - 'not_verified' => '未认证', - 'subscriber' => ':email, 订阅于 :date', - 'no_subscriptions' => '已订阅全部更新', - 'add' => [ + 'subscribers' => '通知', + 'description' => '有新增故障或有组件更新时,订阅者将会收到邮件提醒。', + 'description_disabled' => '要使用此功能,您需要允许通知订阅。', + 'verified' => '已认证', + 'not_verified' => '未认证', + 'subscriber' => ':email, 订阅于 :date', + 'no_subscriptions' => '已订阅全部更新', + 'global' => '全局订阅', + 'add' => [ 'title' => '添加邮件订阅', 'success' => '邮件订阅已添加成功。', 'failure' => '无法添加订阅者,请稍后再试。', @@ -161,9 +179,9 @@ // Team 'team' => [ - 'team' => 'Team', - 'member' => 'Member', - 'profile' => 'Profile', + 'team' => '团队', + 'member' => '成员', + 'profile' => '用户信息', 'description' => '团队成员可维护组件和故障信息。', 'add' => [ 'title' => '添加团队成员', @@ -188,39 +206,50 @@ // Settings 'settings' => [ - 'settings' => 'Settings', + 'settings' => '系统设置', 'app-setup' => [ - 'app-setup' => '网站设置', - 'images-only' => 'Only images may be uploaded.', + 'app-setup' => '常规选项', + 'images-only' => '只能上传图像。', 'too-big' => '您上传的文件太大了。上传的图像大小应小于:size', ], 'analytics' => [ 'analytics' => '第三方统计', ], + 'log' => [ + 'log' => '日志', + ], 'localization' => [ - 'localization' => '本地化', + 'localization' => '时间和语言', ], 'customization' => [ - 'customization' => '自定义', + 'customization' => '个性定制', 'header' => '自定义页眉 HTML', 'footer' => '自定义页脚 HTML', ], + 'mail' => [ + 'mail' => '邮件', + 'test' => '测试', + 'email' => [ + 'subject' => 'Cachet 通知测试', + 'body' => '这是来自 Cachet 的测试通知邮件。', + ], + ], 'security' => [ 'security' => '安全设置', - 'two-factor' => 'Users without two-factor authentication', + 'two-factor' => '没有启用双因素身份验证的用户', ], 'stylesheet' => [ - 'stylesheet' => '自定义样式', + 'stylesheet' => '附加样式', ], 'theme' => [ - 'theme' => 'Theme', + 'theme' => '主题外观', ], 'edit' => [ - 'success' => 'Settings saved.', - 'failure' => 'Settings could not be saved.', + 'success' => '设置已保存。', + 'failure' => '无法保存设置。', ], 'credits' => [ - 'credits' => '团队', + 'credits' => '关于开发团队', 'contributors' => '贡献者', 'license' => 'Cachet 是 Alt Three Services Limited 开发的一个开源项目,使用 BSD-3 授权。', 'backers-title' => '后勤力量和赞助商', @@ -233,19 +262,19 @@ 'login' => [ 'login' => '登录', 'logged_in' => '您已登录', - 'welcome' => 'Welcome Back!', - 'two-factor' => 'Please enter your token.', + 'welcome' => '欢迎回来!', + 'two-factor' => '请输入您的双重验证码。', ], // Sidebar footer - 'help' => 'Help', + 'help' => '帮助', 'status_page' => '状态页', 'logout' => '退出', // Notifications 'notifications' => [ - 'notifications' => 'Notifications', - 'awesome' => 'Awesome.', + 'notifications' => '通知', + 'awesome' => '太棒了!', 'whoops' => '抱歉,', ], @@ -260,13 +289,13 @@ // Welcome modal 'welcome' => [ 'welcome' => '欢迎来到你的状态页!', - 'message' => 'Your status page is almost ready! You might want to configure these extra settings', + 'message' => '您的状态页面即将准备好了!您可能想要配置这些额外的设置', 'close' => '带我直接进入控制台', 'steps' => [ 'component' => '添加组件', 'incident' => '添加故障', 'customize' => '主题设置', - 'team' => 'Add users', + 'team' => '添加用户', 'api' => '生成 API Token', 'two-factor' => '双因素身份验证', ], diff --git a/resources/lang/zh-CN/forms.php b/resources/lang/zh-CN/forms.php index 34a24196b2ce..1b74f77fa9e0 100644 --- a/resources/lang/zh-CN/forms.php +++ b/resources/lang/zh-CN/forms.php @@ -15,14 +15,20 @@ 'setup' => [ 'email' => '电子邮箱', 'username' => '用户名', - 'password' => 'Password', - 'site_name' => '站点名称', + 'password' => '密码', + 'site_name' => '站点标题', 'site_domain' => '域名', - 'site_timezone' => 'Select your timezone', - 'site_locale' => 'Select your language', - 'enable_google2fa' => 'Enable Google Two Factor Authentication', - 'cache_driver' => 'Cache Driver', - 'session_driver' => 'Session Driver', + 'site_timezone' => '选择时区', + 'site_locale' => '选择您的语言', + 'enable_google2fa' => '启用谷歌两步身份验证', + 'cache_driver' => '缓存驱动', + 'queue_driver' => '队列存储方式', + 'session_driver' => '会话数据存储驱动', + 'mail_driver' => '邮件发送方式', + 'mail_host' => '电子邮件服务器', + 'mail_address' => '发件人', + 'mail_username' => '邮箱用户名', + 'mail_password' => '邮箱密码', ], // Login form fields @@ -30,112 +36,162 @@ 'login' => '用户名或者邮箱地址', 'email' => '电子邮箱', 'password' => '密码', - '2fauth' => 'Authentication Code', + '2fauth' => '两步验证代码', 'invalid' => '无效的用户名或密码', - 'invalid-token' => 'Invalid token', - 'cookies' => 'You must enable cookies to login.', + 'invalid-token' => '无效的代码。', + 'cookies' => '您必须启用 cookies 来进行登录。', 'rate-limit' => '已超出登陆次数限制。', + 'remember_me' => '记住我', ], // Incidents form fields 'incidents' => [ 'name' => '名称', - 'status' => 'Status', - 'component' => 'Component', + 'status' => '状态', + 'component' => '组件', + 'component_status' => '组件状态', 'message' => '描述', - 'message-help' => 'You may also use Markdown.', - 'scheduled_at' => 'When to schedule the maintenance for?', - 'incident_time' => '这次故障是什么时候发生的?', + 'message-help' => '您可以使用Markdown语言。', + 'occurred_at' => '这次故障是什么时候发生的?', 'notify_subscribers' => '通知订阅者', + 'notify_disabled' => '由于计划维护,关于此事件或此部件的通知将被静默处理。', 'visibility' => '故障的可见性', - 'public' => 'Viewable by public', + 'stick_status' => '关注故障', + 'stickied' => '已关注', + 'not_stickied' => '未关注', + 'public' => '公共可见', 'logged_in_only' => '仅登录用户可见', 'templates' => [ - 'name' => '事件名', - 'template' => 'Template', - 'twig' => '故障模板可以使用 Twig 模板语言', + 'name' => '名称', + 'template' => '模板', + 'twig' => '故障模板可以使用 Twig 模板语言', + ], + ], + + 'schedules' => [ + 'name' => '名称', + 'status' => '状态', + 'message' => '描述', + 'message-help' => '您可以使用Markdown语言。', + 'scheduled_at' => '这次维护将在何时进行?', + 'completed_at' => '这次维护将在何时结束?', + 'templates' => [ + 'name' => '名称', + 'template' => '模板', + 'twig' => '故障模板可以使用 Twig 模板语言', ], ], // Components form fields 'components' => [ - 'name' => '组件名', + 'name' => '名称', 'status' => '状态', 'group' => '组件分组', 'description' => '组件描述', - 'link' => 'Link', - 'tags' => 'Tags', - 'tags-help' => 'Comma separated.', + 'link' => '链接', + 'tags' => '标签', + 'tags-help' => '以逗号分隔。', 'enabled' => '启用', 'groups' => [ - 'name' => '组名', - 'collapsing' => '选择分组可见', - 'visible' => '总是展开', - 'collapsed' => '默认折叠', - 'collapsed_incident' => '折叠分组,但当有故障时展开', + 'name' => '名称', + 'collapsing' => '展开/折叠选项', + 'visible' => '总是展开', + 'collapsed' => '默认折叠', + 'collapsed_incident' => '折叠分组,但当有故障时展开', + 'visibility' => '可见性', + 'visibility_public' => '对所有人可见', + 'visibility_authenticated' => '只对已登录用户可见', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => '名称', + 'description' => '组件描述', + 'start_at' => '计划开始时间', + 'timezone' => '时区', + 'schedule_frequency' => '计划间隔 (秒)', + 'completion_latency' => '延误时长 (秒)', + 'group' => '组件分组', + 'active' => '活跃?', + 'groups' => [ + 'name' => '组名', ], ], // Metric form fields 'metrics' => [ - 'name' => '图表名', - 'suffix' => 'Suffix', - 'description' => '描述信息', - 'description-help' => '您可以使用Markdown语言。', - 'display-chart' => 'Display chart on status page?', - 'default-value' => '默认值', - 'calc_type' => '图表计算方法', - 'type_sum' => 'Sum', - 'type_avg' => 'Average', - 'places' => '小数点位数', - 'default_view' => '默认视图', - 'threshold' => '每个度量点之间应当间隔多少分钟?', + 'name' => '名称', + 'suffix' => '后缀', + 'description' => '组件描述', + 'description-help' => '您可以使用Markdown语言。', + 'display-chart' => '是否在状态页上显示图表?', + 'default-value' => '默认值', + 'calc_type' => '图表计算方法', + 'type_sum' => '求和', + 'type_avg' => '求平均', + 'places' => '小数点位数', + 'default_view' => '默认视图', + 'threshold' => '每个度量点之间应当间隔多少分钟?', + 'visibility' => '可见性', + 'visibility_authenticated' => '只对已登录用户可见', + 'visibility_public' => '对所有人可见', + 'visibility_hidden' => '总是隐藏', 'points' => [ - 'value' => 'Value', + 'value' => '数值', ], ], // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => '站点名称', - 'site-url' => '网址', - 'display-graphs' => 'Display graphs on status page?', - 'about-this-page' => '关于本页', - 'days-of-incidents' => '显示多少天的故障?', - 'banner' => '横幅图像', - 'banner-help' => "It's recommended that you upload files no bigger than 930px wide .", - 'subscribers' => 'Allow people to signup to email notifications?', - 'automatic_localization' => '根据访客的系统语言自动本地化状态页面?', + 'site-name' => '站点标题', + 'site-url' => '站点地址(URL)', + 'display-graphs' => '在状态页上显示图表', + 'about-this-page' => '关于本页', + 'days-of-incidents' => '每页最多显示故障天数', + 'time_before_refresh' => '状态页刷新速度(秒)', + 'major_outage_rate' => '重大故障阈值 (%)', + 'banner' => '横幅图像', + 'banner-help' => '建议上传文件宽度不大于 930 像素。', + 'subscribers' => '允许用户订阅邮件通知', + 'suppress_notifications_in_maintenance' => '当计划维护发生时静默处理事件通知?', + 'skip_subscriber_verification' => '是否跳过用户邮件验证?(小心,这可能会被滥用)', + 'automatic_localization' => '根据访客的系统语言自动本地化状态页面', + 'enable_external_dependencies' => '启用第三方服务 (Google Fonts, Tracker 等)', + 'show_timezone' => '显示状态页所在的时区', + 'only_disrupted_days' => '仅显示有故障的日期', ], 'analytics' => [ 'analytics_google' => 'Google Analytics 代码', 'analytics_gosquared' => 'GoSquared Analytics 代码', - 'analytics_piwik_url' => '输入Piwik实例的URL(不含http(s)://)', + 'analytics_piwik_url' => 'Piwik 实例的 URL', 'analytics_piwik_siteid' => 'Piwik 的站点 id', ], 'localization' => [ 'site-timezone' => '系统时区', 'site-locale' => '系统语言', 'date-format' => '日期格式', - 'incident-date-format' => '故障的时间显示格式', + 'incident-date-format' => '故障日期和时间格式', ], 'security' => [ - 'allowed-domains' => '允许的域', - 'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.', + 'allowed-domains' => '允许的 CORS 域', + 'allowed-domains-help' => '以逗号分隔。默认情况下,API跨域请求将自动允许以上已设置的域。', + 'always-authenticate' => '始终验证', + 'always-authenticate-help' => '需要登录才能查看 Cachet 页面', ], 'stylesheet' => [ 'custom-css' => '自定义 CSS 样式表', ], 'theme' => [ - 'background-color' => '背景色', + 'background-color' => '网站背景', 'background-fills' => '区块填充色(组件, 故障, 页尾)', - 'banner-background-color' => '横幅背景色', - 'banner-padding' => '横幅Padding值', - 'fullwidth-banner' => '启用全宽横幅?', + 'banner-background-color' => '横幅背景', + 'banner-padding' => '横幅图像边距', + 'fullwidth-banner' => '是否启用full width banner?', 'text-color' => '文字颜色', 'dashboard-login' => '在页尾显示 管理后台 的入口?', 'reds' => '红 (用于错误类提示)', @@ -149,10 +205,10 @@ ], 'user' => [ - 'username' => 'Username', + 'username' => '用户名', 'email' => '电子邮箱', 'password' => '密码', - 'api-token' => 'API Token', + 'api-token' => 'API 令牌', 'api-token-help' => '重新生成您的 API Token将阻止现有的应用程序访问Cachet。', 'gravatar' => '修改您的 Gravatar 头像。', 'user_level' => '用户等级', @@ -165,23 +221,33 @@ ], 'team' => [ 'description' => '请输入您要邀请的团队成员的邮件地址:', - 'email' => 'Email #:id', + 'email' => '团队成员的电子邮箱地址', ], ], + 'general' => [ + 'timezone' => '选择时区', + ], + + 'seo' => [ + 'title' => 'SEO 标题', + 'description' => 'SEO 描述', + ], + // Buttons - 'add' => 'Add', - 'save' => 'Save', - 'update' => 'Update', - 'create' => 'Create', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'submit' => 'Submit', - 'cancel' => 'Cancel', - 'remove' => 'Remove', - 'invite' => '邀请', - 'signup' => '注册', + 'add' => '增加', + 'save' => '保存​​', + 'update' => '更新', + 'create' => '创建', + 'edit' => '编辑', + 'delete' => '删除', + 'submit' => '提交', + 'cancel' => '取消', + 'remove' => '删除', + 'invite' => '邀请', + 'signup' => '注册', + 'manage_updates' => '管理更新', // Other - 'optional' => '* Optional', + 'optional' => '* 可选', ]; diff --git a/resources/lang/zh-CN/notifications.php b/resources/lang/zh-CN/notifications.php new file mode 100644 index 000000000000..54d4e2ff5611 --- /dev/null +++ b/resources/lang/zh-CN/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => '组件状态已更新', + 'greeting' => '一个组件的状态已被更新!', + 'content' => ':name 状态已由 :old_status 变为 :new_status。', + 'action' => '查看', + ], + 'slack' => [ + 'title' => '组件状态已更新', + 'content' => ':name 状态已由 :old_status 变为 :new_status。', + ], + 'sms' => [ + 'content' => ':name 状态已由 :old_status 变为 :new_status。', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => '有新故障报告', + 'greeting' => '在 :app_name 处有新故障报告。', + 'content' => '故障 :name 已被报告', + 'action' => '查看', + ], + 'slack' => [ + 'title' => '故障 :name 已报告', + 'content' => '在 :app_name 处有新故障报告。', + ], + 'sms' => [ + 'content' => '在 :app_name 处有新故障报告。', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => '有故障更新', + 'content' => ':name 被更新', + 'title' => ':name 被更新至 :new_status', + 'action' => '查看', + ], + 'slack' => [ + 'title' => ':name 已更新', + 'content' => ':name 被更新至 :new_status', + ], + 'sms' => [ + 'content' => '故障 :name 已被更新', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => '新的维护计划已创建', + 'content' => ':name 已计划于 :date 进行', + 'title' => '新的计划维护已创建。', + 'action' => '查看', + ], + 'slack' => [ + 'title' => '新计划已创建!', + 'content' => ':name 已计划于 :date 进行', + ], + 'sms' => [ + 'content' => ':name 已计划于 :date 进行', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => '验证您的订阅', + 'content' => '点击验证您对 :app_name 状态页的订阅。', + 'title' => '验证您对 :app_name 状态页的订阅。', + 'action' => '验证', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => '管理您的订阅', + 'content' => '点击管理您对 :app_name 状态页的订阅。', + 'title' => '点击管理您对 :app_name 状态页的订阅。', + 'action' => '管理订阅', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => '这是来自 Cachet 的消息!', + 'content' => '这是来自 Cachet 的测试通知邮件!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => '这是您的邀请函...', + 'content' => '您已被邀请加入 :app_name 状态页。', + 'title' => '您被邀请加入 :app_name 状态页。', + 'action' => '接受', + ], + ], + ], +]; diff --git a/resources/lang/zh-CN/pagination.php b/resources/lang/zh-CN/pagination.php index 741cd8da8710..c95f0ea289ee 100644 --- a/resources/lang/zh-CN/pagination.php +++ b/resources/lang/zh-CN/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« 上一个', - 'next' => '下一个 »', + 'previous' => '上一个', + 'next' => '下一个', ]; diff --git a/resources/lang/zh-CN/setup.php b/resources/lang/zh-CN/setup.php index b2f1e531cc35..021f0d249466 100644 --- a/resources/lang/zh-CN/setup.php +++ b/resources/lang/zh-CN/setup.php @@ -15,7 +15,7 @@ 'service_details' => '服务细节', 'env_setup' => '环境设置', 'status_page_setup' => '状态页面设置', - 'show_support' => '您想支持Cachet么?', + 'show_support' => '在页面底部显示 “由 Cachet 驱动。”', 'admin_account' => '管理员帐户', 'complete_setup' => '设置完成', 'completed' => 'Cachet已成功配置!', diff --git a/resources/lang/zh-CN/validation.php b/resources/lang/zh-CN/validation.php index fa7d926c3d3e..5913f5d69fe2 100644 --- a/resources/lang/zh-CN/validation.php +++ b/resources/lang/zh-CN/validation.php @@ -22,7 +22,7 @@ | */ - 'accepted' => ':attribute 必须是可以接受的。', + 'accepted' => '您必须同意 :attribute。', 'active_url' => ':attribute 不是一个有效的URL网址。', 'after' => ':attribute 必须在 :date 之后。', 'alpha' => ':attribute 只能包含字母。', @@ -31,60 +31,60 @@ 'array' => ':attribute 必须是个数组。', 'before' => ':attribute 必须在 :date 之前。', 'between' => [ - 'numeric' => ':attribute 必须在 :date 之前。', - 'file' => ':attribute 必须在 :min 和 :max 之间。', - 'string' => ':attribute 必须在 :min 到 :max Kb 之间。', + 'numeric' => ':attribute 必须在 :min 和 :max 之间。', + 'file' => ':attribute 必须在 :min KB 到 :max KB 之间。', + 'string' => ':attribute 包含的字符数量必须在 :min 到 :max 之间。', 'array' => ':attribute 必须在 :min 到 :max 个数目之间。', ], - 'boolean' => ':attribute 必须在 :min 到 :max 个数目之间。', - 'confirmed' => ':attribute 字段必须为 true 或 false。', - 'date' => ':attribute 与确认项目不匹配', - 'date_format' => ':attribute 不是有效的日期。', - 'different' => ':attribute 不符合格式 :format 。', - 'digits' => ':attribute 和 :other 不能相同。', - 'digits_between' => ':attribute 必须是 :digits 位数字。', - 'email' => ':attribute 必须在 :min 位和 :max 位数字之间。', - 'exists' => ':attribute 必须是一个有效的电子邮件地址。', + 'boolean' => ':attribute 字段必须为 true 或 false。', + 'confirmed' => ':attribute 的两次输入不匹配。', + 'date' => ':attribute 不是有效的日期。', + 'date_format' => ':attribute 不符合格式 :format 。', + 'different' => ':attribute 和 :other 不能相同。', + 'digits' => ':attribute 必须是 :digits 位数字。', + 'digits_between' => ':attribute 必须是 :min - :max 位数字。', + 'email' => ':attribute 必须是一个有效的电子邮件地址。', + 'exists' => '选择的 :attribute 无效。', 'distinct' => ':attribute 有重复。', - 'filled' => ':attribute 的格式无效', + 'filled' => ':attribute 字段必填。', 'image' => ':attribute 必须是图片。', - 'in' => ':attribute 必须是图片。', + 'in' => '选择的 :attribute 无效。', 'in_array' => ':attribute 不在 :other 中。', - 'integer' => '选择的 :attribute 无效', - 'ip' => ':attribute 必须是整数。', + 'integer' => ':attribute 必须是整数。', + 'ip' => ':attribute 必须是一个有效的 IP 地址。', 'json' => ':attribute 必须是规范的 JSON 字串。', 'max' => [ - 'numeric' => ':attribute 必须是一个有效的 IP 地址', - 'file' => ':attribute 不允许大于 :max', - 'string' => ':attribute 不能大于 :max Kb。', + 'numeric' => ':attribute 不允许大于 :max。', + 'file' => ':attribute 不能大于 :max KB。', + 'string' => ':attribute 的字符数量不能大于 :max 。', 'array' => ':attribute 不能超过 :max 个。', ], - 'mimes' => ':attribute 不能超过 :max 个。', + 'mimes' => ':attribute 文件类型必须是 :values。', 'min' => [ - 'numeric' => ':attribute 文件类型必须是 :values', + 'numeric' => ':attribute 必须至少是 :min。', 'file' => ':attribute 至少需要 :min KB。', - 'string' => ':attribute 至少需要 :min KB。', - 'array' => ':attribute 最少需要 :min 个字符。', + 'string' => ':attribute 最少需要有 :min 个字符。', + 'array' => ':attribute 至少需要有 :min 项。', ], - 'not_in' => ':attribute 至少需要有 :min 项。', - 'numeric' => '选择的 :attribute 无效', + 'not_in' => '选择的 :attribute 无效。', + 'numeric' => ':attribute 必须是数字。', 'present' => ':attribute 为必填项。', - 'regex' => ':attribute 必须是数字。', - 'required' => ':attribute 的格式无效', - 'required_if' => ':attribute 字段必填。', + 'regex' => ':attribute 的格式无效', + 'required' => ':attribute 字段必填。', + 'required_if' => ':attribute 字段在 :other 是 :value 时是必填的。', 'required_unless' => ':attribute 是必须的除非 :other 在 :values 中。', - 'required_with' => ':attribute 字段在 :other 是 :value 时是必填的。', + 'required_with' => '当含有 :values 时, :attribute 是必需的。', 'required_with_all' => '当含有 :values 时, :attribute 是必需的。', - 'required_without' => '当含有 :values 时, :attribute 是必需的。', - 'required_without_all' => '当 :values 不存在时, :attribute 是必填的。', - 'same' => '当没有任何 :values 存在时, :attribute 字段为必填项。', + 'required_without' => '当 :values 不存在时, :attribute 是必填的。', + 'required_without_all' => '当没有任何 :values 存在时,:attribute 字段为必填项。', + 'same' => ':attribute 和 :other 必须匹配。', 'size' => [ - 'numeric' => ':attribute 和 :other 必须匹配。', + 'numeric' => ':attribute 的大小必须是 :size 。', 'file' => ':attribute 必须是 :size KB大小', 'string' => ':attribute 必须是 :size 个字符', - 'array' => ':attribute 必须是 :size 个字符', + 'array' => ':attribute 必须包含 :size 个项。', ], - 'string' => ':attribute 必须包含 :size 个项。', + 'string' => ':attribute 必须是一个字符串。', 'timezone' => ':attribute 必须是个有效的区域。', 'unique' => ':attribute 已经被占用', 'url' => ':attribute 的格式无效', diff --git a/resources/lang/zh-TW/cachet.php b/resources/lang/zh-TW/cachet.php index fa86de6aca3c..bb3af4ff2db6 100644 --- a/resources/lang/zh-TW/cachet.php +++ b/resources/lang/zh-TW/cachet.php @@ -14,6 +14,7 @@ 'components' => [ 'last_updated' => 'Last updated :timestamp', 'status' => [ + 0 => 'Unknown', 1 => '正常', 2 => '效能問題', 3 => '部分停止運作', @@ -22,18 +23,20 @@ 'group' => [ 'other' => 'Other Components', ], + 'select_all' => 'Select All', + 'deselect_all' => 'Deselect All', ], // Incidents 'incidents' => [ - 'none' => 'No incidents reported', - 'past' => '過去的事件', - 'previous_week' => '上一週', - 'next_week' => '下一週', - 'scheduled' => '排程維護', - 'scheduled_at' => ',於:timestamp', - 'status' => [ - 0 => '排程中的維護', // TODO: Hopefully remove this. + 'none' => 'No incidents reported', + 'past' => 'Past Incidents', + 'stickied' => 'Stickied Incidents', + 'scheduled' => 'Maintenance', + 'scheduled_at' => ',於:timestamp', + 'posted' => 'Posted :timestamp by :username', + 'posted_at' => 'Posted at :timestamp', + 'status' => [ 1 => '調查中', 2 => '已辨明', 3 => '警戒中', @@ -41,11 +44,20 @@ ], ], + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'Upcoming', + 1 => 'In Progress', + 2 => 'Complete', + ], + ], + // Service Status 'service' => [ - 'good' => '[0,1] System operational|[2,Inf] All systems are operational', - 'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues', - 'major' => '[0,1] The service is experiencing a major outage|[2,Inf] Some systems are experiencing a major outage', + 'good' => '[0,1]System operational|[2,*]All systems are operational', + 'bad' => '[0,1]The system is experiencing issues|[2,*]Some systems are experiencing issues', + 'major' => '[0,1]The system is experiencing major issues|[2,*]Some systems are experiencing major issues', ], 'api' => [ @@ -57,65 +69,47 @@ 'metrics' => [ 'filter' => [ 'last_hour' => 'Last Hour', - 'hourly' => '最近12小時', - 'weekly' => '週', - 'monthly' => '月', + 'hourly' => 'Last 12 Hours', + 'weekly' => 'Week', + 'monthly' => 'Month', ], ], // Subscriber 'subscriber' => [ - 'subscribe' => '訂閱最新的狀態更新。', - 'button' => '訂閱', - 'manage' => [ - 'no_subscriptions' => 'You\'re currently subscribed to all updates.', - 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'subscribe' => 'Subscribe to status changes and incident updates', + 'unsubscribe' => 'Unsubscribe', + 'button' => 'Subscribe', + 'manage_subscription' => 'Manage subscription', + 'manage' => [ + 'notifications' => '通知', + 'notifications_for' => 'Manage notifications for', + 'no_subscriptions' => 'You\'re currently subscribed to all updates.', + 'update_subscription' => 'Update Subscription', + 'my_subscriptions' => 'You\'re currently subscribed to the following updates.', + 'manage_at_link' => 'Manage your subscriptions at :link', ], 'email' => [ - 'subscribe' => '訂閱 電子郵件 系統狀態更新。', - 'subscribed' => '您已經訂閱電子郵件通知,請檢查您的電子郵件,確認您的訂閱。', - 'verified' => '您的電子郵件訂閱已確認。謝謝!', - 'manage' => 'Manage your subscription', - 'unsubscribe' => '取消電子郵件訂閱。', - 'unsubscribed' => '您的電子郵件訂閱已取消。', - 'failure' => '郵件訂閱失敗。', - 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', - 'verify' => [ - 'text' => "Please confirm your email subscription to :app_name status updates.\n:link", - 'html' => '

          Please confirm your email subscription to :app_name status updates.

          ', - 'button' => 'Confirm Subscription', - ], - 'maintenance' => [ - 'subject' => '[Maintenance Scheduled] :name', - ], - 'incident' => [ - 'subject' => '[New Incident] :status: :name', - ], - 'component' => [ - 'subject' => 'Component Status Update', - 'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name', - 'html' => '

          The component :component_name has seen a status change. The component is now at :component_human_status.

          Thank you, :app_name

          ', - 'tooltip-title' => 'Subscribe to notifications for :component_name.', - ], - ], - ], - - 'users' => [ - 'email' => [ - 'invite' => [ - 'text' => "您已被邀請加入 :app_name 團隊的狀態頁, 請點擊以下鏈接進行註冊。\n:link\n謝謝, :app_name", - 'html' => '

          您已被邀請加入 :app_name 團隊的狀態頁, 請點擊以下鏈接進行註冊。

          :link

          謝謝, :app_name

          ', - ], + 'manage_subscription' => 'We\'ve sent you an email, please click the link to manage your subscription', + 'subscribe' => 'Subscribe to email updates.', + 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', + 'updated-subscribe' => 'You\'ve succesfully updated your subscriptions.', + 'verified' => 'Your email subscription has been confirmed. Thank you!', + 'manage' => 'Manage your subscription', + 'unsubscribe' => 'Unsubscribe from email updates.', + 'unsubscribed' => 'Your email subscription has been cancelled.', + 'failure' => 'Something went wrong with the subscription.', + 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', ], ], 'signup' => [ - 'title' => '註冊', + 'title' => 'Sign Up', 'username' => '用戶名', 'email' => '電郵地址', 'password' => '密碼', - 'success' => '您的賬號已註冊成功。', - 'failure' => '註冊失敗。', + 'success' => 'Your account has been created.', + 'failure' => 'Something went wrong with the signup.', ], 'system' => [ @@ -128,17 +122,27 @@ 'subscribe' => [ 'title' => 'Subscribe to component updates', 'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.', - 'button' => '訂閱', + 'button' => 'Subscribe', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'Details and updates about the :name incident that occurred on :date', + 'schedule' => 'Details about the scheduled maintenance period :name starting :startDate', + 'subscribe' => 'Subscribe to :app in order to receive updates of incidents and scheduled maintenance periods', + 'overview' => 'Stay up to date with the latest service updates from :app.', ], ], // Other 'home' => 'Home', - 'description' => 'Stay up to date with the latest service updates from :app.', 'powered_by' => 'Powered by Cachet.', - 'about_this_site' => '關於此站點', - 'rss-feed' => 'RSS 訂閱', - 'atom-feed' => 'Atom 訂閱', + 'timezone' => 'Times are shown in :timezone.', + 'about_this_site' => 'About This Site', + 'rss-feed' => 'RSS', + 'atom-feed' => 'Atom', 'feed' => 'Status 訂閱', ]; diff --git a/resources/lang/zh-TW/dashboard.php b/resources/lang/zh-TW/dashboard.php index 64515a2f13ae..9725ac86735a 100644 --- a/resources/lang/zh-TW/dashboard.php +++ b/resources/lang/zh-TW/dashboard.php @@ -11,22 +11,38 @@ return [ - 'dashboard' => '儀表板', + 'dashboard' => '儀表板', + 'writeable_settings' => 'The Cachet settings directory is not writeable. Please make sure that ./bootstrap/cachet is writeable by the web server.', // Incidents 'incidents' => [ - 'title' => '事件與排程', + 'title' => 'Incidents & Maintenance', 'incidents' => '事件', - 'logged' => '{0} 做得好,沒有任何事件。|你記錄了一個事件。|你回報了 :count 個事件。', + 'logged' => '{0}There are no incidents, good work.|[1]You have logged one incident.|[2,*]You have reported :count incidents.', 'incident-create-template' => '新增模板', 'incident-templates' => '事件模板', + 'updates' => [ + 'title' => 'Incident updates for :incident', + 'count' => '{0}Zero Updates|[1]One Update|[2]Two Updates|[3,*]Several Updates', + 'add' => [ + 'title' => 'Create new incident update', + 'success' => 'Your new incident update has been created.', + 'failure' => 'Something went wrong with the incident update.', + ], + 'edit' => [ + 'title' => 'Edit incident update', + 'success' => 'The incident update has been updated.', + 'failure' => 'Something went wrong updating the incident update', + ], + ], + 'reported_by' => 'Reported :timestamp by :user', 'add' => [ - 'title' => '添加事件', + 'title' => 'Report an incident', 'success' => 'Incident added.', 'failure' => 'There was an error adding the incident, please try again.', ], 'edit' => [ - 'title' => '編輯事件', + 'title' => 'Edit an incident', 'success' => '事件更新成功。', 'failure' => 'There was an error editing the incident, please try again.', ], @@ -39,13 +55,13 @@ 'templates' => [ 'title' => '事件模板', 'add' => [ - 'title' => '添加事件模板', - 'message' => 'You should add an incident template.', + 'title' => 'Create an incident template', + 'message' => 'Create your first incident template.', 'success' => 'Your new incident template has been created.', 'failure' => 'Something went wrong with the incident template.', ], 'edit' => [ - 'title' => '編輯模板', + 'title' => 'Edit Template', 'success' => 'The incident template has been updated.', 'failure' => 'Something went wrong updating the incident template', ], @@ -58,22 +74,22 @@ // Incident Maintenance 'schedule' => [ - 'schedule' => '排程維護', - 'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported :count schedules.', + 'schedule' => 'Maintenance', + 'logged' => '{0}There has been no Maintenance, good work.|[1]You have logged one schedule.|[2,*]You have reported :count schedules.', 'scheduled_at' => '排程於 :timestamp', 'add' => [ - 'title' => 'Add Scheduled Maintenance', - 'success' => 'Schedule added.', - 'failure' => 'Something went wrong adding the schedule, please try again.', + 'title' => 'Add Maintenance', + 'success' => 'Maintenance added.', + 'failure' => 'Something went wrong adding the Maintenance, please try again.', ], 'edit' => [ - 'title' => 'Edit Scheduled Maintenance', - 'success' => 'Schedule has been updated!', - 'failure' => 'Something went wrong editing the schedule, please try again.', + 'title' => 'Edit Maintenance', + 'success' => 'Maintenance has been updated!', + 'failure' => 'Something went wrong editing the Maintenance, please try again.', ], 'delete' => [ - 'success' => 'The scheduled maintenance has been deleted and will not show on your status page.', - 'failure' => 'The scheduled maintenance could not be deleted, please try again.', + 'success' => 'The Maintenance has been deleted and will not show on your status page.', + 'failure' => 'The Maintenance could not be deleted, please try again.', ], ], @@ -83,15 +99,15 @@ 'component_statuses' => '組件狀態', 'listed_group' => '屬於:name組', 'add' => [ - 'title' => '添加組件', + 'title' => 'Add a component', 'message' => '你應該先新增一個組件。', 'success' => 'Component created.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ - 'title' => '編輯組件', + 'title' => 'Edit a component', 'success' => 'Component updated.', - 'failure' => 'Something went wrong with the component, please try again.', + 'failure' => 'Something went wrong with the component group, please try again.', ], 'delete' => [ 'success' => 'The component has been deleted!', @@ -101,14 +117,14 @@ // Component groups 'groups' => [ 'groups' => '組件組|組件組', - 'no_components' => '您應添加壹個組件分組。', + 'no_components' => 'You should add a component group.', 'add' => [ - 'title' => '添加組件分組', + 'title' => 'Add a component group', 'success' => 'Component group added.', 'failure' => 'Something went wrong with the component group, please try again.', ], 'edit' => [ - 'title' => '編輯組件分組', + 'title' => 'Edit a component group', 'success' => 'Component group updated.', 'failure' => 'Something went wrong with the component group, please try again.', ], @@ -123,13 +139,13 @@ 'metrics' => [ 'metrics' => '效能度量', 'add' => [ - 'title' => '添加圖表', + 'title' => 'Create a metric', 'message' => 'You should add a metric.', 'success' => 'Metric created.', 'failure' => 'Something went wrong with the metric, please try again.', ], 'edit' => [ - 'title' => '編輯圖表', + 'title' => 'Edit a metric', 'success' => 'Metric updated.', 'failure' => 'Something went wrong with the metric, please try again.', ], @@ -140,21 +156,23 @@ ], // Subscribers 'subscribers' => [ - 'subscribers' => '訂閱者', - 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', - 'verified' => '已認證', - 'not_verified' => '未認證', - 'subscriber' => ':email, subscribed :date', - 'no_subscriptions' => 'Subscribed to all updates', - 'add' => [ - 'title' => '添加訂閱者', - 'success' => '訂閱者已添加成功.', + 'subscribers' => 'Subscribers', + 'description' => 'Subscribers will receive email updates when incidents are created or components are updated.', + 'description_disabled' => 'To use this feature, you need allow people to signup for notifications.', + 'verified' => 'Verified', + 'not_verified' => 'Not verified', + 'subscriber' => ':email, subscribed :date', + 'no_subscriptions' => 'Subscribed to all updates', + 'global' => 'Globally subscribed', + 'add' => [ + 'title' => 'Add a new subscriber', + 'success' => 'Subscriber has been added!', 'failure' => 'Something went wrong adding the subscriber, please try again.', 'help' => 'Enter each subscriber on a new line.', ], 'edit' => [ - 'title' => '更新訂閱者', - 'success' => '訂閱者信息已更新.', + 'title' => 'Update subscriber', + 'success' => 'Subscriber has been updated!', 'failure' => 'Something went wrong editing the subscriber, please try again.', ], ], @@ -166,22 +184,22 @@ 'profile' => '個人檔案', 'description' => '團隊成員可以新增、修改、或更新組件和事件。', 'add' => [ - 'title' => '添加團隊成員', + 'title' => 'Add a new team member', 'success' => 'Team member added.', 'failure' => 'The team member could not be added, please try again.', ], 'edit' => [ - 'title' => '更新配置文件', + 'title' => 'Update profile', 'success' => 'Profile updated.', 'failure' => 'Something went wrong updating the profile, please try again.', ], 'delete' => [ - 'success' => '團隊成員已刪除.', + 'success' => 'Team member has been deleted and will no longer have access to the dashboard!', 'failure' => 'The team member could not be added, please try again.', ], 'invite' => [ - 'title' => '邀請團隊成員', - 'success' => '團隊成員已邀請成功.', + 'title' => 'Invite a new team member', + 'success' => 'An invite has been sent', 'failure' => 'The invite could not be sent, please try again.', ], ], @@ -195,16 +213,27 @@ 'too-big' => '檔案大小過大。請嘗試上載一張大小小於 :size 的圖片。', ], 'analytics' => [ - 'analytics' => '第三方統計', + 'analytics' => 'Analytics', + ], + 'log' => [ + 'log' => 'Log', ], 'localization' => [ - 'localization' => '國際化', + 'localization' => 'Localization', ], 'customization' => [ 'customization' => 'Customization', 'header' => 'Custom Header HTML', 'footer' => 'Custom Footer HTML', ], + 'mail' => [ + 'mail' => 'Mail', + 'test' => 'Test', + 'email' => [ + 'subject' => 'Test notification from Cachet', + 'body' => 'This is a test notification from Cachet.', + ], + ], 'security' => [ 'security' => '安全', 'two-factor' => '下列用戶未使用雙重認證', @@ -254,21 +283,21 @@ 'support' => 'Support Cachet', 'support_subtitle' => 'Check out our Patreon page!', 'news' => 'Latest News', - 'news_subtitle' => 'Get the latest updates', + 'news_subtitle' => 'Get the latest update', ], // Welcome modal 'welcome' => [ - 'welcome' => 'Welcome to your new status page!', + 'welcome' => 'Welcome to your new status page, :username!', 'message' => '你的狀態頁快準備好了!不過你也許先想調整一下以下設定。', - 'close' => 'Take me straight to my dashboard', + 'close' => 'I\'m good thanks!', 'steps' => [ 'component' => '新增組件', 'incident' => '新增事件', 'customize' => '定制化', 'team' => '新增用戶', 'api' => '生成 API 密鑰', - 'two-factor' => '雙因素身份驗證', + 'two-factor' => 'Setup Two Factor Authentication', ], ], diff --git a/resources/lang/zh-TW/forms.php b/resources/lang/zh-TW/forms.php index 420ea135c666..c1668f98a32a 100644 --- a/resources/lang/zh-TW/forms.php +++ b/resources/lang/zh-TW/forms.php @@ -21,8 +21,14 @@ 'site_timezone' => '選擇你的時區', 'site_locale' => '選擇你的語言', 'enable_google2fa' => '啟用 Google 兩步驗證', - 'cache_driver' => '緩存驅動', - 'session_driver' => '會話驅動', + 'cache_driver' => 'Cache Driver', + 'queue_driver' => 'Queue Driver', + 'session_driver' => 'Session Driver', + 'mail_driver' => 'Mail Driver', + 'mail_host' => 'Mail Host', + 'mail_address' => 'Mail From Address', + 'mail_username' => 'Mail Username', + 'mail_password' => 'Mail Password', ], // Login form fields @@ -33,8 +39,9 @@ '2fauth' => '驗證碼', 'invalid' => 'Invalid username or password', 'invalid-token' => '錯誤的驗證碼', - 'cookies' => '您必須啟用 cookies 來進行登錄。', + 'cookies' => 'You must enable cookies to login.', 'rate-limit' => 'Rate limit exceeded.', + 'remember_me' => 'Remember me', ], // Incidents form fields @@ -42,18 +49,36 @@ 'name' => '名稱', 'status' => '狀態', 'component' => '組件', + 'component_status' => 'Component Status', 'message' => '訊息', 'message-help' => '你可以使用 Markdown 。', - 'scheduled_at' => '排期在什麼時候進行維護?', - 'incident_time' => '這次事件是什麽時候發生的?', - 'notify_subscribers' => '通知訂閱者', + 'occurred_at' => 'When did this incident occur?', + 'notify_subscribers' => 'Notify subscribers?', + 'notify_disabled' => 'Due to scheduled maintenance, notifications about this incident or its components will be suppressed.', 'visibility' => 'Incident Visibility', - 'public' => '公共可見', - 'logged_in_only' => '僅登錄用戶可見', + 'stick_status' => 'Stick Incident', + 'stickied' => 'Stickied', + 'not_stickied' => 'Not Stickied', + 'public' => 'Viewable by public', + 'logged_in_only' => 'Only visible to logged in users', 'templates' => [ 'name' => '名稱', 'template' => '範本', - 'twig' => 'Incident Templates can make use of the Twig templating language.', + 'twig' => 'Incident Templates can make use of the Twig templating language.', + ], + ], + + 'schedules' => [ + 'name' => '名稱', + 'status' => '狀態', + 'message' => '訊息', + 'message-help' => '你可以使用 Markdown 。', + 'scheduled_at' => 'When is this maintenance scheduled for?', + 'completed_at' => 'When did this maintenance complete?', + 'templates' => [ + 'name' => '名稱', + 'template' => '範本', + 'twig' => 'Incident Templates can make use of the Twig templating language.', ], ], @@ -66,31 +91,53 @@ 'link' => '連結', 'tags' => '標籤', 'tags-help' => '請以半角逗號分隔。', - 'enabled' => '啟用', + 'enabled' => 'Component enabled?', 'groups' => [ - 'name' => '名稱', - 'collapsing' => 'Choose visibility of the group', - 'visible' => 'Always expanded', - 'collapsed' => 'Collapse the group by default', - 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'name' => '名稱', + 'collapsing' => 'Expand/Collapse options', + 'visible' => 'Always expanded', + 'collapsed' => 'Collapse the group by default', + 'collapsed_incident' => 'Collapse the group, but expand if there are issues', + 'visibility' => 'Visibility', + 'visibility_public' => 'Visible to public', + 'visibility_authenticated' => 'Visible only to logged in users', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => '名稱', + 'description' => '描述', + 'start_at' => 'Schedule start time', + 'timezone' => 'Timezone', + 'schedule_frequency' => 'Schedule frequency (in seconds)', + 'completion_latency' => 'Completion latency (in seconds)', + 'group' => '組別', + 'active' => 'Active?', + 'groups' => [ + 'name' => 'Group Name', ], ], // Metric form fields 'metrics' => [ - 'name' => '名稱', - 'suffix' => '後綴', - 'description' => '描述', - 'description-help' => '你也可以使用 Markdown', - 'display-chart' => '在狀態頁上顯示圖表?', - 'default-value' => '默認值', - 'calc_type' => '圖表計算方法', - 'type_sum' => '總和', - 'type_avg' => '平均', - 'places' => '小數點位數', - 'default_view' => 'Default view', - 'threshold' => 'How many minutes of threshold between metric points?', + 'name' => '名稱', + 'suffix' => '後綴', + 'description' => '描述', + 'description-help' => '你可以使用 Markdown 。', + 'display-chart' => '在狀態頁上顯示圖表?', + 'default-value' => 'Default value', + 'calc_type' => 'Calculation of metrics', + 'type_sum' => '總和', + 'type_avg' => '平均', + 'places' => 'Decimal places', + 'default_view' => 'Default view', + 'threshold' => 'How many minutes of threshold between metric points?', + 'visibility' => 'Visibility', + 'visibility_authenticated' => 'Visible to authenticated users', + 'visibility_public' => 'Visible to everybody', + 'visibility_hidden' => 'Always hidden', 'points' => [ 'value' => '值', @@ -99,52 +146,61 @@ // Settings 'settings' => [ - /// Application setup + // Application setup 'app-setup' => [ - 'site-name' => '網站名稱', - 'site-url' => '網站 URL', - 'display-graphs' => '在狀態頁上顯示圖片?', - 'about-this-page' => '關於本站', - 'days-of-incidents' => '顯示多少天前的事件?', - 'banner' => 'Banner Image', - 'banner-help' => '橫幅寬度建議少於 930px 。', - 'subscribers' => '允許用戶訂閱郵件通知嗎?', - 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'site-name' => '網站名稱', + 'site-url' => '網站 URL', + 'display-graphs' => '在狀態頁上顯示圖片?', + 'about-this-page' => '關於本站', + 'days-of-incidents' => '顯示多少天前的事件?', + 'time_before_refresh' => 'Status page refresh rate (in seconds)', + 'major_outage_rate' => 'Major outage threshold (in %)', + 'banner' => 'Banner Image', + 'banner-help' => "It's recommended that you upload files no bigger than 930px wide", + 'subscribers' => 'Allow people to signup to email notifications?', + 'suppress_notifications_in_maintenance' => 'Suppress notifications when incident occurs during maintenance period?', + 'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)', + 'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?', + 'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)', + 'show_timezone' => 'Show the timezone the status page is running in', + 'only_disrupted_days' => 'Only show days containing incidents in the timeline?', ], 'analytics' => [ - 'analytics_google' => 'Google Analytics 代碼', - 'analytics_gosquared' => 'GoSquared Analytics 代碼', - 'analytics_piwik_url' => '輸入Piwik實例的URL(不含http(s)://)', - 'analytics_piwik_siteid' => 'Piwik 的站點 id', + 'analytics_google' => 'Google Analytics code', + 'analytics_gosquared' => 'GoSquared Analytics code', + 'analytics_piwik_url' => 'URL of your Piwik instance', + 'analytics_piwik_siteid' => 'Piwik\'s site id', ], 'localization' => [ - 'site-timezone' => '站點時區', - 'site-locale' => '站點語言', - 'date-format' => '日期格式', - 'incident-date-format' => '事件的時間戳格式', + 'site-timezone' => 'Site timezone', + 'site-locale' => 'Site language', + 'date-format' => 'Date format', + 'incident-date-format' => 'Incident timestamp format', ], 'security' => [ - 'allowed-domains' => '允許的域', - 'allowed-domains-help' => '請以半角逗號分隔。以上域名將會自動允許訪問。', + 'allowed-domains' => 'Allowed domains', + 'allowed-domains-help' => '請以半角逗號分隔。以上域名將會自動允許訪問。', + 'always-authenticate' => 'Always authenticate', + 'always-authenticate-help' => 'Require login to view any Cachet page', ], 'stylesheet' => [ 'custom-css' => 'Custom Stylesheet', ], 'theme' => [ - 'background-color' => 'Background Color', - 'background-fills' => '區塊填充色(組件, 事件, 頁尾)', - 'banner-background-color' => '横幅背景色', - 'banner-padding' => '横幅Padding值', - 'fullwidth-banner' => '横幅全寬?', - 'text-color' => 'Text Color', - 'dashboard-login' => '在頁尾顯示 管理後臺 的入口?', + 'background-color' => 'Background color', + 'background-fills' => 'Background fills (components, incidents, footer)', + 'banner-background-color' => 'Banner background color', + 'banner-padding' => 'Banner padding', + 'fullwidth-banner' => 'Enable full width banner?', + 'text-color' => 'Text color', + 'dashboard-login' => 'Show dashboard button in the footer?', 'reds' => '紅(用於錯誤類提示)', - 'blues' => '藍 (用於信息類提示)', - 'greens' => '綠 (用於成功類提示)', - 'yellows' => '黃 (用於警告類提示)', - 'oranges' => '橙 (用於通知類提示)', - 'metrics' => '圖表填充色', - 'links' => '鏈接', + 'blues' => 'Blue (used for information)', + 'greens' => 'Green (used for success)', + 'yellows' => 'Yellow (used for alerts)', + 'oranges' => 'Orange (used for notices)', + 'metrics' => 'Metrics fill', + 'links' => 'Links', ], ], @@ -154,33 +210,43 @@ 'password' => '密碼', 'api-token' => 'API 密鑰', 'api-token-help' => '重新生成 API 密鑰將會導致現存的應用程序無法訪問 Cachet 。', - 'gravatar' => '修改您的 Gravatar 頭像。', - 'user_level' => '用戶等級', + 'gravatar' => 'Change your profile picture at Gravatar.', + 'user_level' => 'User Level', 'levels' => [ - 'admin' => '管理員', - 'user' => '普通用戶', + 'admin' => 'Admin', + 'user' => 'User', ], '2fa' => [ 'help' => '啟用兩步認證會使得你的賬戶更加安全。您需要下載 Google Authenticator 或類似的應用程序到您的設備上。啓用後,你需要提供由該應用程序生成的驗證碼方可登錄。', ], 'team' => [ - 'description' => '請輸入您要邀請的團隊成員的郵件地址:', - 'email' => 'Email #:id', + 'description' => 'Invite your team members by entering their email addresses here.', + 'email' => 'Your Team Members Email Address', ], ], + 'general' => [ + 'timezone' => 'Select Timezone', + ], + + 'seo' => [ + 'title' => 'SEO Title', + 'description' => 'SEO Description', + ], + // Buttons - 'add' => '增加', - 'save' => '儲存', - 'update' => '更新', - 'create' => '建立', - 'edit' => '編輯', - 'delete' => '刪除', - 'submit' => '送出', - 'cancel' => '取消', - 'remove' => '移除', - 'invite' => '邀請', - 'signup' => '註冊', + 'add' => '增加', + 'save' => '儲存', + 'update' => '更新', + 'create' => '建立', + 'edit' => '編輯', + 'delete' => '刪除', + 'submit' => '送出', + 'cancel' => '取消', + 'remove' => '移除', + 'invite' => 'Invite', + 'signup' => 'Sign Up', + 'manage_updates' => 'Manage Updates', // Other 'optional' => '* 可選項目', diff --git a/resources/lang/zh-TW/notifications.php b/resources/lang/zh-TW/notifications.php new file mode 100644 index 000000000000..4d98ec751ca6 --- /dev/null +++ b/resources/lang/zh-TW/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'Component Status Updated', + 'greeting' => 'A component\'s status was updated!', + 'content' => ':name status changed from :old_status to :new_status.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Component Status Updated', + 'content' => ':name status changed from :old_status to :new_status.', + ], + 'sms' => [ + 'content' => ':name status changed from :old_status to :new_status.', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Incident Reported', + 'greeting' => 'A new incident was reported at :app_name.', + 'content' => 'Incident :name was reported', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'Incident :name Reported', + 'content' => 'A new incident was reported at :app_name', + ], + 'sms' => [ + 'content' => 'A new incident was reported at :app_name.', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'Incident Updated', + 'content' => ':name was updated', + 'title' => ':name was updated to :new_status', + 'action' => 'View', + ], + 'slack' => [ + 'title' => ':name Updated', + 'content' => ':name was updated to :new_status', + ], + 'sms' => [ + 'content' => 'Incident :name was updated', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'New Schedule Created', + 'content' => ':name was scheduled for :date', + 'title' => 'A new scheduled maintenance was created.', + 'action' => 'View', + ], + 'slack' => [ + 'title' => 'New Schedule Created!', + 'content' => ':name was scheduled for :date', + ], + 'sms' => [ + 'content' => ':name was scheduled for :date', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'Verify Your Subscription', + 'content' => 'Click to verify your subscription to :app_name status page.', + 'title' => 'Verify your subscription to :app_name status page.', + 'action' => 'Verify', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'Manage Your Subscription', + 'content' => 'Click to manage your subscription to :app_name status page.', + 'title' => 'Click to manage your subscription to :app_name status page.', + 'action' => 'Manage subscription', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'Ping from Cachet!', + 'content' => 'This is a test notification from Cachet!', + 'title' => '🔔', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'Your invitation is inside...', + 'content' => 'You have been invited to join :app_name status page.', + 'title' => 'You\'re invited to join :app_name status page.', + 'action' => 'Accept', + ], + ], + ], +]; diff --git a/resources/lang/zh-TW/pagination.php b/resources/lang/zh-TW/pagination.php index 57b293ae7f68..0ee724cf086b 100644 --- a/resources/lang/zh-TW/pagination.php +++ b/resources/lang/zh-TW/pagination.php @@ -22,7 +22,7 @@ | */ - 'previous' => '« 上一頁', - 'next' => '下一頁 »', + 'previous' => 'Previous', + 'next' => 'Next', ]; diff --git a/resources/lang/zh-TW/setup.php b/resources/lang/zh-TW/setup.php index 6db5de8bbc95..b7b4de9c9e95 100644 --- a/resources/lang/zh-TW/setup.php +++ b/resources/lang/zh-TW/setup.php @@ -13,9 +13,9 @@ 'setup' => '安裝', 'title' => '安裝 Cachet', 'service_details' => '服務詳細信息', - 'env_setup' => '环境设置', + 'env_setup' => 'Environment Setup', 'status_page_setup' => '設置狀態頁面', - 'show_support' => '您想支持Cachet么?', + 'show_support' => 'Show support for Cachet?', 'admin_account' => '管理員帳戶', 'complete_setup' => '完成安裝', 'completed' => '成功安裝 Cachet !', diff --git a/resources/lang/zh-TW/validation.php b/resources/lang/zh-TW/validation.php index 5f073e4380ce..4305ac57c190 100644 --- a/resources/lang/zh-TW/validation.php +++ b/resources/lang/zh-TW/validation.php @@ -31,60 +31,60 @@ 'array' => ':attribute 必須是一個陣列', 'before' => ':attribute 必須在 :date 之前', 'between' => [ - 'numeric' => ':attribute 必須在 :date 之前', - 'file' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', 'array' => 'The :attribute must have between :min and :max items.', ], - 'boolean' => 'The :attribute must have between :min and :max items.', - 'confirmed' => 'The :attribute field must be true or false.', - 'date' => 'The :attribute confirmation does not match.', - 'date_format' => 'The :attribute is not a valid date.', - 'different' => 'The :attribute does not match the format :format.', - 'digits' => 'The :attribute and :other must be different.', - 'digits_between' => 'The :attribute must be :digits digits.', - 'email' => 'The :attribute must be between :min and :max digits.', - 'exists' => 'The :attribute must be a valid email address.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', 'distinct' => 'The :attribute field has a duplicate value.', - 'filled' => ':attribute 格式無效', + 'filled' => 'The :attribute field is required.', 'image' => ':attribute 必須是圖片', - 'in' => ':attribute 必須是圖片', + 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The selected :attribute is invalid.', - 'ip' => 'The :attribute must be an integer.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', 'json' => 'The :attribute must be a valid JSON string.', 'max' => [ - 'numeric' => 'The :attribute must be a valid IP address.', - 'file' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max kilobytes.', + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', 'array' => 'The :attribute may not have more than :max items.', ], - 'mimes' => 'The :attribute may not have more than :max items.', + 'mimes' => 'The :attribute must be a file of type: :values.', 'min' => [ - 'numeric' => 'The :attribute must be a file of type: :values.', + 'numeric' => 'The :attribute must be at least :min.', 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min kilobytes.', - 'array' => 'The :attribute must be at least :min characters.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', ], - 'not_in' => 'The :attribute must have at least :min items.', - 'numeric' => 'The selected :attribute is invalid.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute must be a number.', - 'required' => ':attribute 格式無效', - 'required_if' => 'The :attribute field is required.', + 'regex' => ':attribute 格式無效', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :other is :value.', + 'required_with' => ':attribute 欄位在 :values 存在時,是必填的', 'required_with_all' => ':attribute 欄位在 :values 存在時,是必填的', - 'required_without' => ':attribute 欄位在 :values 存在時,是必填的', - 'required_without_all' => 'The :attribute field is required when :values is not present.', - 'same' => 'The :attribute field is required when none of :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', 'size' => [ - 'numeric' => 'The :attribute and :other must match.', + 'numeric' => 'The :attribute must be :size.', 'file' => 'The :attribute must be :size kilobytes.', 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', ], - 'string' => 'The :attribute must contain :size items.', + 'string' => 'The :attribute must be a string.', 'timezone' => ':attribute 必須是有效的區域', 'unique' => ':attribute 已經被佔用', 'url' => ':attribute 格式無效', diff --git a/resources/lang/zu-ZA/cachet.php b/resources/lang/zu-ZA/cachet.php new file mode 100644 index 000000000000..4726b662bcc5 --- /dev/null +++ b/resources/lang/zu-ZA/cachet.php @@ -0,0 +1,148 @@ + [ + 'last_updated' => 'crwdns877:0crwdne877:0', + 'status' => [ + 0 => 'crwdns878:0crwdne878:0', + 1 => 'crwdns879:0crwdne879:0', + 2 => 'crwdns880:0crwdne880:0', + 3 => 'crwdns881:0crwdne881:0', + 4 => 'crwdns882:0crwdne882:0', + ], + 'group' => [ + 'other' => 'crwdns883:0crwdne883:0', + ], + 'select_all' => 'crwdns1510:0crwdne1510:0', + 'deselect_all' => 'crwdns1512:0crwdne1512:0', + ], + + // Incidents + 'incidents' => [ + 'none' => 'crwdns884:0crwdne884:0', + 'past' => 'crwdns885:0crwdne885:0', + 'stickied' => 'crwdns888:0crwdne888:0', + 'scheduled' => 'crwdns1395:0crwdne1395:0', + 'scheduled_at' => 'crwdns890:0crwdne890:0', + 'posted' => 'crwdns1540:0crwdne1540:0', + 'posted_at' => 'crwdns1396:0crwdne1396:0', + 'status' => [ + 1 => 'crwdns892:0crwdne892:0', + 2 => 'crwdns893:0crwdne893:0', + 3 => 'crwdns894:0crwdne894:0', + 4 => 'crwdns895:0crwdne895:0', + ], + ], + + // Schedule + 'schedules' => [ + 'status' => [ + 0 => 'crwdns896:0crwdne896:0', + 1 => 'crwdns897:0crwdne897:0', + 2 => 'crwdns898:0crwdne898:0', + ], + ], + + // Service Status + 'service' => [ + 'good' => 'crwdns1437:0crwdne1437:0', + 'bad' => 'crwdns1398:0crwdne1398:0', + 'major' => 'crwdns1399:0crwdne1399:0', + ], + + 'api' => [ + 'regenerate' => 'crwdns902:0crwdne902:0', + 'revoke' => 'crwdns903:0crwdne903:0', + ], + + // Metrics + 'metrics' => [ + 'filter' => [ + 'last_hour' => 'crwdns904:0crwdne904:0', + 'hourly' => 'crwdns905:0crwdne905:0', + 'weekly' => 'crwdns906:0crwdne906:0', + 'monthly' => 'crwdns907:0crwdne907:0', + ], + ], + + // Subscriber + 'subscriber' => [ + 'subscribe' => 'crwdns1520:0crwdne1520:0', + 'unsubscribe' => 'crwdns1447:0crwdne1447:0', + 'button' => 'crwdns909:0crwdne909:0', + 'manage_subscription' => 'crwdns1448:0crwdne1448:0', + 'manage' => [ + 'notifications' => 'crwdns1514:0crwdne1514:0', + 'notifications_for' => 'crwdns1516:0crwdne1516:0', + 'no_subscriptions' => 'crwdns910:0crwdne910:0', + 'update_subscription' => 'crwdns1518:0crwdne1518:0', + 'my_subscriptions' => 'crwdns911:0crwdne911:0', + 'manage_at_link' => 'crwdns1432:0crwdne1432:0', + ], + 'email' => [ + 'manage_subscription' => 'crwdns1530:0crwdne1530:0', + 'subscribe' => 'crwdns912:0crwdne912:0', + 'subscribed' => 'crwdns913:0crwdne913:0', + 'updated-subscribe' => 'crwdns1522:0crwdne1522:0', + 'verified' => 'crwdns914:0crwdne914:0', + 'manage' => 'crwdns915:0crwdne915:0', + 'unsubscribe' => 'crwdns916:0crwdne916:0', + 'unsubscribed' => 'crwdns917:0crwdne917:0', + 'failure' => 'crwdns918:0crwdne918:0', + 'already-subscribed' => 'crwdns919:0crwdne919:0', + ], + ], + + 'signup' => [ + 'title' => 'crwdns931:0crwdne931:0', + 'username' => 'crwdns932:0crwdne932:0', + 'email' => 'crwdns933:0crwdne933:0', + 'password' => 'crwdns934:0crwdne934:0', + 'success' => 'crwdns935:0crwdne935:0', + 'failure' => 'crwdns936:0crwdne936:0', + ], + + 'system' => [ + 'update' => 'crwdns937:0crwdne937:0', + ], + + // Modal + 'modal' => [ + 'close' => 'crwdns938:0crwdne938:0', + 'subscribe' => [ + 'title' => 'crwdns939:0crwdne939:0', + 'body' => 'crwdns940:0crwdne940:0', + 'button' => 'crwdns941:0crwdne941:0', + ], + ], + + // Meta descriptions + 'meta' => [ + 'description' => [ + 'incident' => 'crwdns1428:0crwdne1428:0', + 'schedule' => 'crwdns1429:0crwdne1429:0', + 'subscribe' => 'crwdns1430:0crwdne1430:0', + 'overview' => 'crwdns1431:0crwdne1431:0', + ], + ], + + // Other + 'home' => 'crwdns942:0crwdne942:0', + 'powered_by' => 'crwdns944:0crwdne944:0', + 'timezone' => 'crwdns945:0crwdne945:0', + 'about_this_site' => 'crwdns946:0crwdne946:0', + 'rss-feed' => 'crwdns947:0crwdne947:0', + 'atom-feed' => 'crwdns948:0crwdne948:0', + 'feed' => 'crwdns949:0crwdne949:0', + +]; diff --git a/resources/lang/zu-ZA/dashboard.php b/resources/lang/zu-ZA/dashboard.php new file mode 100644 index 000000000000..974517cdfbc7 --- /dev/null +++ b/resources/lang/zu-ZA/dashboard.php @@ -0,0 +1,304 @@ + 'crwdns950:0crwdne950:0', + 'writeable_settings' => 'crwdns951:0crwdne951:0', + + // Incidents + 'incidents' => [ + 'title' => 'crwdns1400:0crwdne1400:0', + 'incidents' => 'crwdns953:0crwdne953:0', + 'logged' => 'crwdns1441:0{0}crwdnd1441:0[1]crwdne1441:0', + 'incident-create-template' => 'crwdns955:0crwdne955:0', + 'incident-templates' => 'crwdns956:0crwdne956:0', + 'updates' => [ + 'title' => 'crwdns1402:0crwdne1402:0', + 'count' => 'crwdns1439:0{0}crwdnd1439:0[1]crwdnd1439:0[2]crwdne1439:0', + 'add' => [ + 'title' => 'crwdns1404:0crwdne1404:0', + 'success' => 'crwdns1405:0crwdne1405:0', + 'failure' => 'crwdns1406:0crwdne1406:0', + ], + 'edit' => [ + 'title' => 'crwdns1407:0crwdne1407:0', + 'success' => 'crwdns1408:0crwdne1408:0', + 'failure' => 'crwdns1409:0crwdne1409:0', + ], + ], + 'reported_by' => 'crwdns1542:0crwdne1542:0', + 'add' => [ + 'title' => 'crwdns958:0crwdne958:0', + 'success' => 'crwdns959:0crwdne959:0', + 'failure' => 'crwdns960:0crwdne960:0', + ], + 'edit' => [ + 'title' => 'crwdns961:0crwdne961:0', + 'success' => 'crwdns962:0crwdne962:0', + 'failure' => 'crwdns963:0crwdne963:0', + ], + 'delete' => [ + 'success' => 'crwdns964:0crwdne964:0', + 'failure' => 'crwdns965:0crwdne965:0', + ], + + // Incident templates + 'templates' => [ + 'title' => 'crwdns968:0crwdne968:0', + 'add' => [ + 'title' => 'crwdns969:0crwdne969:0', + 'message' => 'crwdns1443:0crwdne1443:0', + 'success' => 'crwdns971:0crwdne971:0', + 'failure' => 'crwdns972:0crwdne972:0', + ], + 'edit' => [ + 'title' => 'crwdns973:0crwdne973:0', + 'success' => 'crwdns974:0crwdne974:0', + 'failure' => 'crwdns975:0crwdne975:0', + ], + 'delete' => [ + 'success' => 'crwdns976:0crwdne976:0', + 'failure' => 'crwdns977:0crwdne977:0', + ], + ], + ], + + // Incident Maintenance + 'schedule' => [ + 'schedule' => 'crwdns1410:0crwdne1410:0', + 'logged' => 'crwdns1440:0{0}crwdnd1440:0[1]crwdne1440:0', + 'scheduled_at' => 'crwdns980:0crwdne980:0', + 'add' => [ + 'title' => 'crwdns1412:0crwdne1412:0', + 'success' => 'crwdns1413:0crwdne1413:0', + 'failure' => 'crwdns1414:0crwdne1414:0', + ], + 'edit' => [ + 'title' => 'crwdns1415:0crwdne1415:0', + 'success' => 'crwdns1416:0crwdne1416:0', + 'failure' => 'crwdns1417:0crwdne1417:0', + ], + 'delete' => [ + 'success' => 'crwdns1418:0crwdne1418:0', + 'failure' => 'crwdns1419:0crwdne1419:0', + ], + ], + + // Components + 'components' => [ + 'components' => 'crwdns989:0crwdne989:0', + 'component_statuses' => 'crwdns990:0crwdne990:0', + 'listed_group' => 'crwdns991:0crwdne991:0', + 'add' => [ + 'title' => 'crwdns992:0crwdne992:0', + 'message' => 'crwdns993:0crwdne993:0', + 'success' => 'crwdns994:0crwdne994:0', + 'failure' => 'crwdns995:0crwdne995:0', + ], + 'edit' => [ + 'title' => 'crwdns996:0crwdne996:0', + 'success' => 'crwdns997:0crwdne997:0', + 'failure' => 'crwdns998:0crwdne998:0', + ], + 'delete' => [ + 'success' => 'crwdns999:0crwdne999:0', + 'failure' => 'crwdns1000:0crwdne1000:0', + ], + + // Component groups + 'groups' => [ + 'groups' => 'crwdns1001:0crwdne1001:0', + 'no_components' => 'crwdns1002:0crwdne1002:0', + 'add' => [ + 'title' => 'crwdns1003:0crwdne1003:0', + 'success' => 'crwdns1004:0crwdne1004:0', + 'failure' => 'crwdns1005:0crwdne1005:0', + ], + 'edit' => [ + 'title' => 'crwdns1006:0crwdne1006:0', + 'success' => 'crwdns1007:0crwdne1007:0', + 'failure' => 'crwdns1008:0crwdne1008:0', + ], + 'delete' => [ + 'success' => 'crwdns1009:0crwdne1009:0', + 'failure' => 'crwdns1010:0crwdne1010:0', + ], + ], + ], + + // Metrics + 'metrics' => [ + 'metrics' => 'crwdns1011:0crwdne1011:0', + 'add' => [ + 'title' => 'crwdns1012:0crwdne1012:0', + 'message' => 'crwdns1013:0crwdne1013:0', + 'success' => 'crwdns1014:0crwdne1014:0', + 'failure' => 'crwdns1015:0crwdne1015:0', + ], + 'edit' => [ + 'title' => 'crwdns1016:0crwdne1016:0', + 'success' => 'crwdns1017:0crwdne1017:0', + 'failure' => 'crwdns1018:0crwdne1018:0', + ], + 'delete' => [ + 'success' => 'crwdns1019:0crwdne1019:0', + 'failure' => 'crwdns1020:0crwdne1020:0', + ], + ], + // Subscribers + 'subscribers' => [ + 'subscribers' => 'crwdns1021:0crwdne1021:0', + 'description' => 'crwdns1022:0crwdne1022:0', + 'description_disabled' => 'crwdns1420:0crwdne1420:0', + 'verified' => 'crwdns1023:0crwdne1023:0', + 'not_verified' => 'crwdns1024:0crwdne1024:0', + 'subscriber' => 'crwdns1025:0crwdne1025:0', + 'no_subscriptions' => 'crwdns1026:0crwdne1026:0', + 'global' => 'crwdns1421:0crwdne1421:0', + 'add' => [ + 'title' => 'crwdns1027:0crwdne1027:0', + 'success' => 'crwdns1028:0crwdne1028:0', + 'failure' => 'crwdns1029:0crwdne1029:0', + 'help' => 'crwdns1030:0crwdne1030:0', + ], + 'edit' => [ + 'title' => 'crwdns1031:0crwdne1031:0', + 'success' => 'crwdns1032:0crwdne1032:0', + 'failure' => 'crwdns1033:0crwdne1033:0', + ], + ], + + // Team + 'team' => [ + 'team' => 'crwdns1034:0crwdne1034:0', + 'member' => 'crwdns1035:0crwdne1035:0', + 'profile' => 'crwdns1036:0crwdne1036:0', + 'description' => 'crwdns1325:0crwdne1325:0', + 'add' => [ + 'title' => 'crwdns1038:0crwdne1038:0', + 'success' => 'crwdns1039:0crwdne1039:0', + 'failure' => 'crwdns1040:0crwdne1040:0', + ], + 'edit' => [ + 'title' => 'crwdns1041:0crwdne1041:0', + 'success' => 'crwdns1042:0crwdne1042:0', + 'failure' => 'crwdns1043:0crwdne1043:0', + ], + 'delete' => [ + 'success' => 'crwdns1044:0crwdne1044:0', + 'failure' => 'crwdns1045:0crwdne1045:0', + ], + 'invite' => [ + 'title' => 'crwdns1046:0crwdne1046:0', + 'success' => 'crwdns1047:0crwdne1047:0', + 'failure' => 'crwdns1048:0crwdne1048:0', + ], + ], + + // Settings + 'settings' => [ + 'settings' => 'crwdns1049:0crwdne1049:0', + 'app-setup' => [ + 'app-setup' => 'crwdns1050:0crwdne1050:0', + 'images-only' => 'crwdns1051:0crwdne1051:0', + 'too-big' => 'crwdns1052:0crwdne1052:0', + ], + 'analytics' => [ + 'analytics' => 'crwdns1053:0crwdne1053:0', + ], + 'log' => [ + 'log' => 'crwdns1054:0crwdne1054:0', + ], + 'localization' => [ + 'localization' => 'crwdns1055:0crwdne1055:0', + ], + 'customization' => [ + 'customization' => 'crwdns1056:0crwdne1056:0', + 'header' => 'crwdns1057:0crwdne1057:0', + 'footer' => 'crwdns1058:0crwdne1058:0', + ], + 'mail' => [ + 'mail' => 'crwdns1059:0crwdne1059:0', + 'test' => 'crwdns1060:0crwdne1060:0', + 'email' => [ + 'subject' => 'crwdns1061:0crwdne1061:0', + 'body' => 'crwdns1062:0crwdne1062:0', + ], + ], + 'security' => [ + 'security' => 'crwdns1063:0crwdne1063:0', + 'two-factor' => 'crwdns1064:0crwdne1064:0', + ], + 'stylesheet' => [ + 'stylesheet' => 'crwdns1065:0crwdne1065:0', + ], + 'theme' => [ + 'theme' => 'crwdns1066:0crwdne1066:0', + ], + 'edit' => [ + 'success' => 'crwdns1067:0crwdne1067:0', + 'failure' => 'crwdns1068:0crwdne1068:0', + ], + 'credits' => [ + 'credits' => 'crwdns1069:0crwdne1069:0', + 'contributors' => 'crwdns1070:0crwdne1070:0', + 'license' => 'crwdns1071:0%20Ccrwdnd1071:0%20crwdne1071:0', + 'backers-title' => 'crwdns1072:0crwdne1072:0', + 'backers' => 'crwdns1073:0crwdne1073:0', + 'thank-you' => 'crwdns1074:0crwdne1074:0', + ], + ], + + // Login + 'login' => [ + 'login' => 'crwdns1075:0crwdne1075:0', + 'logged_in' => 'crwdns1076:0crwdne1076:0', + 'welcome' => 'crwdns1077:0crwdne1077:0', + 'two-factor' => 'crwdns1078:0crwdne1078:0', + ], + + // Sidebar footer + 'help' => 'crwdns1079:0crwdne1079:0', + 'status_page' => 'crwdns1080:0crwdne1080:0', + 'logout' => 'crwdns1081:0crwdne1081:0', + + // Notifications + 'notifications' => [ + 'notifications' => 'crwdns1082:0crwdne1082:0', + 'awesome' => 'crwdns1083:0crwdne1083:0', + 'whoops' => 'crwdns1084:0crwdne1084:0', + ], + + // Widgets + 'widgets' => [ + 'support' => 'crwdns1085:0crwdne1085:0', + 'support_subtitle' => 'crwdns1086:0crwdne1086:0', + 'news' => 'crwdns1087:0crwdne1087:0', + 'news_subtitle' => 'crwdns1088:0crwdne1088:0', + ], + + // Welcome modal + 'welcome' => [ + 'welcome' => 'crwdns1089:0crwdne1089:0', + 'message' => 'crwdns1090:0crwdne1090:0', + 'close' => 'crwdns1091:0crwdne1091:0', + 'steps' => [ + 'component' => 'crwdns1092:0crwdne1092:0', + 'incident' => 'crwdns1093:0crwdne1093:0', + 'customize' => 'crwdns1094:0crwdne1094:0', + 'team' => 'crwdns1095:0crwdne1095:0', + 'api' => 'crwdns1096:0crwdne1096:0', + 'two-factor' => 'crwdns1097:0crwdne1097:0', + ], + ], + +]; diff --git a/resources/lang/zu-ZA/forms.php b/resources/lang/zu-ZA/forms.php new file mode 100644 index 000000000000..67bf72c1f009 --- /dev/null +++ b/resources/lang/zu-ZA/forms.php @@ -0,0 +1,253 @@ + [ + 'email' => 'crwdns1098:0crwdne1098:0', + 'username' => 'crwdns1099:0crwdne1099:0', + 'password' => 'crwdns1100:0crwdne1100:0', + 'site_name' => 'crwdns1101:0crwdne1101:0', + 'site_domain' => 'crwdns1102:0crwdne1102:0', + 'site_timezone' => 'crwdns1103:0crwdne1103:0', + 'site_locale' => 'crwdns1104:0crwdne1104:0', + 'enable_google2fa' => 'crwdns1105:0crwdne1105:0', + 'cache_driver' => 'crwdns1106:0crwdne1106:0', + 'queue_driver' => 'crwdns1107:0crwdne1107:0', + 'session_driver' => 'crwdns1108:0crwdne1108:0', + 'mail_driver' => 'crwdns1109:0crwdne1109:0', + 'mail_host' => 'crwdns1110:0crwdne1110:0', + 'mail_address' => 'crwdns1111:0crwdne1111:0', + 'mail_username' => 'crwdns1112:0crwdne1112:0', + 'mail_password' => 'crwdns1113:0crwdne1113:0', + ], + + // Login form fields + 'login' => [ + 'login' => 'crwdns1114:0crwdne1114:0', + 'email' => 'crwdns1115:0crwdne1115:0', + 'password' => 'crwdns1116:0crwdne1116:0', + '2fauth' => 'crwdns1117:0crwdne1117:0', + 'invalid' => 'crwdns1118:0crwdne1118:0', + 'invalid-token' => 'crwdns1119:0crwdne1119:0', + 'cookies' => 'crwdns1120:0crwdne1120:0', + 'rate-limit' => 'crwdns1121:0crwdne1121:0', + 'remember_me' => 'crwdns1122:0crwdne1122:0', + ], + + // Incidents form fields + 'incidents' => [ + 'name' => 'crwdns1123:0crwdne1123:0', + 'status' => 'crwdns1124:0crwdne1124:0', + 'component' => 'crwdns1125:0crwdne1125:0', + 'component_status' => 'crwdns1425:0crwdne1425:0', + 'message' => 'crwdns1126:0crwdne1126:0', + 'message-help' => 'crwdns1127:0crwdne1127:0', + 'occurred_at' => 'crwdns1128:0crwdne1128:0', + 'notify_subscribers' => 'crwdns1129:0crwdne1129:0', + 'notify_disabled' => 'crwdns1426:0crwdne1426:0', + 'visibility' => 'crwdns1130:0crwdne1130:0', + 'stick_status' => 'crwdns1131:0crwdne1131:0', + 'stickied' => 'crwdns1132:0crwdne1132:0', + 'not_stickied' => 'crwdns1133:0crwdne1133:0', + 'public' => 'crwdns1134:0crwdne1134:0', + 'logged_in_only' => 'crwdns1135:0crwdne1135:0', + 'templates' => [ + 'name' => 'crwdns1136:0crwdne1136:0', + 'template' => 'crwdns1137:0crwdne1137:0', + 'twig' => 'crwdns1138:0crwdne1138:0', + ], + ], + + 'schedules' => [ + 'name' => 'crwdns1139:0crwdne1139:0', + 'status' => 'crwdns1140:0crwdne1140:0', + 'message' => 'crwdns1141:0crwdne1141:0', + 'message-help' => 'crwdns1142:0crwdne1142:0', + 'scheduled_at' => 'crwdns1143:0crwdne1143:0', + 'completed_at' => 'crwdns1144:0crwdne1144:0', + 'templates' => [ + 'name' => 'crwdns1145:0crwdne1145:0', + 'template' => 'crwdns1146:0crwdne1146:0', + 'twig' => 'crwdns1147:0crwdne1147:0', + ], + ], + + // Components form fields + 'components' => [ + 'name' => 'crwdns1148:0crwdne1148:0', + 'status' => 'crwdns1149:0crwdne1149:0', + 'group' => 'crwdns1150:0crwdne1150:0', + 'description' => 'crwdns1151:0crwdne1151:0', + 'link' => 'crwdns1152:0crwdne1152:0', + 'tags' => 'crwdns1153:0crwdne1153:0', + 'tags-help' => 'crwdns1154:0crwdne1154:0', + 'enabled' => 'crwdns1155:0crwdne1155:0', + + 'groups' => [ + 'name' => 'crwdns1156:0crwdne1156:0', + 'collapsing' => 'crwdns1157:0crwdne1157:0', + 'visible' => 'crwdns1158:0crwdne1158:0', + 'collapsed' => 'crwdns1159:0crwdne1159:0', + 'collapsed_incident' => 'crwdns1160:0crwdne1160:0', + 'visibility' => 'crwdns1161:0crwdne1161:0', + 'visibility_public' => 'crwdns1162:0crwdne1162:0', + 'visibility_authenticated' => 'crwdns1163:0crwdne1163:0', + ], + ], + + // Action form fields + 'actions' => [ + 'name' => 'crwdns1164:0crwdne1164:0', + 'description' => 'crwdns1165:0crwdne1165:0', + 'start_at' => 'crwdns1166:0crwdne1166:0', + 'timezone' => 'crwdns1167:0crwdne1167:0', + 'schedule_frequency' => 'crwdns1168:0crwdne1168:0', + 'completion_latency' => 'crwdns1169:0crwdne1169:0', + 'group' => 'crwdns1170:0crwdne1170:0', + 'active' => 'crwdns1171:0crwdne1171:0', + 'groups' => [ + 'name' => 'crwdns1172:0crwdne1172:0', + ], + ], + + // Metric form fields + 'metrics' => [ + 'name' => 'crwdns1173:0crwdne1173:0', + 'suffix' => 'crwdns1174:0crwdne1174:0', + 'description' => 'crwdns1175:0crwdne1175:0', + 'description-help' => 'crwdns1176:0crwdne1176:0', + 'display-chart' => 'crwdns1177:0crwdne1177:0', + 'default-value' => 'crwdns1178:0crwdne1178:0', + 'calc_type' => 'crwdns1179:0crwdne1179:0', + 'type_sum' => 'crwdns1180:0crwdne1180:0', + 'type_avg' => 'crwdns1181:0crwdne1181:0', + 'places' => 'crwdns1182:0crwdne1182:0', + 'default_view' => 'crwdns1183:0crwdne1183:0', + 'threshold' => 'crwdns1184:0crwdne1184:0', + 'visibility' => 'crwdns1185:0crwdne1185:0', + 'visibility_authenticated' => 'crwdns1186:0crwdne1186:0', + 'visibility_public' => 'crwdns1187:0crwdne1187:0', + 'visibility_hidden' => 'crwdns1188:0crwdne1188:0', + + 'points' => [ + 'value' => 'crwdns1189:0crwdne1189:0', + ], + ], + + // Settings + 'settings' => [ + // Application setup + 'app-setup' => [ + 'site-name' => 'crwdns1190:0crwdne1190:0', + 'site-url' => 'crwdns1191:0crwdne1191:0', + 'display-graphs' => 'crwdns1192:0crwdne1192:0', + 'about-this-page' => 'crwdns1193:0crwdne1193:0', + 'days-of-incidents' => 'crwdns1194:0crwdne1194:0', + 'time_before_refresh' => 'crwdns1434:0crwdne1434:0', + 'major_outage_rate' => 'crwdns1444:0crwdne1444:0', + 'banner' => 'crwdns1195:0crwdne1195:0', + 'banner-help' => 'crwdns1435:0crwdne1435:0', + 'subscribers' => 'crwdns1197:0crwdne1197:0', + 'suppress_notifications_in_maintenance' => 'crwdns1427:0crwdne1427:0', + 'skip_subscriber_verification' => 'crwdns1198:0crwdne1198:0', + 'automatic_localization' => 'crwdns1199:0crwdne1199:0', + 'enable_external_dependencies' => 'crwdns1200:0crwdne1200:0', + 'show_timezone' => 'crwdns1436:0crwdne1436:0', + 'only_disrupted_days' => 'crwdns1202:0crwdne1202:0', + ], + 'analytics' => [ + 'analytics_google' => 'crwdns1203:0crwdne1203:0', + 'analytics_gosquared' => 'crwdns1204:0crwdne1204:0', + 'analytics_piwik_url' => 'crwdns1524:0crwdne1524:0', + 'analytics_piwik_siteid' => 'crwdns1206:0crwdne1206:0', + ], + 'localization' => [ + 'site-timezone' => 'crwdns1207:0crwdne1207:0', + 'site-locale' => 'crwdns1208:0crwdne1208:0', + 'date-format' => 'crwdns1209:0crwdne1209:0', + 'incident-date-format' => 'crwdns1210:0crwdne1210:0', + ], + 'security' => [ + 'allowed-domains' => 'crwdns1211:0crwdne1211:0', + 'allowed-domains-help' => 'crwdns1212:0crwdne1212:0', + 'always-authenticate' => 'crwdns1445:0crwdne1445:0', + 'always-authenticate-help' => 'crwdns1446:0crwdne1446:0', + ], + 'stylesheet' => [ + 'custom-css' => 'crwdns1213:0crwdne1213:0', + ], + 'theme' => [ + 'background-color' => 'crwdns1214:0crwdne1214:0', + 'background-fills' => 'crwdns1215:0crwdne1215:0', + 'banner-background-color' => 'crwdns1216:0crwdne1216:0', + 'banner-padding' => 'crwdns1217:0crwdne1217:0', + 'fullwidth-banner' => 'crwdns1442:0crwdne1442:0', + 'text-color' => 'crwdns1219:0crwdne1219:0', + 'dashboard-login' => 'crwdns1220:0crwdne1220:0', + 'reds' => 'crwdns1221:0crwdne1221:0', + 'blues' => 'crwdns1222:0crwdne1222:0', + 'greens' => 'crwdns1223:0crwdne1223:0', + 'yellows' => 'crwdns1224:0crwdne1224:0', + 'oranges' => 'crwdns1225:0crwdne1225:0', + 'metrics' => 'crwdns1226:0crwdne1226:0', + 'links' => 'crwdns1227:0crwdne1227:0', + ], + ], + + 'user' => [ + 'username' => 'crwdns1228:0crwdne1228:0', + 'email' => 'crwdns1229:0crwdne1229:0', + 'password' => 'crwdns1230:0crwdne1230:0', + 'api-token' => 'crwdns1231:0crwdne1231:0', + 'api-token-help' => 'crwdns1232:0crwdne1232:0', + 'gravatar' => 'crwdns1233:0crwdne1233:0', + 'user_level' => 'crwdns1234:0crwdne1234:0', + 'levels' => [ + 'admin' => 'crwdns1235:0crwdne1235:0', + 'user' => 'crwdns1236:0crwdne1236:0', + ], + '2fa' => [ + 'help' => 'crwdns1237:0crwdne1237:0', + ], + 'team' => [ + 'description' => 'crwdns1238:0crwdne1238:0', + 'email' => 'crwdns1423:0crwdne1423:0', + ], + ], + + 'general' => [ + 'timezone' => 'crwdns1240:0crwdne1240:0', + ], + + 'seo' => [ + 'title' => 'crwdns1526:0crwdne1526:0', + 'description' => 'crwdns1528:0crwdne1528:0', + ], + + // Buttons + 'add' => 'crwdns1241:0crwdne1241:0', + 'save' => 'crwdns1242:0crwdne1242:0', + 'update' => 'crwdns1243:0crwdne1243:0', + 'create' => 'crwdns1244:0crwdne1244:0', + 'edit' => 'crwdns1245:0crwdne1245:0', + 'delete' => 'crwdns1246:0crwdne1246:0', + 'submit' => 'crwdns1247:0crwdne1247:0', + 'cancel' => 'crwdns1248:0crwdne1248:0', + 'remove' => 'crwdns1249:0crwdne1249:0', + 'invite' => 'crwdns1250:0crwdne1250:0', + 'signup' => 'crwdns1251:0crwdne1251:0', + 'manage_updates' => 'crwdns1424:0crwdne1424:0', + + // Other + 'optional' => 'crwdns1252:0crwdne1252:0', +]; diff --git a/resources/lang/zu-ZA/notifications.php b/resources/lang/zu-ZA/notifications.php new file mode 100644 index 000000000000..b8bd9f13ca41 --- /dev/null +++ b/resources/lang/zu-ZA/notifications.php @@ -0,0 +1,116 @@ + [ + 'status_update' => [ + 'mail' => [ + 'subject' => 'crwdns1354:0crwdne1354:0', + 'greeting' => 'crwdns1355:0crwdne1355:0', + 'content' => 'crwdns1356:0crwdne1356:0', + 'action' => 'crwdns1357:0crwdne1357:0', + ], + 'slack' => [ + 'title' => 'crwdns1358:0crwdne1358:0', + 'content' => 'crwdns1359:0crwdne1359:0', + ], + 'sms' => [ + 'content' => 'crwdns1360:0crwdne1360:0', + ], + ], + ], + 'incident' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'crwdns1361:0crwdne1361:0', + 'greeting' => 'crwdns1362:0crwdne1362:0', + 'content' => 'crwdns1363:0crwdne1363:0', + 'action' => 'crwdns1364:0crwdne1364:0', + ], + 'slack' => [ + 'title' => 'crwdns1365:0crwdne1365:0', + 'content' => 'crwdns1366:0crwdne1366:0', + ], + 'sms' => [ + 'content' => 'crwdns1367:0crwdne1367:0', + ], + ], + 'update' => [ + 'mail' => [ + 'subject' => 'crwdns1368:0crwdne1368:0', + 'content' => 'crwdns1369:0crwdne1369:0', + 'title' => 'crwdns1370:0crwdne1370:0', + 'action' => 'crwdns1371:0crwdne1371:0', + ], + 'slack' => [ + 'title' => 'crwdns1372:0crwdne1372:0', + 'content' => 'crwdns1373:0crwdne1373:0', + ], + 'sms' => [ + 'content' => 'crwdns1374:0crwdne1374:0', + ], + ], + ], + 'schedule' => [ + 'new' => [ + 'mail' => [ + 'subject' => 'crwdns1375:0crwdne1375:0', + 'content' => 'crwdns1376:0crwdne1376:0', + 'title' => 'crwdns1377:0crwdne1377:0', + 'action' => 'crwdns1378:0crwdne1378:0', + ], + 'slack' => [ + 'title' => 'crwdns1379:0crwdne1379:0', + 'content' => 'crwdns1380:0crwdne1380:0', + ], + 'sms' => [ + 'content' => 'crwdns1381:0crwdne1381:0', + ], + ], + ], + 'subscriber' => [ + 'verify' => [ + 'mail' => [ + 'subject' => 'crwdns1382:0crwdne1382:0', + 'content' => 'crwdns1383:0crwdne1383:0', + 'title' => 'crwdns1384:0crwdne1384:0', + 'action' => 'crwdns1385:0crwdne1385:0', + ], + ], + 'manage' => [ + 'mail' => [ + 'subject' => 'crwdns1532:0crwdne1532:0', + 'content' => 'crwdns1534:0crwdne1534:0', + 'title' => 'crwdns1536:0crwdne1536:0', + 'action' => 'crwdns1538:0crwdne1538:0', + ], + ], + ], + 'system' => [ + 'test' => [ + 'mail' => [ + 'subject' => 'crwdns1386:0crwdne1386:0', + 'content' => 'crwdns1387:0crwdne1387:0', + 'title' => 'crwdns1388:0crwdne1388:0', + ], + ], + ], + 'user' => [ + 'invite' => [ + 'mail' => [ + 'subject' => 'crwdns1389:0crwdne1389:0', + 'content' => 'crwdns1390:0crwdne1390:0', + 'title' => 'crwdns1391:0crwdne1391:0', + 'action' => 'crwdns1392:0crwdne1392:0', + ], + ], + ], +]; diff --git a/resources/lang/zu-ZA/pagination.php b/resources/lang/zu-ZA/pagination.php new file mode 100644 index 000000000000..325882060d06 --- /dev/null +++ b/resources/lang/zu-ZA/pagination.php @@ -0,0 +1,28 @@ + 'crwdns1393:0crwdne1393:0', + 'next' => 'crwdns1394:0crwdne1394:0', + +]; diff --git a/resources/lang/zu-ZA/setup.php b/resources/lang/zu-ZA/setup.php new file mode 100644 index 000000000000..4f7bbbeed144 --- /dev/null +++ b/resources/lang/zu-ZA/setup.php @@ -0,0 +1,23 @@ + 'crwdns1255:0crwdne1255:0', + 'title' => 'crwdns1256:0crwdne1256:0', + 'service_details' => 'crwdns1257:0crwdne1257:0', + 'env_setup' => 'crwdns1258:0crwdne1258:0', + 'status_page_setup' => 'crwdns1259:0crwdne1259:0', + 'show_support' => 'crwdns1260:0crwdne1260:0', + 'admin_account' => 'crwdns1261:0crwdne1261:0', + 'complete_setup' => 'crwdns1262:0crwdne1262:0', + 'completed' => 'crwdns1263:0crwdne1263:0', + 'finish_setup' => 'crwdns1264:0crwdne1264:0', +]; diff --git a/resources/lang/zu-ZA/validation.php b/resources/lang/zu-ZA/validation.php new file mode 100644 index 000000000000..8a727c3857da --- /dev/null +++ b/resources/lang/zu-ZA/validation.php @@ -0,0 +1,122 @@ + 'crwdns1265:0crwdne1265:0', + 'active_url' => 'crwdns1266:0crwdne1266:0', + 'after' => 'crwdns1267:0crwdne1267:0', + 'alpha' => 'crwdns1268:0crwdne1268:0', + 'alpha_dash' => 'crwdns1269:0crwdne1269:0', + 'alpha_num' => 'crwdns1270:0crwdne1270:0', + 'array' => 'crwdns1271:0crwdne1271:0', + 'before' => 'crwdns1272:0crwdne1272:0', + 'between' => [ + 'numeric' => 'crwdns1273:0crwdne1273:0', + 'file' => 'crwdns1274:0crwdne1274:0', + 'string' => 'crwdns1275:0crwdne1275:0', + 'array' => 'crwdns1276:0crwdne1276:0', + ], + 'boolean' => 'crwdns1277:0crwdne1277:0', + 'confirmed' => 'crwdns1278:0crwdne1278:0', + 'date' => 'crwdns1279:0crwdne1279:0', + 'date_format' => 'crwdns1280:0crwdne1280:0', + 'different' => 'crwdns1281:0crwdne1281:0', + 'digits' => 'crwdns1282:0crwdne1282:0', + 'digits_between' => 'crwdns1283:0crwdne1283:0', + 'email' => 'crwdns1284:0crwdne1284:0', + 'exists' => 'crwdns1285:0crwdne1285:0', + 'distinct' => 'crwdns1286:0crwdne1286:0', + 'filled' => 'crwdns1287:0crwdne1287:0', + 'image' => 'crwdns1288:0crwdne1288:0', + 'in' => 'crwdns1289:0crwdne1289:0', + 'in_array' => 'crwdns1290:0crwdne1290:0', + 'integer' => 'crwdns1291:0crwdne1291:0', + 'ip' => 'crwdns1292:0crwdne1292:0', + 'json' => 'crwdns1293:0crwdne1293:0', + 'max' => [ + 'numeric' => 'crwdns1294:0crwdne1294:0', + 'file' => 'crwdns1295:0crwdne1295:0', + 'string' => 'crwdns1296:0crwdne1296:0', + 'array' => 'crwdns1297:0crwdne1297:0', + ], + 'mimes' => 'crwdns1298:0crwdne1298:0', + 'min' => [ + 'numeric' => 'crwdns1299:0crwdne1299:0', + 'file' => 'crwdns1300:0crwdne1300:0', + 'string' => 'crwdns1301:0crwdne1301:0', + 'array' => 'crwdns1302:0crwdne1302:0', + ], + 'not_in' => 'crwdns1303:0crwdne1303:0', + 'numeric' => 'crwdns1304:0crwdne1304:0', + 'present' => 'crwdns1305:0crwdne1305:0', + 'regex' => 'crwdns1306:0crwdne1306:0', + 'required' => 'crwdns1307:0crwdne1307:0', + 'required_if' => 'crwdns1308:0crwdne1308:0', + 'required_unless' => 'crwdns1309:0crwdne1309:0', + 'required_with' => 'crwdns1310:0crwdne1310:0', + 'required_with_all' => 'crwdns1311:0crwdne1311:0', + 'required_without' => 'crwdns1312:0crwdne1312:0', + 'required_without_all' => 'crwdns1313:0crwdne1313:0', + 'same' => 'crwdns1314:0crwdne1314:0', + 'size' => [ + 'numeric' => 'crwdns1315:0crwdne1315:0', + 'file' => 'crwdns1316:0crwdne1316:0', + 'string' => 'crwdns1317:0crwdne1317:0', + 'array' => 'crwdns1318:0crwdne1318:0', + ], + 'string' => 'crwdns1319:0crwdne1319:0', + 'timezone' => 'crwdns1320:0crwdne1320:0', + 'unique' => 'crwdns1321:0crwdne1321:0', + 'url' => 'crwdns1322:0crwdne1322:0', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'crwdns1323:0crwdne1323:0', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 7c17920f1633..a5f709bf9315 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -36,11 +36,13 @@
          + @if(!config('setting.always_authenticate', false)) + @endif
          diff --git a/resources/views/auth/two-factor-auth.blade.php b/resources/views/auth/two-factor-auth.blade.php index 17d89b406a3e..4e339644658f 100644 --- a/resources/views/auth/two-factor-auth.blade.php +++ b/resources/views/auth/two-factor-auth.blade.php @@ -28,7 +28,7 @@
          - +
          diff --git a/resources/views/dashboard/components/add.blade.php b/resources/views/dashboard/components/add.blade.php index d423a080c5fe..da0efe073d95 100644 --- a/resources/views/dashboard/components/add.blade.php +++ b/resources/views/dashboard/components/add.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          diff --git a/resources/views/dashboard/components/edit.blade.php b/resources/views/dashboard/components/edit.blade.php index 4b57873d724a..a5d37796cf5f 100644 --- a/resources/views/dashboard/components/edit.blade.php +++ b/resources/views/dashboard/components/edit.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -53,7 +53,7 @@
          - + {{ trans('forms.components.tags-help') }}
          @@ -65,8 +65,8 @@
          - - + +
          diff --git a/resources/views/dashboard/components/groups/add.blade.php b/resources/views/dashboard/components/groups/add.blade.php index 3fe2219b1c3f..836e11d9c854 100644 --- a/resources/views/dashboard/components/groups/add.blade.php +++ b/resources/views/dashboard/components/groups/add.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -24,16 +24,16 @@
          - - +
          diff --git a/resources/views/dashboard/components/groups/edit.blade.php b/resources/views/dashboard/components/groups/edit.blade.php index 84f922890e26..1aef2dc676a6 100644 --- a/resources/views/dashboard/components/groups/edit.blade.php +++ b/resources/views/dashboard/components/groups/edit.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          diff --git a/resources/views/dashboard/components/groups/index.blade.php b/resources/views/dashboard/components/groups/index.blade.php index 1e0160b9a708..aa46c0d3a9d2 100644 --- a/resources/views/dashboard/components/groups/index.blade.php +++ b/resources/views/dashboard/components/groups/index.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @forelse($groups as $group) diff --git a/resources/views/dashboard/components/index.blade.php b/resources/views/dashboard/components/index.blade.php index e3db3ceb2fe4..5835a4773b6c 100644 --- a/resources/views/dashboard/components/index.blade.php +++ b/resources/views/dashboard/components/index.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @forelse($components as $component) @@ -25,7 +23,7 @@ @if($components->count() > 1) @endif - {{ $component->name }} {{ $component->human_status }} + {!! $component->name !!} {{ $component->human_status }} @if($component->group)

          {{ trans('dashboard.components.listed_group', ['name' => $component->group->name]) }}

          diff --git a/resources/views/dashboard/incidents/add.blade.php b/resources/views/dashboard/incidents/add.blade.php index 7c1118dcee48..421013bcf6c7 100644 --- a/resources/views/dashboard/incidents/add.blade.php +++ b/resources/views/dashboard/incidents/add.blade.php @@ -13,125 +13,140 @@
          - @include('dashboard.partials.errors') - - -
          - @if($incident_templates->count() > 0) -
          - - -
          - @endif -
          - - -
          -
          -
          - - - - -
          -
          - - -
          -
          - - -
          - @if(!$components_in_groups->isEmpty() || !$components_out_groups->isEmpty()) -
          - - +
          + @if($incidentTemplates->count() > 0) +
          + + - {{ trans('forms.optional') }} -
          - @endif -
          +
          + {{ trans('forms.optional') }} + +
          + @if($notificationsEnabled) + +
          + +
          + @endif +
          + {{ trans('forms.optional') }} + +
          +
          + {{ trans('forms.optional') }} + +
          +
          -
          -
          - - {{ trans('forms.cancel') }} +
          +
          + + {{ trans('forms.cancel') }} +
          -
          - + +
          diff --git a/resources/views/dashboard/incidents/edit.blade.php b/resources/views/dashboard/incidents/edit.blade.php index afd1fb4af778..525a861b439b 100644 --- a/resources/views/dashboard/incidents/edit.blade.php +++ b/resources/views/dashboard/incidents/edit.blade.php @@ -13,7 +13,12 @@
          - @include('dashboard.partials.errors') + @if(!$notificationsEnabled) + + @endif + @include('partials.errors')
          @@ -44,6 +49,25 @@ {{ trans('cachet.incidents.status')[4] }}
          + @if($incident->component) + + @endif
          - - + +
          @if($incident->component) @@ -84,13 +108,19 @@
          - {{ trans('forms.optional') }} - + {{ trans('forms.optional') }} + +
          +
          + {{ trans('forms.optional') }} + +
          +
          + {{ trans('forms.optional') }} +
          - id}}> -
          diff --git a/resources/views/dashboard/incidents/index.blade.php b/resources/views/dashboard/incidents/index.blade.php index e09f63fbfd16..69103049676e 100644 --- a/resources/views/dashboard/incidents/index.blade.php +++ b/resources/views/dashboard/incidents/index.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -17,21 +15,24 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')

          {!! trans_choice('dashboard.incidents.logged', $incidents->count(), ['count' => $incidents->count()]) !!}

          @foreach($incidents as $incident)
          - {{ $incident->name }} {{ trans_choice('dashboard.incidents.updates', $incident->updates->count()) }} + {{ $incident->name }} {{ trans_choice('dashboard.incidents.updates.count', $incident->updates()->count()) }} @if($incident->message) -

          {{ Str::words($incident->message, 5) }}

          +

          {{ Str::words($incident->message, 5) }}

          + @endif + @if ($incident->user) +

          — {{ trans('dashboard.incidents.reported_by', ['timestamp' => $incident->created_at_diff, 'user' => $incident->user->username]) }}

          @endif
          diff --git a/resources/views/dashboard/incidents/updates/add.blade.php b/resources/views/dashboard/incidents/updates/add.blade.php new file mode 100644 index 000000000000..12d99621a689 --- /dev/null +++ b/resources/views/dashboard/incidents/updates/add.blade.php @@ -0,0 +1,119 @@ +@extends('layout.dashboard') + +@section('content') +
          + + + {{ trans('dashboard.incidents.incidents') }} + + > {{ trans('dashboard.incidents.updates.title', ['incident' => $incident->name]) }} > {{ trans('dashboard.incidents.updates.add.title') }} +
          +
          +
          +
          + @if(!$notificationsEnabled) + + @endif + @include('partials.errors') + + + +
          + @if($incidentTemplates->count() > 0) +
          + + +
          + @endif +
          +
          + + + + +
          + @if($incident->component) + + @endif + @if($incident->component) +
          +
          +
          {{ $incident->component->name }}
          +
          +
          + @foreach(trans('cachet.components.status') as $statusID => $status) +
          + +
          + @endforeach +
          +
          +
          +
          + @endif +
          + +
          + +
          +
          +
          + + + +
          +
          + + {{ trans('forms.cancel') }} +
          +
          + +
          +
          +
          +
          +@stop diff --git a/resources/views/dashboard/incidents/update.blade.php b/resources/views/dashboard/incidents/updates/edit.blade.php similarity index 55% rename from resources/views/dashboard/incidents/update.blade.php rename to resources/views/dashboard/incidents/updates/edit.blade.php index a8275a2f1692..7f9f01ff64a5 100644 --- a/resources/views/dashboard/incidents/update.blade.php +++ b/resources/views/dashboard/incidents/updates/edit.blade.php @@ -6,51 +6,72 @@
          - {{ trans('dashboard.incidents.incidents') }} + {{ trans('dashboard.incidents.incidents') }} - > {{ trans('dashboard.incidents.update.title') }} + > {{ trans('dashboard.incidents.updates.title', ['incident' => $incident->name]) }} > {{ trans('dashboard.incidents.updates.edit.title') }}
          - @include('dashboard.partials.errors') -

          {!! trans('dashboard.incidents.update.subtitle', ['incident' => $incident->name]) !!}

          + @if(!$notificationsEnabled) + + @endif + @include('partials.errors')

          + @if($incident->component) +
          +
          +
          {{ $incident->component->name }}
          +
          +
          + @foreach(trans('cachet.components.status') as $statusID => $status) +
          + +
          + @endforeach +
          +
          +
          +
          + @endif
          - +
          - -
          diff --git a/resources/views/dashboard/incidents/updates/index.blade.php b/resources/views/dashboard/incidents/updates/index.blade.php new file mode 100644 index 000000000000..8220a7de50ba --- /dev/null +++ b/resources/views/dashboard/incidents/updates/index.blade.php @@ -0,0 +1,42 @@ +@extends('layout.dashboard') + +@section('content') +
          + + + {{ trans('dashboard.incidents.incidents') }} + + > {{ trans('dashboard.incidents.updates.title', ['incident' => $incident->name]) }} +
          +
          + +
          +
          + @include('partials.errors') + +
          + @foreach($incident->updates as $update) +
          +
          + {{ Str::words($update->message, 8) }} +

          {{ trans('cachet.incidents.posted', ['timestamp' => $update->created_at_diff, 'username' => $update->user->username]) }}

          +
          + +
          + @endforeach +
          +
          +
          +
          +@stop diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index f60191e31060..dce3aaecce43 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -1,93 +1,95 @@ @extends('layout.dashboard') @section('content') -
          - - - {{ trans('dashboard.dashboard') }} - -
          -
          -
          -
          - + +
          +
          + + + {{ trans('dashboard.dashboard') }} +
          -
          - -
          -
          -
          - @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) - @include('dashboard.partials.components') - @else - - @endif -
          -
          -
          - -
          -
          -
          -
          - {{ $incidents->map(function($incident) { return count($incident); })->sum() }} - {{ trans('dashboard.incidents.incidents') }} -
          -
          -
          +
          +
          +
          +
          -
          -
          -
          - -
          -
          -
          +
          +
          +
          + @if(!$componentGroups->isEmpty() || !$ungroupedComponents->isEmpty()) + @include('dashboard.partials.components') + @else + + @endif +
          +
          -
          -
          -
          -
          -
          -
          - {{ trans('dashboard.widgets.support') }} - {!! trans('dashboard.widgets.support_subtitle') !!} +
          +
          +
          + +
          +
          +
          +
          +
          + +
          +
          + +
          +
          +
          +
          -
          - @if($entries) -
          -
          -
          - {{ trans('dashboard.widgets.news') }} - {{ trans('dashboard.widgets.news_subtitle') }} +
          +
          +
          +
          + {{ trans('dashboard.widgets.support') }} + {!! trans('dashboard.widgets.support_subtitle') !!} +
          +
          -
          -
          - @foreach($entries as $entry) - {{ $entry->title }}, {{ $entry->pubDate }} - @endforeach + + @if($entries) +
          +
          +
          + {{ trans('dashboard.widgets.news') }} + {{ trans('dashboard.widgets.news_subtitle') }} +
          +
          +
          + @foreach($entries as $entry) + {{ $entry->title }}, {{ $entry->pubDate }} + @endforeach +
          +
          + @endif
          + @includeWhen($welcomeUser, 'dashboard.partials.welcome-modal')
          - @endif
          -@if ($welcome_user) -@include('dashboard.partials.welcome-modal') -@endif @stop diff --git a/resources/views/dashboard/maintenance/add.blade.php b/resources/views/dashboard/maintenance/add.blade.php new file mode 100644 index 000000000000..07c5d6fa7eac --- /dev/null +++ b/resources/views/dashboard/maintenance/add.blade.php @@ -0,0 +1,80 @@ +@extends('layout.dashboard') + +@section('content') +
          + + + {{ trans('dashboard.schedule.schedule') }} + + > {{ trans('dashboard.schedule.add.title') }} +
          +
          +
          +
          + @include('partials.errors') + + + +
          + @if($incidentTemplates->count() > 0) +
          + + +
          + @endif +
          + + +
          +
          +
          + @foreach(trans('cachet.schedules.status') as $id => $status) + + @endforeach +
          +
          + +
          + +
          +
          +
          + + +
          +
          + + +
          +
          + @if($notificationsEnabled) + +
          + +
          + @endif +
          +
          + + {{ trans('forms.cancel') }} +
          +
          + +
          +
          +
          +
          +@stop diff --git a/resources/views/dashboard/schedule/edit.blade.php b/resources/views/dashboard/maintenance/edit.blade.php similarity index 53% rename from resources/views/dashboard/schedule/edit.blade.php rename to resources/views/dashboard/maintenance/edit.blade.php index 4f65329ab96e..456e0797ae8f 100644 --- a/resources/views/dashboard/schedule/edit.blade.php +++ b/resources/views/dashboard/maintenance/edit.blade.php @@ -13,35 +13,48 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - +
          - @if($incident_templates->count() > 0) + @if($incidentTemplates->count() > 0)
          - +
          @endif
          - - + +
          - +
          + @foreach(trans('cachet.schedules.status') as $id => $status) + + @endforeach +
          +
          +
          - +
          - - + + +
          +
          + +
          diff --git a/resources/views/dashboard/schedule/index.blade.php b/resources/views/dashboard/maintenance/index.blade.php similarity index 90% rename from resources/views/dashboard/schedule/index.blade.php rename to resources/views/dashboard/maintenance/index.blade.php index 43d9df746298..c58a1deea5d2 100644 --- a/resources/views/dashboard/schedule/index.blade.php +++ b/resources/views/dashboard/maintenance/index.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -17,7 +15,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')

          {!! trans_choice('dashboard.schedule.logged', $schedule->count(), ['count' => $schedule->count()]) !!}

          @@ -26,7 +24,7 @@
          {{ $incident->name }}
          - {{ trans('dashboard.schedule.scheduled_at', ['timestamp' => $incident->scheduled_at_iso]) }} + {{ trans('dashboard.schedule.scheduled_at', ['timestamp' => $incident->scheduled_at_formatted]) }} @if($incident->message)

          {{ Str::words($incident->message, 5) }}

          @endif diff --git a/resources/views/dashboard/metrics/add.blade.php b/resources/views/dashboard/metrics/add.blade.php index 0171418155ba..2df0dbbecc12 100644 --- a/resources/views/dashboard/metrics/add.blade.php +++ b/resources/views/dashboard/metrics/add.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -49,7 +49,7 @@
          - +
          @@ -57,7 +57,7 @@
          - +
          +
          + + +
          diff --git a/resources/views/dashboard/metrics/edit.blade.php b/resources/views/dashboard/metrics/edit.blade.php index d86513e9ab9d..0ad227f39894 100644 --- a/resources/views/dashboard/metrics/edit.blade.php +++ b/resources/views/dashboard/metrics/edit.blade.php @@ -13,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -56,8 +56,8 @@
          - - + +
          +
          + + +
          id}}> diff --git a/resources/views/dashboard/metrics/index.blade.php b/resources/views/dashboard/metrics/index.blade.php index a4c2ef8be0f2..31fb0b705aff 100644 --- a/resources/views/dashboard/metrics/index.blade.php +++ b/resources/views/dashboard/metrics/index.blade.php @@ -1,39 +1,39 @@ @extends('layout.dashboard') @section('content') -
          - - - {{ trans('dashboard.metrics.metrics') }} - - - {{ trans('dashboard.metrics.add.title') }} - -
          -
          -
          -
          -
          - @include('dashboard.partials.errors') -
          - @forelse($metrics as $metric) -
          -
          - {{ $metric->name }} - @if($metric->description) -

          {{ Str::words($metric->description, 5) }}

          - @endif -
          -
          - {{ trans('forms.edit') }} - {{ trans('forms.delete') }} +
          + @includeWhen(isset($sub_menu), 'dashboard.partials.sub-sidebar') +
          +
          + + {{ trans('dashboard.metrics.metrics') }} + + + {{ trans('dashboard.metrics.add.title') }} + +
          +
          +
          +
          + @include('partials.errors') +
          + @forelse($metrics as $metric) +
          +
          + {{ $metric->name }} + @if($metric->description) +

          {{ Str::words($metric->description, 5) }}

          + @endif +
          +
          + @empty +
          {{ trans('dashboard.metrics.add.message') }}
          + @endforelse
          - @empty -
          {{ trans('dashboard.metrics.add.message') }}
          - @endforelse
          diff --git a/resources/views/dashboard/partials/component.blade.php b/resources/views/dashboard/partials/component.blade.php index 9a8f019c4180..fdf6e28adbbe 100644 --- a/resources/views/dashboard/partials/component.blade.php +++ b/resources/views/dashboard/partials/component.blade.php @@ -2,7 +2,7 @@
          -
          {{ $component->name }}
          +
          {!! $component->name !!}
          @foreach(trans('cachet.components.status') as $statusID => $status) diff --git a/resources/views/dashboard/partials/components.blade.php b/resources/views/dashboard/partials/components.blade.php index aa9f5496866d..db0c3634efb3 100644 --- a/resources/views/dashboard/partials/components.blade.php +++ b/resources/views/dashboard/partials/components.blade.php @@ -1,5 +1,5 @@ -@if($component_groups->count() > 0) -@foreach($component_groups as $componentGroup) +@if($componentGroups->count() > 0) +@foreach($componentGroups as $componentGroup) @if($componentGroup->enabled_components->count() > 0)
            diff --git a/resources/views/dashboard/partials/sub-sidebar.blade.php b/resources/views/dashboard/partials/sub-sidebar.blade.php index 4c14701cbd16..0d715f6d2a64 100644 --- a/resources/views/dashboard/partials/sub-sidebar.blade.php +++ b/resources/views/dashboard/partials/sub-sidebar.blade.php @@ -2,10 +2,10 @@ -

            {{ $sub_title }}

            +

            {{ $subTitle }}


            diff --git a/resources/views/dashboard/partials/welcome-modal.blade.php b/resources/views/dashboard/partials/welcome-modal.blade.php index 330940690443..e91ad13e253e 100644 --- a/resources/views/dashboard/partials/welcome-modal.blade.php +++ b/resources/views/dashboard/partials/welcome-modal.blade.php @@ -6,7 +6,7 @@
          - - diff --git a/resources/views/dashboard/schedule/add.blade.php b/resources/views/dashboard/schedule/add.blade.php deleted file mode 100644 index 62f68c7a4e1e..000000000000 --- a/resources/views/dashboard/schedule/add.blade.php +++ /dev/null @@ -1,66 +0,0 @@ -@extends('layout.dashboard') - -@section('content') -
          - - - {{ trans('dashboard.schedule.schedule') }} - - > {{ trans('dashboard.schedule.add.title') }} -
          -
          -
          -
          - @include('dashboard.partials.errors') - - - -
          - @if($incident_templates->count() > 0) -
          - - -
          - @endif -
          - - -
          -
          - -
          - -
          -
          -
          - - -
          - @if(subscribers_enabled()) -
          - -
          - @endif -
          - -
          -
          - - {{ trans('forms.cancel') }} -
          -
          - -
          -
          -
          -@stop diff --git a/resources/views/dashboard/settings/analytics.blade.php b/resources/views/dashboard/settings/analytics.blade.php index 23f622a1e526..eeb514f91ff9 100644 --- a/resources/views/dashboard/settings/analytics.blade.php +++ b/resources/views/dashboard/settings/analytics.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,13 +13,13 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - +
          @@ -29,7 +27,7 @@
          - +
          @@ -37,7 +35,7 @@
          - +
          @@ -45,7 +43,7 @@
          - +
          diff --git a/resources/views/dashboard/settings/app-setup.blade.php b/resources/views/dashboard/settings/app-setup.blade.php index 79c55ecbe6ca..a62ce041b8b9 100644 --- a/resources/views/dashboard/settings/app-setup.blade.php +++ b/resources/views/dashboard/settings/app-setup.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,13 +13,13 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - +
          @@ -29,7 +27,7 @@
          - +
          @@ -38,7 +36,7 @@
          - +
          @@ -47,7 +45,23 @@
          - + +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +
          + +
          @@ -62,6 +76,17 @@
          +
          +
          +
          + +
          +
          +
          @@ -78,7 +103,7 @@
          @@ -89,7 +114,7 @@
          @@ -100,7 +125,7 @@
          @@ -111,7 +136,7 @@
          @@ -122,7 +147,7 @@
          diff --git a/resources/views/dashboard/settings/credits.blade.php b/resources/views/dashboard/settings/credits.blade.php index 8bb5b2485d67..927f38259a9e 100644 --- a/resources/views/dashboard/settings/credits.blade.php +++ b/resources/views/dashboard/settings/credits.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -19,18 +17,6 @@
          -

          {{ trans('dashboard.settings.credits.backers-title') }}

          - -

          {!! trans('dashboard.settings.credits.backers') !!}

          - -
            - @foreach($backers as $backer) -
          • {{ $backer['name'] }}
          • - @endforeach -
          - -
          -

          {{ trans('dashboard.settings.credits.contributors') }}

          {{ trans('dashboard.settings.credits.thank-you', ['count' => count($contributors)]) }}

          diff --git a/resources/views/dashboard/settings/customization.blade.php b/resources/views/dashboard/settings/customization.blade.php index 30b4386413b8..c2652cd32432 100644 --- a/resources/views/dashboard/settings/customization.blade.php +++ b/resources/views/dashboard/settings/customization.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          diff --git a/resources/views/dashboard/settings/localization.blade.php b/resources/views/dashboard/settings/localization.blade.php index d56eb83da348..9448ef8c66cc 100644 --- a/resources/views/dashboard/settings/localization.blade.php +++ b/resources/views/dashboard/settings/localization.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -65,7 +63,7 @@ - + {{ trans('forms.settings.app-setup.automatic_localization') }}
          diff --git a/resources/views/dashboard/settings/log.blade.php b/resources/views/dashboard/settings/log.blade.php index 143c6e747f5e..e5a21f1ec63b 100644 --- a/resources/views/dashboard/settings/log.blade.php +++ b/resources/views/dashboard/settings/log.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          diff --git a/resources/views/dashboard/settings/mail.blade.php b/resources/views/dashboard/settings/mail.blade.php new file mode 100644 index 000000000000..133ecb038aa6 --- /dev/null +++ b/resources/views/dashboard/settings/mail.blade.php @@ -0,0 +1,58 @@ +@extends('layout.dashboard') + +@section('content') +
          + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar') +
          +
          + + {{ trans('dashboard.settings.mail.mail') }} + +
          +
          +
          + + + @include('partials.errors') +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + +
          +
          +
          + + {{ trans('dashboard.settings.mail.test') }} +
          +
          +
          + +
          +
          +
          +
          +@stop diff --git a/resources/views/dashboard/settings/security.blade.php b/resources/views/dashboard/settings/security.blade.php index 25fac0736446..166e705f7eb5 100644 --- a/resources/views/dashboard/settings/security.blade.php +++ b/resources/views/dashboard/settings/security.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,8 +13,20 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          +
          +
          + +
          + +
          +
          +
          @@ -38,13 +48,13 @@
          - @if(!$unsecure_users->isEmpty()) + @if(!$unsecureUsers->isEmpty())
          {{ trans('dashboard.settings.security.two-factor') }}
          - @foreach($unsecure_users as $user) + @foreach($unsecureUsers as $user)
          {{ $user->username }} diff --git a/resources/views/dashboard/settings/stylesheet.blade.php b/resources/views/dashboard/settings/stylesheet.blade.php index 222b1129b50e..15df1bfee933 100644 --- a/resources/views/dashboard/settings/stylesheet.blade.php +++ b/resources/views/dashboard/settings/stylesheet.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,7 +13,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          diff --git a/resources/views/dashboard/settings/theme.blade.php b/resources/views/dashboard/settings/theme.blade.php index 542214af2892..71199e5d8714 100644 --- a/resources/views/dashboard/settings/theme.blade.php +++ b/resources/views/dashboard/settings/theme.blade.php @@ -2,9 +2,7 @@ @section('content')
          - @if(isset($sub_menu)) - @include('dashboard.partials.sub-sidebar') - @endif + @includeWhen(isset($subMenu), 'dashboard.partials.sub-sidebar')
          @@ -15,14 +13,14 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - @if($app_banner) + @if($appBanner) @@ -39,13 +37,13 @@
          - +
          - +
          @@ -54,20 +52,20 @@
          - +
          - +
          @@ -78,13 +76,13 @@
          - +
          - +
          @@ -92,13 +90,13 @@
          - +
          - +
          @@ -106,13 +104,13 @@
          - +
          - +
          @@ -120,13 +118,13 @@
          - +
          - +
          diff --git a/resources/views/dashboard/subscribers/add.blade.php b/resources/views/dashboard/subscribers/add.blade.php index b0d1c009ecfb..dd15f7c252ea 100644 --- a/resources/views/dashboard/subscribers/add.blade.php +++ b/resources/views/dashboard/subscribers/add.blade.php @@ -12,7 +12,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          diff --git a/resources/views/dashboard/subscribers/index.blade.php b/resources/views/dashboard/subscribers/index.blade.php index 3d2139848882..2ac47e704b83 100644 --- a/resources/views/dashboard/subscribers/index.blade.php +++ b/resources/views/dashboard/subscribers/index.blade.php @@ -8,7 +8,7 @@ {{ trans('dashboard.subscribers.subscribers') }} - @if($current_user->isAdmin && subscribers_enabled()) + @if($currentUser->isAdmin) {{ trans('dashboard.subscribers.add.title') }} @@ -18,7 +18,9 @@
          -

          {{ trans('dashboard.subscribers.description') }}

          +

          + {{ trans('dashboard.subscribers.description') }} +

          @foreach($subscribers as $subscriber) @@ -34,7 +36,9 @@ @endif
          - @if($subscriber->subscriptions->count() > 0) + @if($subscriber->global) +

          {{ trans('dashboard.subscribers.global') }}

          + @elseif($subscriber->subscriptions->isNotEmpty()) {!! $subscriber->subscriptions->map(function ($subscription) { return sprintf('%s', $subscription->component->name); })->implode(' ') !!} @@ -43,6 +47,7 @@ @endif
          diff --git a/resources/views/dashboard/team/add.blade.php b/resources/views/dashboard/team/add.blade.php index 78be34c1f5c3..e613f1c91b0f 100644 --- a/resources/views/dashboard/team/add.blade.php +++ b/resources/views/dashboard/team/add.blade.php @@ -12,7 +12,7 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          @@ -26,10 +26,9 @@
          - -
          +
          - @if($current_user->isAdmin) + @if($currentUser->isAdmin)
          @@ -26,10 +26,9 @@
          - isAdmin ? "disabled": "" }} placeholder="{{ trans('forms.user.password') }}"> -
          + isAdmin ? "disabled": "" }} placeholder="{{ trans('forms.user.password') }}">
          - @if($current_user->isAdmin) + @if($currentUser->isAdmin)
          -
          -
          - - -
          -
          - -
          -
          - -
          -
          - -
          -
          - -
          -
          + +
          +
          + @include('partials.errors') + + +
          +
          + +
          +
          +
          + + + + +
          +
          +
          -
          -
          - - {{ trans('forms.cancel') }} +
          +
          + + {{ trans('forms.cancel') }} + +
          -
          - + +
          -
          +
          @stop diff --git a/resources/views/dashboard/templates/add.blade.php b/resources/views/dashboard/templates/add.blade.php index a2033405681a..1ce158179276 100644 --- a/resources/views/dashboard/templates/add.blade.php +++ b/resources/views/dashboard/templates/add.blade.php @@ -9,13 +9,14 @@ @stop @@ -32,17 +33,17 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - +
          - + {!! trans('forms.incidents.templates.twig') !!}
          diff --git a/resources/views/dashboard/templates/edit.blade.php b/resources/views/dashboard/templates/edit.blade.php index b7bb926bda26..f4c82ee16485 100644 --- a/resources/views/dashboard/templates/edit.blade.php +++ b/resources/views/dashboard/templates/edit.blade.php @@ -9,13 +9,14 @@ @stop @@ -32,10 +33,10 @@
          - @if($updated_template = Session::get('updated_template')) -
          - @if($template_errors) - {{ sprintf("%s - %s", trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.edit.failure').' '.$template_errors) }} + @if($updatedTemplate = Session::get('updated_template')) +
          + @if($templateErrors) + {{ sprintf("%s - %s", trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.edit.failure').' '.$templateErrors) }} @else {{ sprintf("%s - %s", trans('dashboard.notifications.awesome'), trans('dashboard.incidents.templates.edit.success')) }} @endif @@ -51,7 +52,7 @@
          - + {!! trans('forms.incidents.templates.twig') !!}
          diff --git a/resources/views/dashboard/templates/index.blade.php b/resources/views/dashboard/templates/index.blade.php index 2f780c29e7c9..474742b7d7e0 100644 --- a/resources/views/dashboard/templates/index.blade.php +++ b/resources/views/dashboard/templates/index.blade.php @@ -15,9 +15,9 @@
          - @include('dashboard.partials.errors') + @include('partials.errors')
          - @forelse($incident_templates as $template) + @forelse($incidentTemplates as $template)
          {{ $template->name }} diff --git a/resources/views/dashboard/user/index.blade.php b/resources/views/dashboard/user/index.blade.php index 85d9af67995c..1e1004503614 100644 --- a/resources/views/dashboard/user/index.blade.php +++ b/resources/views/dashboard/user/index.blade.php @@ -12,34 +12,33 @@
          - @include('dashboard.partials.errors') + @include('partials.errors') {!! csrf_field() !!}
          - +
          - +
          - +
          - -
          +

          {{ trans('forms.user.api-token-help') }}
          @@ -47,20 +46,21 @@
          - @if($current_user->hasTwoFactor) + @if($currentUser->hasTwoFactor)
          getQRCodeUrl( 'Cachet', - $current_user->email, - $current_user->google_2fa_secret + $currentUser->email, + $currentUser->google_2fa_secret ); ?> - + qr code {!! trans('forms.user.2fa.help') !!}
          @endif diff --git a/resources/views/emails/components/update-html.blade.php b/resources/views/emails/components/update-html.blade.php deleted file mode 100644 index d99acb78231c..000000000000 --- a/resources/views/emails/components/update-html.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -@extends('layout.emails') - -@section('content') -{!! trans('cachet.subscriber.email.component.html', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!} - - - - - -
          - -
          -@stop diff --git a/resources/views/emails/components/update-text.blade.php b/resources/views/emails/components/update-text.blade.php deleted file mode 100644 index 935a8e7e542b..000000000000 --- a/resources/views/emails/components/update-text.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -{!! trans('cachet.subscriber.email.component.text', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!} - -{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }} - -@if($show_support) -{!! trans('cachet.powered_by', ['app' => $app_name]) !!} -@endif diff --git a/resources/views/emails/incidents/maintenance-html.blade.php b/resources/views/emails/incidents/maintenance-html.blade.php deleted file mode 100644 index b521492502ba..000000000000 --- a/resources/views/emails/incidents/maintenance-html.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@extends('layout.emails') - -@section('content') -

          {!! $name !!}

          - - - - - -
          -

          - {!! $status !!} - {!! $html_content !!} - {!! $timestamp !!} -

          -
          - - - - - -
          - -
          - - - - - -
          -

          {!! trans('cachet.subscriber.email.unsubscribe') !!}

          -
          -@stop diff --git a/resources/views/emails/incidents/maintenance-text.blade.php b/resources/views/emails/incidents/maintenance-text.blade.php deleted file mode 100644 index 6c2d54bbfc27..000000000000 --- a/resources/views/emails/incidents/maintenance-text.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -{!! $name !!} - -{!! $status !!} -{!! $text_content !!} -{!! $timestamp !!} - -{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }} - -{!! trans('cachet.subscriber.email.unsubscribe') !!} {{ $unsubscribe_link }} - -@if($show_support) -{!! trans('cachet.powered_by', ['app' => $app_name]) !!} -@endif diff --git a/resources/views/emails/incidents/new-html.blade.php b/resources/views/emails/incidents/new-html.blade.php deleted file mode 100644 index c30598c001b9..000000000000 --- a/resources/views/emails/incidents/new-html.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@extends('layout.emails') - -@section('content') -

          {!! $name !!}

          - - - - - -
          -

          - {!! $status !!} @if($has_component) ({{ $component_name }}) @endif - {!! $html_content !!} - {!! $timestamp !!} -

          -
          - - - - - -
          - -
          - - - - - -
          -

          {!! trans('cachet.subscriber.email.unsubscribe') !!}

          -
          -@stop diff --git a/resources/views/emails/incidents/new-text.blade.php b/resources/views/emails/incidents/new-text.blade.php deleted file mode 100644 index 80616d1ef601..000000000000 --- a/resources/views/emails/incidents/new-text.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -{!! $name !!} - -{!! $status !!} -{!! $text_content !!} -{!! $timestamp !!} - -@if($has_component) -({{ $component_name }}) -@endif - -{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }} - -{!! trans('cachet.subscriber.email.unsuscribe') !!} {{ $unsubscribe_link }} - -@if($show_support) -{!! trans('cachet.powered_by', ['app' => $app_name]) !!} -@endif diff --git a/resources/views/emails/subscribers/verify-html.blade.php b/resources/views/emails/subscribers/verify-html.blade.php deleted file mode 100644 index edc100091f85..000000000000 --- a/resources/views/emails/subscribers/verify-html.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -@extends('layout.emails') - -@section('content') -{!! trans('cachet.subscriber.email.verify.html', ['app_name' => $app_name]) !!} - - - - - -
          - -
          -@stop diff --git a/resources/views/emails/subscribers/verify-text.blade.php b/resources/views/emails/subscribers/verify-text.blade.php deleted file mode 100644 index b45eb8a6179c..000000000000 --- a/resources/views/emails/subscribers/verify-text.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -{{ trans('cachet.subscriber.email.verify.text', ['app_name' => $app_name, 'link' => $link]) }} - -@if($show_support) -{!! trans('cachet.powered_by', ['app' => $app_name]) !!} -@endif diff --git a/resources/views/emails/users/invite-html.blade.php b/resources/views/emails/users/invite-html.blade.php deleted file mode 100644 index 8a01d8fb511d..000000000000 --- a/resources/views/emails/users/invite-html.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('layout.emails') - -@section('content') -{!! trans('cachet.users.email.invite.html', ['app_name' => $app_name, 'link' => $link]) !!} -@stop diff --git a/resources/views/emails/users/invite-text.blade.php b/resources/views/emails/users/invite-text.blade.php deleted file mode 100644 index 2195b31a163a..000000000000 --- a/resources/views/emails/users/invite-text.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -{{ trans('cachet.users.email.invite.text', ['app_name' => $app_name, 'link' => $link]) }} - -@if($show_support) -{!! trans('cachet.powered_by', ['app' => $app_name]) !!} -@endif diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 000000000000..10f05b88c3e0 --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '401') +@section('title', __('Unauthorized')) + +@section('image') +
          +
          +@endsection + +@section('message', __('Sorry, you are not authorized to access this page.')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 000000000000..bbb79a4910f3 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '403') +@section('title', __('Forbidden')) + +@section('image') +
          +
          +@endsection + +@section('message', __($exception->getMessage() ?: __('Sorry, you are forbidden from accessing this page.'))) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 000000000000..d2bae51f806f --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '404') +@section('title', __('Page Not Found')) + +@section('image') +
          +
          +@endsection + +@section('message', __('Sorry, the page you are looking for could not be found.')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 000000000000..1b00819f0b7c --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '419') +@section('title', __('Page Expired')) + +@section('image') +
          +
          +@endsection + +@section('message', __('Sorry, your session has expired. Please refresh and try again.')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 000000000000..2747654acf19 --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '429') +@section('title', __('Too Many Requests')) + +@section('image') +
          +
          +@endsection + +@section('message', __('Sorry, you are making too many requests to our servers.')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 000000000000..8868cf822bea --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '500') +@section('title', __('Error')) + +@section('image') +
          +
          +@endsection + +@section('message', __('Whoops, something went wrong on our servers.')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 000000000000..476ff52fe67b --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,11 @@ +@extends('errors::illustrated-layout') + +@section('code', '503') +@section('title', __('Service Unavailable')) + +@section('image') +
          +
          +@endsection + +@section('message', __($exception->getMessage() ?: __('Sorry, we are doing some maintenance. Please check back soon.'))) diff --git a/resources/views/errors/illustrated-layout.blade.php b/resources/views/errors/illustrated-layout.blade.php new file mode 100644 index 000000000000..3730d05ae79b --- /dev/null +++ b/resources/views/errors/illustrated-layout.blade.php @@ -0,0 +1,486 @@ + + + + @yield('title') + + + + + + + + + + + + +
          +
          +
          +
          + @yield('code', __('Oh no')) +
          + +
          + +

          + @yield('message') +

          + + + + +
          +
          + +
          + @yield('image') +
          +
          + + diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 000000000000..2c51d4f355b5 --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,57 @@ + + + + + + + @yield('title') + + + + + + + + + +
          +
          +
          + @yield('message') +
          +
          +
          + + diff --git a/resources/views/errors/maintenance.blade.php b/resources/views/errors/maintenance.blade.php new file mode 100644 index 000000000000..f297fd8f03f9 --- /dev/null +++ b/resources/views/errors/maintenance.blade.php @@ -0,0 +1,12 @@ +@extends('layout.master') + +@section('content') +
          +
          + Under Maintenance +
          +
          +

          We're currently under maintenance, come back shortly.

          +
          +
          +@stop diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index f25348891171..a76f68d92502 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -1,5 +1,16 @@ @extends('layout.master') @section('content') -@modules +@include('partials.modules.messages') +@include('partials.modules.status') +@include('partials.about-app') +@include('partials.modules.components') +@include('partials.modules.metrics') +@include('partials.modules.stickied') +@include('partials.modules.scheduled') +@include('partials.modules.timeline') +@stop + +@section('bottom-content') +@include('partials.footer') @stop diff --git a/resources/views/layout/clean.blade.php b/resources/views/layout/clean.blade.php index c9d04391b2cc..9cb13ca5c5c5 100644 --- a/resources/views/layout/clean.blade.php +++ b/resources/views/layout/clean.blade.php @@ -9,37 +9,41 @@ - - + + - - - - - - - + + + + + + + - {{ $page_title or $site_title }} + {{ $pageTitle ?? $siteTitle }} - @if($enable_external_dependencies) - + @if($enableExternalDependencies) + {{-- --}} @endif - + @yield('css') @include('partials.crowdin') - + + + -
          +
          @yield('content')
          +@yield('js') + diff --git a/resources/views/layout/dashboard.blade.php b/resources/views/layout/dashboard.blade.php index 3580a8157621..8af827638e51 100644 --- a/resources/views/layout/dashboard.blade.php +++ b/resources/views/layout/dashboard.blade.php @@ -9,41 +9,57 @@ - - + + - - - - - - - + + + + + + + - {{ $page_title or $site_title }} + {{ $pageTitle ?? $siteTitle }} - @if($enable_external_dependencies) - + + + @if($enableExternalDependencies) + @endif - + @yield('css') @include('partials.crowdin') - - + + -
          +
          @include('dashboard.partials.sidebar')
          + @if(!$isWriteable) +
          +
          +
          +
          + {!! trans('dashboard.writeable_settings') !!} +
          +
          +
          +
          + @endif + @yield('content')
          - @yield('js') +@yield('js') + diff --git a/resources/views/layout/emails.blade.php b/resources/views/layout/emails.blade.php deleted file mode 100644 index bc1363888ee2..000000000000 --- a/resources/views/layout/emails.blade.php +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - {{ $app_name }} - - - - - - - - - - diff --git a/resources/views/layout/master.blade.php b/resources/views/layout/master.blade.php index 6e681fd7940c..48f37555b7b5 100644 --- a/resources/views/layout/master.blade.php +++ b/resources/views/layout/master.blade.php @@ -7,75 +7,86 @@ - - - - + - - - + + + - - + + + + @if (isset($favicon)) - - + + @else - - + + @endif - - - - - - - + + + + + + + - {{ $site_title }} + @yield('title', $siteTitle) - @if($enable_external_dependencies) - + @if($enableExternalDependencies) + @endif - + @include('partials.stylesheet') @include('partials.crowdin') - @if($app_stylesheet) + @if($appStylesheet) @endif - + + @yield('outer-content') @include('partials.banner') -
          +
          @yield('content')
          - @include('partials.footer') + @yield('bottom-content') + diff --git a/resources/views/notifications/component/update.blade.php b/resources/views/notifications/component/update.blade.php new file mode 100644 index 000000000000..a5515ae09c7b --- /dev/null +++ b/resources/views/notifications/component/update.blade.php @@ -0,0 +1,11 @@ +@component('mail::message') +# {{ trans('notifications.component.status_update.mail.greeting') }} + +{{ $content }} + +@lang('Thanks,')
          +{{ Config::get('setting.app_name') }} + +@include('notifications.partials.subscription') + +@endcomponent diff --git a/resources/views/notifications/incident/new.blade.php b/resources/views/notifications/incident/new.blade.php new file mode 100644 index 000000000000..7dbcad641375 --- /dev/null +++ b/resources/views/notifications/incident/new.blade.php @@ -0,0 +1,15 @@ +@component('mail::message') +# {{ trans('notifications.incident.new.mail.greeting', ['app_name' => Config::get('setting.app_name')]) }} + +{{ $incident->message }} + +@component('mail::button', ['url' => $actionUrl]) +{{ $actionText }} +@endcomponent + +@lang('Thanks,')
          +{{ Config::get('setting.app_name') }} + +@include('notifications.partials.subscription') + +@endcomponent diff --git a/resources/views/notifications/incident/update.blade.php b/resources/views/notifications/incident/update.blade.php new file mode 100644 index 000000000000..12c9b63bf44b --- /dev/null +++ b/resources/views/notifications/incident/update.blade.php @@ -0,0 +1,15 @@ +@component('mail::message') +# {{ trans('notifications.incident.update.mail.title', ['name' => $incidentName, 'new_status' => $newStatus]) }} + +{{ $update->message }} + +@component('mail::button', ['url' => $actionUrl]) +{{ $actionText }} +@endcomponent + +@lang('Thanks,')
          +{{ Config::get('setting.app_name') }} + +@include('notifications.partials.subscription') + +@endcomponent diff --git a/resources/views/notifications/partials/subscription.blade.php b/resources/views/notifications/partials/subscription.blade.php new file mode 100644 index 000000000000..6e8ebf3d3574 --- /dev/null +++ b/resources/views/notifications/partials/subscription.blade.php @@ -0,0 +1,3 @@ +@component('mail::subcopy') +[{{ $unsubscribeText }}]({{ $unsubscribeUrl }}) — [{{ $manageSubscriptionText }}]({{ $manageSubscriptionUrl }}) +@endcomponent diff --git a/resources/views/notifications/schedule/new.blade.php b/resources/views/notifications/schedule/new.blade.php new file mode 100644 index 000000000000..7a5872de1794 --- /dev/null +++ b/resources/views/notifications/schedule/new.blade.php @@ -0,0 +1,11 @@ +@component('mail::message') +# {{ trans('notifications.schedule.new.mail.title') }} + +{{ $content }} + +@lang('Thanks,')
          +{{ Config::get('setting.app_name') }} + +@include('notifications.partials.subscription') + +@endcomponent diff --git a/resources/views/partials/about-app.blade.php b/resources/views/partials/about-app.blade.php index ca857340a84b..f514743d7704 100644 --- a/resources/views/partials/about-app.blade.php +++ b/resources/views/partials/about-app.blade.php @@ -1,7 +1,7 @@ -@if($about_app) +@if($aboutApp)

          {{ trans('cachet.about_this_site') }}

          - {!! $about_app !!} + {!! $aboutApp !!}
          @endif diff --git a/resources/views/partials/analytics.blade.php b/resources/views/partials/analytics.blade.php index 008f34dc8f79..d615971358f8 100644 --- a/resources/views/partials/analytics.blade.php +++ b/resources/views/partials/analytics.blade.php @@ -1,36 +1,36 @@ -@if($enable_external_dependencies) -@if($app_analytics) +@if($enableExternalDependencies) +@if($appAnalytics) @endif -@if($app_analytics_go_squared) +@if($appAnalyticsGoSquared) @endif -@if($app_analytics_piwik_url) +@if($appAnalyticsPiwikUrl) - + @endif @endif diff --git a/resources/views/partials/banner.blade.php b/resources/views/partials/banner.blade.php index dc284cdef431..9ab23ab23d16 100644 --- a/resources/views/partials/banner.blade.php +++ b/resources/views/partials/banner.blade.php @@ -1,15 +1,15 @@ -@if($app_header) -{!! $app_header !!} +@if($appHeader) +{!! $appHeader !!} @else -@if($app_banner) -
          +@if($appBanner) +
          -
          +
          - @if($app_domain) - + @if($appDomain) + @else - + @endif
          diff --git a/resources/views/partials/component.blade.php b/resources/views/partials/component.blade.php index d05bc6fcc2ed..6da6145b7d5c 100644 --- a/resources/views/partials/component.blade.php +++ b/resources/views/partials/component.blade.php @@ -1,8 +1,8 @@ -
        1. +
        2. status }}"> @if($component->link) - {{ $component->name }} + {!! $component->name !!} @else - {{ $component->name }} + {!! $component->name !!} @endif @if($component->description) diff --git a/resources/views/partials/component_input.blade.php b/resources/views/partials/component_input.blade.php index a70c77b35996..0ffdc50f2c7e 100644 --- a/resources/views/partials/component_input.blade.php +++ b/resources/views/partials/component_input.blade.php @@ -8,10 +8,10 @@ @if (in_array($component->id, $subscriptions) || $subscriber->global) checked="checked" @endif /> - {{ $component->name }} + {!! $component->name !!} + @if($component->description) + + @endif
        3. - @if($component->description) - - @endif diff --git a/resources/views/partials/components.blade.php b/resources/views/partials/components.blade.php index 2a06ff472a90..c35143a976c1 100644 --- a/resources/views/partials/components.blade.php +++ b/resources/views/partials/components.blade.php @@ -1,7 +1,7 @@ -@if($component_groups->count() > 0) -@foreach($component_groups as $componentGroup) +@if($componentGroups->isNotEmpty()) +@foreach($componentGroups as $componentGroup)
            - @if($componentGroup->enabled_components->count() > 0) + @if($componentGroup->enabled_components->isNotEmpty())
          • {{ $componentGroup->name }} @@ -12,20 +12,23 @@
          • - @foreach($componentGroup->enabled_components()->orderBy('order')->get() as $component) - @include('partials.component', compact($component)) - @endforeach + @each('partials.component', $componentGroup->enabled_components, 'component')
            @endif
          @endforeach @endif -@if($ungrouped_components->count() > 0) +@if($ungroupedComponents->isNotEmpty())
            -
          • {{ trans('cachet.components.group.other') }}
          • - @foreach($ungrouped_components as $component) - @include('partials.component', compact($component)) - @endforeach +
          • + {{ trans('cachet.components.group.other') }} + +
            + +
            +
          • + + @each('partials.component', $ungroupedComponents, 'component')
          @endif diff --git a/resources/views/partials/components_form.blade.php b/resources/views/partials/components_form.blade.php index 66d05c484825..44f687ba0244 100644 --- a/resources/views/partials/components_form.blade.php +++ b/resources/views/partials/components_form.blade.php @@ -1,7 +1,7 @@ -@if($component_groups->count() > 0) -@foreach($component_groups as $componentGroup) +@if($componentGroups->isNotEmpty()) +@foreach($componentGroups as $componentGroup)
            - @if($componentGroup->enabled_components->count() > 0) + @if($componentGroup->enabled_components->isNotEmpty())
          • {{ $componentGroup->name }} @@ -21,12 +21,12 @@ @endforeach @endif -@if($ungrouped_components->count() > 0) +@if($ungroupedComponents->isNotEmpty())
            • {{ trans('cachet.components.group.other') }}
            • - @foreach($ungrouped_components as $component) + @foreach($ungroupedComponents as $component) @include('partials.component_input', compact($component)) @endforeach
            diff --git a/resources/views/partials/crowdin.blade.php b/resources/views/partials/crowdin.blade.php index 18d4944b60f9..88303f566cf5 100644 --- a/resources/views/partials/crowdin.blade.php +++ b/resources/views/partials/crowdin.blade.php @@ -1,4 +1,4 @@ -@if($app_locale === 'en-UD' && $enable_external_dependencies) +@if($appLocale === 'en-UD' && $enableExternalDependencies) -@endif diff --git a/resources/views/partials/modals/subscribe.blade.php b/resources/views/partials/modals/subscribe.blade.php deleted file mode 100644 index 8ba6e9adc711..000000000000 --- a/resources/views/partials/modals/subscribe.blade.php +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/resources/views/partials/modules/components.blade.php b/resources/views/partials/modules/components.blade.php index 11261121b741..dc3e0e800046 100644 --- a/resources/views/partials/modules/components.blade.php +++ b/resources/views/partials/modules/components.blade.php @@ -1,4 +1,4 @@ -@if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) +@if($componentGroups->isNotEmpty() || $ungroupedComponents->isNotEmpty())
            @include('partials.components')
            diff --git a/resources/views/partials/modules/messages.blade.php b/resources/views/partials/modules/messages.blade.php index 145dbb7f3467..4ef1d9b3ff47 100644 --- a/resources/views/partials/modules/messages.blade.php +++ b/resources/views/partials/modules/messages.blade.php @@ -1,3 +1,3 @@
            - @include('dashboard.partials.errors') + @include('partials.errors')
            diff --git a/resources/views/partials/modules/metrics.blade.php b/resources/views/partials/modules/metrics.blade.php index 2cff0bc2eb91..ce51a05912dd 100644 --- a/resources/views/partials/modules/metrics.blade.php +++ b/resources/views/partials/modules/metrics.blade.php @@ -1,5 +1,13 @@ -@if($display_metrics && $app_graphs) +@if($displayMetrics && $appGraphs)
            - @include('partials.metrics') + @if($metrics->count() > 0) +
              + @foreach($metrics as $metric) +
            • + +
            • + @endforeach +
            + @endif
            @endif diff --git a/resources/views/partials/modules/scheduled.blade.php b/resources/views/partials/modules/scheduled.blade.php index 2c47ab0b4521..e7291a21d196 100644 --- a/resources/views/partials/modules/scheduled.blade.php +++ b/resources/views/partials/modules/scheduled.blade.php @@ -1,4 +1,4 @@ -@if(!$scheduled_maintenance->isEmpty()) +@if($scheduledMaintenance->isNotEmpty())
            @include('partials.schedule')
            diff --git a/resources/views/partials/modules/status.blade.php b/resources/views/partials/modules/status.blade.php index 53d1a3788daf..f98017e93078 100644 --- a/resources/views/partials/modules/status.blade.php +++ b/resources/views/partials/modules/status.blade.php @@ -1,3 +1,3 @@
            -
            {{ $system_message }}
            +
            {{ $systemMessage }}
            diff --git a/resources/views/partials/modules/stickied.blade.php b/resources/views/partials/modules/stickied.blade.php index 1b36cb3b0ebf..0699cc129986 100644 --- a/resources/views/partials/modules/stickied.blade.php +++ b/resources/views/partials/modules/stickied.blade.php @@ -1,8 +1,8 @@ -@if(!$stickied_incidents->isEmpty()) +@if($stickiedIncidents->isNotEmpty())

            {{ trans('cachet.incidents.stickied') }}

            - @foreach($stickied_incidents as $date => $incidents) - @include('partials.incidents', [compact($date), compact($incidents)]) + @foreach($stickiedIncidents as $date => $incidents) + @include('partials.incidents') @endforeach
            @endif diff --git a/resources/views/partials/modules/timeline.blade.php b/resources/views/partials/modules/timeline.blade.php index 9cbc0902af13..1c99049904eb 100644 --- a/resources/views/partials/modules/timeline.blade.php +++ b/resources/views/partials/modules/timeline.blade.php @@ -1,24 +1,24 @@ -@if($days_to_show > 0 && $all_incidents) +@if($daysToShow > 0 && $allIncidents)

            {{ trans('cachet.incidents.past') }}

            - @foreach($all_incidents as $date => $incidents) - @include('partials.incidents', [compact($date), compact($incidents)]) + @foreach($allIncidents as $date => $incidents) + @include('partials.incidents', [@compact($date), @compact($incidents)]) @endforeach
          -
          -
          - - {{ trans('pagination.next') }} -
          -
          - - -
          @stop diff --git a/resources/views/signup.blade.php b/resources/views/signup.blade.php index e8e2aeb4d9d7..29ec26040eb7 100644 --- a/resources/views/signup.blade.php +++ b/resources/views/signup.blade.php @@ -1,5 +1,7 @@ @extends('layout.master') +@section('title', trans('cachet.signup.title').' | '.$siteTitle) + @section('content')

          @@ -7,21 +9,21 @@
          -@if($app_banner) +@if($appBanner)
          - @if($app_domain) - + @if($appDomain) + @else - + @endif
          @endif -@include('dashboard.partials.errors') +@include('partials.errors') -
          +
          {{ trans('cachet.signup.title') }}
          @@ -45,3 +47,7 @@
          @stop + +@section('bottom-content') +@include('partials.footer') +@stop diff --git a/resources/views/single-incident.blade.php b/resources/views/single-incident.blade.php index ff97c9338abe..024bc2d7b79a 100644 --- a/resources/views/single-incident.blade.php +++ b/resources/views/single-incident.blade.php @@ -1,5 +1,9 @@ @extends('layout.master') +@section('title', array_get($incident->meta, 'seo.title', $incident->name).' | '.$siteTitle) + +@section('description', array_get($incident->meta, 'seo.description', trans('cachet.meta.description.incident', ['name' => $incident->name, 'date' => $incident->occurred_at_formatted]))) + @section('bodyClass', 'no-padding') @section('outer-content') @@ -7,19 +11,19 @@ @stop @section('content') -

          {{ $incident->name }} {{ formatted_date($incident->created_at) }}

          +

          {{ $incident->name }} {{ $incident->occurred_at_formatted }}


          - {!! $incident->formattedMessage !!} + {!! $incident->formatted_message !!}
          @if($incident->updates)
          - @foreach ($incident->updates as $index => $update) -
          + @foreach ($incident->updates as $update) +
          @@ -29,11 +33,23 @@
          + @if($currentUser) + + @endif
          - {!! $update->formattedMessage !!} + {!! $update->formatted_message !!}
          - +
          @@ -43,3 +59,7 @@
          @endif @stop + +@section('bottom-content') +@include('partials.footer') +@stop diff --git a/resources/views/single-schedule.blade.php b/resources/views/single-schedule.blade.php new file mode 100644 index 000000000000..f10728eed3a0 --- /dev/null +++ b/resources/views/single-schedule.blade.php @@ -0,0 +1,43 @@ +@extends('layout.master') + +@section('title', $schedule->name.' | '.$siteTitle) + +@section('description', trans('cachet.meta.description.schedule', ['name' => $schedule->name, 'startDate' => $schedule->scheduled_at_formatted])) + +@section('bodyClass', 'no-padding') + +@section('outer-content') +@include('partials.nav') +@stop + +@section('content') +

          {{ $schedule->name }}

          + +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + {{ $schedule->name }}{{ trans("cachet.incidents.scheduled_at", ["timestamp" => $schedule->scheduled_at_diff]) }} +
          +
          + {!! $schedule->formatted_message !!} +
          +
          +
          +
          +
          +
          +
          +@stop + +@section('bottom-content') +@include('partials.footer') +@stop diff --git a/resources/views/subscribe/manage.blade.php b/resources/views/subscribe/manage.blade.php index 62d33ba82bfe..23472c6be3e1 100644 --- a/resources/views/subscribe/manage.blade.php +++ b/resources/views/subscribe/manage.blade.php @@ -8,48 +8,49 @@
          -@include('dashboard.partials.errors') +@include('partials.errors')
          -

          {{ $app_name }} Notifications

          -

          - Manage notifications for {{ $subscriber->email }} -

          +

          {{ $appName }} {{ trans('cachet.subscriber.manage.notifications') }}

          +

          {{ trans('cachet.subscriber.manage.notifications_for') }} {{ $subscriber->email }}

          -
          + - @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) - @if($component_groups->count() > 0) - @foreach($component_groups as $componentGroup) -
          - @if($componentGroup->enabled_components->count() > 0) -
          + @if($componentGroups->isNotEmpty() || $ungroupedComponents->isNotEmpty()) + @foreach($componentGroups as $componentGroup) +
          +
          @foreach($componentGroup->enabled_components()->orderBy('order')->get() as $component) @include('partials.component_input', compact($component)) @endforeach
          @endif -
          +
      @endforeach - @endif - @if($ungrouped_components->count() > 0) -
        + @if($ungroupedComponents->isNotEmpty()) + @@ -59,7 +60,7 @@ @endif
        - +
      diff --git a/resources/views/subscribe/subscribe.blade.php b/resources/views/subscribe/subscribe.blade.php index 87d76543c348..01bd704ca4bc 100644 --- a/resources/views/subscribe/subscribe.blade.php +++ b/resources/views/subscribe/subscribe.blade.php @@ -1,5 +1,9 @@ @extends('layout.master') +@section('title', trans('cachet.subscriber.subscribe'). " | ". $siteTitle) + +@section('description', trans('cachet.meta.description.subscribe', ['app' => $siteTitle])) + @section('content')

      @@ -7,7 +11,7 @@
      -@include('dashboard.partials.errors') +@include('partials.errors')
      @@ -17,7 +21,7 @@
      - +
      diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 000000000000..9d14d9b1619b --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,19 @@ + + + + +
      + + + + +
      + + + + +
      + {{ $slot }} +
      +
      +
      diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 000000000000..c3f9360abd4a --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 000000000000..eefabab9248b --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,7 @@ + + + + {{ $slot }} + + + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 000000000000..859900a33719 --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,54 @@ + + + + + + + + + + + + + +
      + + {{ $header ?? '' }} + + + + + + + {{ $footer ?? '' }} +
      + + + + + +
      + {{ Illuminate\Mail\Markdown::parse($slot) }} + + {{ $subcopy ?? '' }} +
      +
      +
      + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 000000000000..5d10c04162e8 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ setting('app_name', config('app.name')) }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ setting('app_name', config('app.name')) }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 000000000000..f397080206e6 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,13 @@ + + + + +
      + + + + +
      + {{ Illuminate\Mail\Markdown::parse($slot) }} +
      +
      diff --git a/resources/views/vendor/mail/html/promotion.blade.php b/resources/views/vendor/mail/html/promotion.blade.php new file mode 100644 index 000000000000..0debcf8a3811 --- /dev/null +++ b/resources/views/vendor/mail/html/promotion.blade.php @@ -0,0 +1,7 @@ + + + + +
      + {{ Illuminate\Mail\Markdown::parse($slot) }} +
      diff --git a/resources/views/vendor/mail/html/promotion/button.blade.php b/resources/views/vendor/mail/html/promotion/button.blade.php new file mode 100644 index 000000000000..8e79081c52ad --- /dev/null +++ b/resources/views/vendor/mail/html/promotion/button.blade.php @@ -0,0 +1,13 @@ + + + + +
      + + + + +
      + {{ $slot }} +
      +
      diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 000000000000..c3df7b4c0a5b --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + +
      + {{ Illuminate\Mail\Markdown::parse($slot) }} +
      diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 000000000000..a5f3348b233a --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
      +{{ Illuminate\Mail\Markdown::parse($slot) }} +
      diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 000000000000..aa4afb266084 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,290 @@ +/* Base */ + +body, body *:not(html):not(style):not(br):not(tr):not(code) { + font-family: Avenir, Helvetica, sans-serif; + box-sizing: border-box; +} + +body { + background-color: #f5f8fa; + color: #74787E; + height: 100%; + hyphens: auto; + line-height: 1.4; + margin: 0; + -moz-hyphens: auto; + -ms-word-break: break-all; + width: 100% !important; + -webkit-hyphens: auto; + -webkit-text-size-adjust: none; + word-break: break-all; + word-break: break-word; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869D4; +} + +a img { + border: none; +} + +/* Typography */ + +h1 { + color: #2F3133; + font-size: 19px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + color: #2F3133; + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + color: #2F3133; + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +p { + color: #74787E; + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + background-color: #f5f8fa; + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.content { + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: #bbbfc3; + font-size: 19px; + font-weight: bold; + text-decoration: none; + text-shadow: 0 1px 0 white; +} + +/* Body */ + +.body { + background-color: #FFFFFF; + border-bottom: 1px solid #EDEFF2; + border-top: 1px solid #EDEFF2; + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.inner-body { + background-color: #FFFFFF; + margin: 0 auto; + padding: 0; + width: 570px; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #EDEFF2; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 12px; +} + +/* Footer */ + +.footer { + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; +} + +.footer p { + color: #AEAEAE; + font-size: 12px; + text-align: center; +} + +/* Tables */ + +.table table { + margin: 30px auto; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.table th { + border-bottom: 1px solid #EDEFF2; + padding-bottom: 8px; + margin: 0; +} + +.table td { + color: #74787E; + font-size: 15px; + line-height: 18px; + padding: 10px 0; + margin: 0; +} + +.content-cell { + padding: 35px; +} + +/* Buttons */ + +.action { + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.button { + border-radius: 3px; + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16); + color: #FFF; + display: inline-block; + text-decoration: none; + -webkit-text-size-adjust: none; +} + +.button-blue, +.button-primary { + background-color: #3097D1; + border-top: 10px solid #3097D1; + border-right: 18px solid #3097D1; + border-bottom: 10px solid #3097D1; + border-left: 18px solid #3097D1; +} + +.button-green, +.button-success { + background-color: #2ab27b; + border-top: 10px solid #2ab27b; + border-right: 18px solid #2ab27b; + border-bottom: 10px solid #2ab27b; + border-left: 18px solid #2ab27b; +} + +.button-red, +.button-error { + background-color: #bf5329; + border-top: 10px solid #bf5329; + border-right: 18px solid #bf5329; + border-bottom: 10px solid #bf5329; + border-left: 18px solid #bf5329; +} + +/* Panels */ + +.panel { + margin: 0 0 21px; +} + +.panel-content { + background-color: #EDEFF2; + padding: 16px; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Promotions */ + +.promotion { + background-color: #FFFFFF; + border: 2px dashed #9BA2AB; + margin: 0; + margin-bottom: 25px; + margin-top: 25px; + padding: 24px; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.promotion h1 { + text-align: center; +} + +.promotion p { + font-size: 15px; + text-align: center; +} diff --git a/resources/views/vendor/mail/markdown/button.blade.php b/resources/views/vendor/mail/markdown/button.blade.php new file mode 100644 index 000000000000..97444ebdcfd1 --- /dev/null +++ b/resources/views/vendor/mail/markdown/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/markdown/footer.blade.php b/resources/views/vendor/mail/markdown/footer.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/markdown/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/header.blade.php b/resources/views/vendor/mail/markdown/header.blade.php new file mode 100644 index 000000000000..aaa3e5754446 --- /dev/null +++ b/resources/views/vendor/mail/markdown/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/markdown/layout.blade.php b/resources/views/vendor/mail/markdown/layout.blade.php new file mode 100644 index 000000000000..9378baa0771b --- /dev/null +++ b/resources/views/vendor/mail/markdown/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header) !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/markdown/message.blade.php b/resources/views/vendor/mail/markdown/message.blade.php new file mode 100644 index 000000000000..5d10c04162e8 --- /dev/null +++ b/resources/views/vendor/mail/markdown/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ setting('app_name', config('app.name')) }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ setting('app_name', config('app.name')) }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/markdown/panel.blade.php b/resources/views/vendor/mail/markdown/panel.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/markdown/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/promotion.blade.php b/resources/views/vendor/mail/markdown/promotion.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/markdown/promotion.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/promotion/button.blade.php b/resources/views/vendor/mail/markdown/promotion/button.blade.php new file mode 100644 index 000000000000..aaa3e5754446 --- /dev/null +++ b/resources/views/vendor/mail/markdown/promotion/button.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/markdown/subcopy.blade.php b/resources/views/vendor/mail/markdown/subcopy.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/markdown/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/table.blade.php b/resources/views/vendor/mail/markdown/table.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/markdown/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 000000000000..fd55d94881e8 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,62 @@ +@component('mail::message') +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + +@component('mail::button', ['url' => $actionUrl, 'color' => $color]) +{{ $actionText }} +@endcomponent +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
      {{ setting('app_name', config('app.name')) }} +@endif + +{{-- Subcopy --}} +@isset($actionText) +@component('mail::subcopy') +@lang( + "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser: [:actionURL](:actionURL)', + [ + 'actionText' => $actionText, + 'actionURL' => $actionUrl, + ] +) +@endcomponent +@endisset +@endcomponent diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 000000000000..044bbaa4a541 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,44 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 000000000000..e59847a3f553 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,44 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 000000000000..ef0dbb184c63 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 000000000000..cc30c9b25b5e --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 000000000000..bdf2fe883cb2 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,17 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/routes/api.php b/routes/api.php deleted file mode 100755 index 219b2cc49579..000000000000 --- a/routes/api.php +++ /dev/null @@ -1,27 +0,0 @@ -user(); -})->middleware('auth:api'); diff --git a/routes/console.php b/routes/console.php deleted file mode 100755 index fb453727ea2b..000000000000 --- a/routes/console.php +++ /dev/null @@ -1,27 +0,0 @@ -comment(Inspiring::quote()); -})->describe('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php deleted file mode 100755 index dd3ad4a46f8e..000000000000 --- a/routes/web.php +++ /dev/null @@ -1,15 +0,0 @@ - + * @author James Brooks */ abstract class AbstractTestCase extends TestCase { - /** - * The base URL to use while testing the application. - * - * @var string - */ - protected $baseUrl = 'http://localhost'; + use CreatesApplicationTrait; /** * Test actor. @@ -38,24 +33,10 @@ abstract class AbstractTestCase extends TestCase */ protected $user; - /** - * Creates the application. - * - * @return \Illuminate\Foundation\Application - */ - public function createApplication() - { - $app = require __DIR__.'/../bootstrap/app.php'; - - $app->make(Kernel::class)->bootstrap(); - - return $app; - } - /** * Sign in an user if it's the case. * - * @param User|null $user + * @param \CachetHQ\Cachet\Models\User|null $user * * @return \CachetHQ\Tests\Cachet\AbstractTestCase */ diff --git a/tests/AnalysisTest.php b/tests/AnalysisTest.php index 494ce451fca2..6dbb0034a5be 100644 --- a/tests/AnalysisTest.php +++ b/tests/AnalysisTest.php @@ -11,18 +11,24 @@ namespace CachetHQ\Tests\Cachet; -use AltThree\TestBench\AnalysisTrait; -use PHPUnit_Framework_TestCase as TestCase; +use GrahamCampbell\Analyzer\AnalysisTrait; +use PHPUnit\Framework\TestCase; /** * This is the analysis test class. * * @author Graham Campbell + * @author James Brooks */ class AnalysisTest extends TestCase { use AnalysisTrait; + /** + * Get the code paths to analyze. + * + * @return string[] + */ protected function getPaths() { return [ diff --git a/tests/Api/AbstractApiTestCase.php b/tests/Api/AbstractApiTestCase.php index 84fee02dc891..f0faf4a613b6 100644 --- a/tests/Api/AbstractApiTestCase.php +++ b/tests/Api/AbstractApiTestCase.php @@ -19,6 +19,7 @@ * This is the abstract api test case class. * * @author Graham Campbell + * @author James Brooks */ abstract class AbstractApiTestCase extends AbstractTestCase { @@ -26,11 +27,17 @@ abstract class AbstractApiTestCase extends AbstractTestCase /** * Become a user. + * + * @return $this */ protected function beUser() { - $this->user = factory(User::class)->create(); + $this->user = factory(User::class)->create([ + 'username' => 'cachet-test', + ]); $this->be($this->user); + + return $this; } } diff --git a/tests/Api/ComponentGroupTest.php b/tests/Api/ComponentGroupTest.php index 2fa40fe62668..5815884244d3 100644 --- a/tests/Api/ComponentGroupTest.php +++ b/tests/Api/ComponentGroupTest.php @@ -11,6 +11,9 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasCreatedEvent; +use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasRemovedEvent; +use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasUpdatedEvent; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\ComponentGroup; @@ -25,110 +28,155 @@ class ComponentGroupTest extends AbstractApiTestCase const COMPONENT_GROUP_1_NAME = 'Component Group 1'; const COMPONENT_GROUP_2_NAME = 'Component Group 2'; - public function testGetGroups() + public function test_can_get_all_component_groups() { - $groups = factory('CachetHQ\Cachet\Models\ComponentGroup', 3) + $groups = factory(ComponentGroup::class, 2) ->create(['visible' => ComponentGroup::VISIBLE_GUEST]); - $this->get('/api/v1/components/groups'); - $this->seeJson(['id' => $groups[0]->id]); - $this->seeJson(['id' => $groups[1]->id]); - $this->seeJson(['id' => $groups[2]->id]); - $this->assertResponseOk(); + $response = $this->json('GET', '/api/v1/components/groups'); + + $response->assertStatus(200); + $response->assertJsonFragment([ + [ + 'id' => $groups[0]->id, + 'name' => $groups[0]->name, + 'created_at' => (string) $groups[0]->created_at, + 'updated_at' => (string) $groups[0]->updated_at, + 'order' => $groups[0]->order, + 'collapsed' => $groups[0]->collapsed, + 'visible' => $groups[0]->visible, + 'enabled_components' => $groups[0]->enabled_components, + 'enabled_components_lowest' => $groups[0]->enabled_components_lowest, + 'lowest_human_status' => $groups[0]->lowest_human_status, + ], + ]); + $response->assertJsonFragment([ + [ + 'id' => $groups[1]->id, + 'name' => $groups[1]->name, + 'created_at' => (string) $groups[1]->created_at, + 'updated_at' => (string) $groups[1]->updated_at, + 'order' => $groups[1]->order, + 'collapsed' => $groups[1]->collapsed, + 'visible' => $groups[1]->visible, + 'enabled_components' => $groups[1]->enabled_components, + 'enabled_components_lowest' => $groups[1]->enabled_components_lowest, + 'lowest_human_status' => $groups[1]->lowest_human_status, + ], + ]); } - public function testGetInvalidGroup() + public function test_cannot_get_invalid_component_group() { - $this->get('/api/v1/components/groups/1'); - $this->assertResponseStatus(404); + $response = $this->json('GET', '/api/v1/components/groups/1'); + + $response->assertStatus(404); } - public function testPostGroupUnauthorized() + public function test_cannot_create_component_group_without_authorization() { - $this->post('/api/v1/components/groups'); + $this->doesntExpectEvents(ComponentGroupWasCreatedEvent::class); - $this->assertResponseStatus(401); + $response = $this->json('POST', '/api/v1/components/groups'); + + $response->assertStatus(401); } - public function testPostGroupNoData() + public function test_cannot_create_component_group_without_data() { $this->beUser(); - $this->post('/api/v1/components/groups'); - $this->assertResponseStatus(400); + $this->doesntExpectEvents(ComponentGroupWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components/groups'); + + $response->assertStatus(400); } - public function testPostGroup() + public function test_can_create_new_component_group() { $this->beUser(); - $this->post('/api/v1/components/groups', [ + $this->expectsEvents(ComponentGroupWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components/groups', [ + 'name' => 'Foo', + 'order' => 1, + 'collapsed' => 1, + 'visible' => ComponentGroup::VISIBLE_GUEST, + ]); + + $response->assertStatus(200); + $response->assertJsonFragment([ 'name' => 'Foo', 'order' => 1, 'collapsed' => 1, 'visible' => ComponentGroup::VISIBLE_GUEST, ]); - $this->seeJson(['name' => 'Foo', 'order' => 1, 'collapsed' => 1, 'visible' => ComponentGroup::VISIBLE_GUEST]); - $this->assertResponseOk(); } - public function testGetNewGroup() + public function test_can_get_single_component_group() { - $group = factory('CachetHQ\Cachet\Models\ComponentGroup')->create(); + $group = factory(ComponentGroup::class)->create(); + + $response = $this->json('GET', '/api/v1/components/groups/1'); - $this->get('/api/v1/components/groups/1'); - $this->seeJson(['name' => $group->name]); - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonFragment(['name' => $group->name]); } - public function testPutGroup() + public function test_can_update_component_group() { $this->beUser(); - $group = factory('CachetHQ\Cachet\Models\ComponentGroup')->create(); + $group = factory(ComponentGroup::class)->create(); - $this->put('/api/v1/components/groups/1', [ + $this->expectsEvents(ComponentGroupWasUpdatedEvent::class); + + $response = $this->json('PUT', '/api/v1/components/groups/1', [ 'name' => 'Lorem Ipsum Groupous', ]); - $this->seeJson(['name' => 'Lorem Ipsum Groupous']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Lorem Ipsum Groupous']); } - public function testDeleteGroup() + public function test_can_delete_component_group() { $this->beUser(); - $group = factory('CachetHQ\Cachet\Models\ComponentGroup')->create(); + $group = factory(ComponentGroup::class)->create(); - $this->delete('/api/v1/components/groups/1'); - $this->assertResponseStatus(204); + $this->expectsEvents(ComponentGroupWasRemovedEvent::class); + + $response = $this->json('DELETE', '/api/v1/components/groups/1'); + + $response->assertStatus(204); } - /** @test */ - public function only_public_component_groups_are_shown_for_a_guest() + public function test_only_public_component_groups_are_shown_for_a_guest() { $this->createComponentGroups(); - $this->get('/api/v1/components/groups') - ->seeJson(['name' => self::COMPONENT_GROUP_1_NAME]) - ->dontSeeJson(['name' => self::COMPONENT_GROUP_2_NAME]); - $this->assertResponseOk(); + $response = $this->json('GET', '/api/v1/components/groups'); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => self::COMPONENT_GROUP_1_NAME]); } - /** @test */ - public function all_component_groups_are_displayed_for_loggedin_users() + public function test_all_component_groups_are_displayed_for_logged_in_users() { $this->createComponentGroups() ->signIn(); - $this->get('/api/v1/components/groups') - ->seeJson(['name' => self::COMPONENT_GROUP_1_NAME]) - ->seeJson(['name' => self::COMPONENT_GROUP_2_NAME]); - $this->assertResponseOk(); + $response = $this->json('GET', '/api/v1/components/groups'); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => self::COMPONENT_GROUP_1_NAME]); } /** * Set up the needed data for the tests. * - * @return TestCase + * @return $this */ protected function createComponentGroups() { @@ -140,13 +188,13 @@ protected function createComponentGroups() /** * Create a component group. - * Also attaches a creator if any given as a parameter - * or exists in the test class. + * + * Also attaches a creator if any given as a parameter or exists in the test class. * * @param string $name * @param string $visible * - * @return AbstractApiTestCase + * @return $this */ protected function createComponentGroup($name, $visible) { diff --git a/tests/Api/ComponentTest.php b/tests/Api/ComponentTest.php index b03b70256897..c3f71e0ccd91 100644 --- a/tests/Api/ComponentTest.php +++ b/tests/Api/ComponentTest.php @@ -11,6 +11,12 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentWasCreatedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentWasRemovedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent; +use CachetHQ\Cachet\Models\Component; + /** * This is the component test class. * @@ -19,43 +25,100 @@ */ class ComponentTest extends AbstractApiTestCase { - public function testGetComponents() + public function test_can_get_all_components() { - $components = factory('CachetHQ\Cachet\Models\Component', 3)->create(); + $components = factory(Component::class, 3)->create(); + + $response = $this->json('GET', '/api/v1/components'); + + $response->assertStatus(200); + $response->assertJsonFragment(['id' => $components[0]->id]); + $response->assertJsonFragment(['id' => $components[1]->id]); + $response->assertJsonFragment(['id' => $components[2]->id]); + } + + public function test_can_get_all_components_with_tags() + { + $components = factory(Component::class, 2)->create(); + $components[0]->attachTags(['Hello World']); + $components[1]->attachTags(['Foo', 'Bar']); + + $response = $this->json('GET', '/api/v1/components', ['tags' => ['foo']]); - $this->get('/api/v1/components'); - $this->seeJson(['id' => $components[0]->id]); - $this->seeJson(['id' => $components[1]->id]); - $this->seeJson(['id' => $components[2]->id]); - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonMissing(['id' => $components[0]->id]); + $response->assertJsonFragment(['id' => $components[1]->id]); } - public function testGetInvalidComponent() + public function test_cannot_get_invalid_component() { - $this->get('/api/v1/components/1'); - $this->assertResponseStatus(404); + $response = $this->json('GET', '/api/v1/components/1'); + + $response->assertStatus(404); + } + + public function test_cannot_create_component_without_authorization() + { + $this->doesntExpectEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components'); + + $response->assertStatus(401); } - public function testPostComponentUnauthorized() + public function test_cannot_create_component_without_data() { - $this->post('/api/v1/components'); + $this->beUser(); + + $this->doesntExpectEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components'); + + $response->assertStatus(400); + } + + public function test_can_create_component() + { + $this->beUser(); + + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ + 'name' => 'Foo', + 'description' => 'Bar', + 'status' => 1, + 'link' => 'http://example.com', + 'order' => 1, + 'group_id' => 1, + 'enabled' => true, + ]); - $this->assertResponseStatus(401); + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testPostComponentNoData() + public function test_can_create_minimal_component() { $this->beUser(); - $this->post('/api/v1/components'); - $this->assertResponseStatus(400); + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ + 'name' => 'Foo', + 'status' => 1, + ]); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testPostComponent() + public function test_can_create_component_with_tags() { $this->beUser(); - $this->post('/api/v1/components', [ + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ 'name' => 'Foo', 'description' => 'Bar', 'status' => 1, @@ -63,32 +126,68 @@ public function testPostComponent() 'order' => 1, 'group_id' => 1, 'enabled' => true, + 'tags' => 'Foo,Bar', + ]); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'tags' => ['foo' => 'Foo', 'bar' => 'Bar']]); + } + + public function test_can_create_component_without_enabled_field() + { + $this->beUser(); + + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ + 'name' => 'Foo', + 'description' => 'Bar', + 'status' => 1, + 'link' => 'http://example.com', + 'order' => 1, + 'group_id' => 1, ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'enabled' => true]); } - public function testPostComponentWithoutEnabledField() + public function test_can_create_component_with_meta_data() { $this->beUser(); - $this->post('/api/v1/components', [ + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ 'name' => 'Foo', 'description' => 'Bar', 'status' => 1, 'link' => 'http://example.com', 'order' => 1, 'group_id' => 1, + 'enabled' => true, + 'meta' => [ + 'uuid' => '172ff3fb-41f7-49d3-8bcd-f57b53627fa0', + ], + ]); + + $response->assertStatus(200); + $response->assertJsonFragment([ + 'name' => 'Foo', + 'status' => 1, + 'meta' => [ + 'uuid' => '172ff3fb-41f7-49d3-8bcd-f57b53627fa0', + ], ]); - $this->seeJson(['name' => 'Foo', 'enabled' => true]); - $this->assertResponseOk(); } - public function testPostDisabledComponent() + public function test_can_create_disabled_component() { $this->beUser(); - $this->post('/api/v1/components', [ + $this->expectsEvents(ComponentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/components', [ 'name' => 'Foo', 'description' => 'Bar', 'status' => 1, @@ -97,37 +196,125 @@ public function testPostDisabledComponent() 'group_id' => 1, 'enabled' => 0, ]); - $this->seeJson(['name' => 'Foo', 'enabled' => false]); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'enabled' => false]); + } + + public function test_can_get_newly_created_component() + { + $component = factory(Component::class)->create(); + + $response = $this->json('GET', '/api/v1/components/1'); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => $component->name]); } - public function testGetNewComponent() + public function test_can_update_component() { - $component = factory('CachetHQ\Cachet\Models\Component')->create(); + $this->beUser(); + $component = factory(Component::class)->create(); + + $this->expectsEvents(ComponentWasUpdatedEvent::class); + + $response = $this->json('PUT', '/api/v1/components/1', [ + 'name' => 'Foo', + ]); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'enabled' => $component->enabled]); + } + + public function test_can_update_component_tags() + { + $this->beUser(); + $component = factory(Component::class)->create(); + + $this->expectsEvents(ComponentWasUpdatedEvent::class); + + $response = $this->json('PUT', '/api/v1/components/1', [ + 'name' => 'Foo', + 'tags' => 'Hello', + ]); - $this->get('/api/v1/components/1'); - $this->seeJson(['name' => $component->name]); - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'enabled' => $component->enabled, 'tags' => ['hello' => 'Hello']]); } - public function testPutComponent() + public function test_can_update_component_without_status_change() { $this->beUser(); - $component = factory('CachetHQ\Cachet\Models\Component')->create(); + $component = factory(Component::class)->create(); - $this->put('/api/v1/components/1', [ + $this->expectsEvents(ComponentWasUpdatedEvent::class); + $this->doesntExpectEvents(ComponentStatusWasChangedEvent::class); + + $response = $this->json('PUT', '/api/v1/components/1', [ 'name' => 'Foo', ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'enabled' => $component->enabled]); } - public function testDeleteComponent() + public function test_can_update_component_with_status_change() { $this->beUser(); - $component = factory('CachetHQ\Cachet\Models\Component')->create(); + $component = factory(Component::class)->create([ + 'status' => 1, + ]); + + $this->expectsEvents([ + ComponentWasUpdatedEvent::class, + ComponentStatusWasChangedEvent::class, + ]); + + $response = $this->json('PUT', '/api/v1/components/1', [ + 'name' => 'Foo', + 'status' => 2, + ]); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'status' => 2, 'enabled' => $component->enabled]); + } + + public function test_can_update_component_with_meta_data() + { + $this->beUser(); + $component = factory(Component::class)->create([ + 'meta' => [ + 'uuid' => '172ff3fb-41f7-49d3-8bcd-f57b53627fa0', + ], + ]); + + $this->expectsEvents(ComponentWasUpdatedEvent::class); + + $response = $this->json('PUT', '/api/v1/components/1', [ + 'meta' => [ + 'uuid' => '172ff3fb-41f7-49d3-8bcd-f57b53627fa0', + 'foo' => 'bar', + ], + ]); + + $response->assertStatus(200); + $response->assertJsonFragment([ + 'meta' => [ + 'uuid' => '172ff3fb-41f7-49d3-8bcd-f57b53627fa0', + 'foo' => 'bar', + ], + 'enabled' => $component->enabled, + ]); + } + + public function test_can_delete_component() + { + $this->beUser(); + $component = factory(Component::class)->create(); + + $this->expectsEvents(ComponentWasRemovedEvent::class); - $this->delete('/api/v1/components/1'); - $this->assertResponseStatus(204); + $response = $this->json('DELETE', '/api/v1/components/1'); + $response->assertStatus(204); } } diff --git a/tests/Api/GeneralTest.php b/tests/Api/GeneralTest.php index c5e4d1289ea3..6d0d77cf3038 100644 --- a/tests/Api/GeneralTest.php +++ b/tests/Api/GeneralTest.php @@ -11,6 +11,8 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Models\Component; + /** * This is the general test class. * @@ -19,26 +21,59 @@ */ class GeneralTest extends AbstractApiTestCase { - public function testGetPing() + public function test_can_ping() + { + $response = $this->json('GET', '/api/v1/ping'); + + $response->assertStatus(200); + $response->assertHeader('Content-Type', 'application/json'); + $response->assertJsonFragment(['data' => 'Pong!']); + } + + public function test_see_error_page_for_unknown_endpoint() { - $this->get('/api/v1/ping'); - $this->seeJson(['data' => 'Pong!']); - $this->assertResponseOk(); - $this->seeHeader('Content-Type', 'application/json'); + $response = $this->json('GET', '/api/v1/not-found'); + + $response->assertStatus(404); + $response->assertHeader('Content-Type', 'application/json'); } - public function testErrorPage() + public function test_non_acceptable_content_type() { - $this->get('/api/v1/not-found'); + $response = $this->json('GET', '/api/v1/ping', [], ['HTTP_Accept' => 'text/html']); - $this->assertResponseStatus(404); - $this->seeHeader('Content-Type', 'application/json'); + $response->assertStatus(406); } - public function testNotAcceptableContentType() + public function test_can_get_system_status() { - $this->get('/api/v1/ping', ['HTTP_Accept' => 'text/html']); + $response = $this->json('GET', '/api/v1/status'); + + $response->assertStatus(200) + ->assertHeader('Cache-Control') + ->assertJsonFragment([ + 'data' => [ + 'status' => 'success', + 'message' => 'System operational', + ], + ]); + } + + public function test_can_get_system_status_not_success() + { + factory(Component::class)->create([ + 'status' => 3, + ]); + + $response = $this->json('GET', '/api/v1/status'); - $this->assertResponseStatus(406); + $response->assertStatus(200) + ->assertHeader('Cache-Control') + ->assertJsonFragment([ + 'data' => [ + 'status' => 'info', + 'message' => 'The system is experiencing issues', + ], + ]); } } diff --git a/tests/Api/IncidentTemplateTest.php b/tests/Api/IncidentTemplateTest.php new file mode 100644 index 000000000000..670d8a52fada --- /dev/null +++ b/tests/Api/IncidentTemplateTest.php @@ -0,0 +1,41 @@ + + */ +class IncidentTemplateTest extends AbstractApiTestCase +{ + public function test_can_get_all_incident_templates() + { + $templates = factory(IncidentTemplate::class, 3)->create(); + + $response = $this->json('GET', '/api/v1/incidents/templates'); + + $response->assertJsonFragment(['id' => $templates[0]->id]); + $response->assertJsonFragment(['id' => $templates[1]->id]); + $response->assertJsonFragment(['id' => $templates[2]->id]); + $response->assertStatus(200); + } + + public function test_cannot_get_invalid_incident_template() + { + $response = $this->json('GET', '/api/v1/incidents/templates/1'); + + $response->assertStatus(404); + } +} diff --git a/tests/Api/IncidentTest.php b/tests/Api/IncidentTest.php index dea3d3d79d8e..54e41fed21e9 100644 --- a/tests/Api/IncidentTest.php +++ b/tests/Api/IncidentTest.php @@ -11,6 +11,13 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent; +use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent; +use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent; +use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\IncidentTemplate; + /** * This is the incident test class. * @@ -19,59 +26,73 @@ */ class IncidentTest extends AbstractApiTestCase { - public function testGetIncidents() + public function test_can_get_all_incidents() { - $incidents = factory('CachetHQ\Cachet\Models\Incident', 3)->create(); + $incidents = factory(Incident::class, 3)->create(); + + $response = $this->json('GET', '/api/v1/incidents'); + + $response->assertStatus(200); - $this->get('/api/v1/incidents'); - $this->seeJson(['id' => $incidents[0]->id]); - $this->seeJson(['id' => $incidents[1]->id]); - $this->seeJson(['id' => $incidents[2]->id]); - $this->assertResponseOk(); + $response->assertJsonFragment(['id' => $incidents[0]->id]); + $response->assertJsonFragment(['id' => $incidents[1]->id]); + $response->assertJsonFragment(['id' => $incidents[2]->id]); } - public function testGetInvalidIncident() + public function test_cannot_get_invalid_component() { - $this->get('/api/v1/incidents/0'); - $this->assertResponseStatus(404); + $response = $this->json('GET', '/api/v1/incidents/0'); + + $response->assertStatus(404); } - public function testPostIncidentUnauthorized() + public function test_cannot_create_incident_without_authorization() { - $this->post('/api/v1/incidents'); - $this->assertResponseStatus(401); + $this->doesntExpectEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents'); + + $response->assertStatus(401); } - public function testPostIncidentNoData() + public function test_cannot_create_incident_with_missing_data() { $this->beUser(); - $this->post('/api/v1/incidents'); - $this->assertResponseStatus(400); + $this->doesntExpectEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents'); + + $response->assertStatus(400); } - public function testPostIncident() + public function test_can_create_incident() { $this->beUser(); - $this->post('/api/v1/incidents', [ + $this->expectsEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents', [ 'name' => 'Foo', 'message' => 'Lorem ipsum dolor sit amet', 'status' => 1, 'visible' => 1, 'stickied' => false, ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testPostIncidentWithComponentStatus() + public function test_can_create_incident_with_component_status() { - $component = factory('CachetHQ\Cachet\Models\Component')->create(); + $component = factory(Component::class)->create(); $this->beUser(); - $this->post('/api/v1/incidents', [ + $this->expectsEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents', [ 'name' => 'Foo', 'message' => 'Lorem ipsum dolor sit amet', 'status' => 1, @@ -80,16 +101,19 @@ public function testPostIncidentWithComponentStatus() 'visible' => 1, 'stickied' => false, ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testCreateIncidentWithTemplate() + public function test_can_create_incident_with_template() { - $template = factory('CachetHQ\Cachet\Models\IncidentTemplate')->create(); + $template = factory(IncidentTemplate::class)->create(); $this->beUser(); - $this->post('/api/v1/incidents', [ + $this->expectsEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents', [ 'name' => 'Foo', 'status' => 1, 'visible' => 1, @@ -100,58 +124,110 @@ public function testCreateIncidentWithTemplate() 'message' => 'Hello there this is a foo!', ], ]); - $this->seeJson([ + + $response->assertStatus(200); + $response->assertJsonFragment([ 'name' => 'Foo', 'message' => "Name: Foo,\nMessage: Hello there this is a foo!", ]); } - public function testGetNewIncident() + public function test_can_get_newly_created_incident() { - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); + $incident = factory(Incident::class)->create(); - $this->get('/api/v1/incidents/1'); - $this->seeJson(['name' => $incident->name]); - $this->assertResponseOk(); + $response = $this->json('GET', '/api/v1/incidents/1'); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => $incident->name]); } - public function testPutIncident() + public function test_can_update_incident() { $this->beUser(); - $component = factory('CachetHQ\Cachet\Models\Incident')->create(); + $incident = factory(Incident::class)->create(); + + $this->expectsEvents(IncidentWasUpdatedEvent::class); - $this->put('/api/v1/incidents/1', [ + $response = $this->json('PUT', '/api/v1/incidents/1', [ 'name' => 'Foo', ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testPutIncidentWithTemplate() + public function test_can_update_incident_with_template() { $this->beUser(); - $template = factory('CachetHQ\Cachet\Models\IncidentTemplate')->create([ + $template = factory(IncidentTemplate::class)->create([ 'template' => 'Hello there this is a foo in my {{ incident.name }}!', ]); - $component = factory('CachetHQ\Cachet\Models\Incident')->create(); + $incident = factory(Incident::class)->create(); + + $this->expectsEvents(IncidentWasUpdatedEvent::class); - $this->put('/api/v1/incidents/1', [ + $response = $this->json('PUT', '/api/v1/incidents/1', [ 'name' => 'Foo', 'template' => $template->slug, ]); - $this->seeJson([ + + $response->assertStatus(200); + $response->assertJsonFragment([ 'name' => 'Foo', 'message' => 'Hello there this is a foo in my Foo!', ]); - $this->assertResponseOk(); } - public function testDeleteIncident() + public function test_can_update_incident_when_no_user_is_associated() { + $incident = factory(Incident::class)->create(['user_id' => null]); $this->beUser(); - $component = factory('CachetHQ\Cachet\Models\Incident')->create(); + $this->expectsEvents(IncidentWasUpdatedEvent::class); + + $response = $this->json('PUT', '/api/v1/incidents/1', [ + 'name' => 'Updated incident name', + ]); - $this->delete('/api/v1/incidents/1'); - $this->assertResponseStatus(204); + $response->assertStatus(200); + $response->assertJsonFragment([ + 'name' => 'Updated incident name', + 'user_id' => null, + ]); + } + + public function test_can_delete_incident() + { + $this->beUser(); + $incident = factory(Incident::class)->create(); + + $this->expectsEvents(IncidentWasRemovedEvent::class); + + $response = $this->json('DELETE', '/api/v1/incidents/1'); + + $response->assertStatus(204); + } + + public function test_can_create_incident_with_meta_data() + { + $this->beUser(); + + $this->expectsEvents(IncidentWasCreatedEvent::class); + + $response = $this->json('POST', '/api/v1/incidents', [ + 'name' => 'Foo', + 'message' => 'Lorem ipsum dolor sit amet', + 'status' => 1, + 'meta' => [ + 'id' => 123456789, + ], + ]); + + $response->assertStatus(200); + $response->assertJsonFragment([ + 'meta' => [ + 'id' => 123456789, + ], + ]); } } diff --git a/tests/Api/IncidentUpdateTest.php b/tests/Api/IncidentUpdateTest.php index c23137a0e69b..2a71ce1e7b4c 100644 --- a/tests/Api/IncidentUpdateTest.php +++ b/tests/Api/IncidentUpdateTest.php @@ -11,6 +11,9 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\IncidentUpdate; + /** * This is the incident update test class. * @@ -18,85 +21,84 @@ */ class IncidentUpdateTest extends AbstractApiTestCase { - public function testGetIncidentUpdates() + public function test_can_get_all_incident_updates() { - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); - $updates = factory('CachetHQ\Cachet\Models\IncidentUpdate', 3)->create([ + $incident = factory(Incident::class)->create(); + $updates = factory(IncidentUpdate::class, 3)->create([ 'incident_id' => $incident->id, ]); - $this->get("/api/v1/incidents/{$incident->id}/updates"); + $response = $this->json('GET', "/api/v1/incidents/{$incident->id}/updates"); - $this->assertResponseOk(); + $response->assertStatus(200); - $this->seeJson(['id' => $updates[0]->id]); - $this->seeJson(['id' => $updates[1]->id]); - $this->seeJson(['id' => $updates[2]->id]); + $response->assertJsonFragment(['id' => $updates[0]->id]); + $response->assertJsonFragment(['id' => $updates[1]->id]); + $response->assertJsonFragment(['id' => $updates[2]->id]); } - public function testGetInvalidIncidentUpdate() + public function test_cannot_get_invalid_incident_update() { - $this->get('/api/v1/incidents/1/updates/1'); + $response = $this->json('GET', '/api/v1/incidents/1/updates/1'); - $this->assertResponseStatus(404); + $response->assertStatus(404); } - public function testPostIncidentUpdateUnauthorized() + public function test_cannot_create_incident_update_without_authorization() { - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); - $this->post("/api/v1/incidents/{$incident->id}/updates"); + $incident = factory(Incident::class)->create(); + + $response = $this->json('POST', "/api/v1/incidents/{$incident->id}/updates"); - $this->assertResponseStatus(401); + $response->assertStatus(401); } - public function testPostIncidentUpdateNoData() + public function test_cannot_create_incident_update_without_data() { $this->beUser(); - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); + $incident = factory(Incident::class)->create(); - $this->post("/api/v1/incidents/{$incident->id}/updates"); + $response = $this->json('POST', "/api/v1/incidents/{$incident->id}/updates"); - $this->assertResponseStatus(400); + $response->assertStatus(400); } - public function testPostIncidentUpdate() + public function test_can_create_incident_update() { $this->beUser(); - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); + $incident = factory(Incident::class)->create(); - $this->post("/api/v1/incidents/{$incident->id}/updates", [ + $response = $this->json('POST', "/api/v1/incidents/{$incident->id}/updates", [ 'status' => 4, 'message' => 'Incident fixed!', ]); - $this->assertResponseOk(); - - $this->seeJson(['incident_id' => $incident->id]); + $response->assertStatus(200); + $response->assertJsonFragment(['incident_id' => $incident->id]); } - public function testPutIncidentUpdate() + public function test_can_update_incident_update() { $this->beUser(); - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); - $update = factory('CachetHQ\Cachet\Models\IncidentUpdate')->create(); + $incident = factory(Incident::class)->create(); + $update = factory(IncidentUpdate::class)->create(); - $this->put("/api/v1/incidents/{$incident->id}/updates/{$update->id}", [ + $response = $this->json('PUT', "/api/v1/incidents/{$incident->id}/updates/{$update->id}", [ 'message' => 'Message updated :smile:', ]); - $this->assertResponseOk(); - - $this->seeJson(['message' => 'Message updated :smile:']); + $response->assertStatus(200); + $response->assertJsonFragment(['message' => 'Message updated :smile:']); } - public function testDeleteIncidentUpdate() + public function test_can_delete_incident_update() { $this->beUser(); - $incident = factory('CachetHQ\Cachet\Models\Incident')->create(); - $update = factory('CachetHQ\Cachet\Models\IncidentUpdate')->create(); + $incident = factory(Incident::class)->create(); + $update = factory(IncidentUpdate::class)->create(); - $this->delete("/api/v1/incidents/{$incident->id}/updates/{$update->id}"); + $response = $this->json('DELETE', "/api/v1/incidents/{$incident->id}/updates/{$update->id}"); - $this->assertResponseStatus(204); + $response->assertStatus(204); } } diff --git a/tests/Api/MetricPointTest.php b/tests/Api/MetricPointTest.php index 283db778df4f..c9f4ffdfceda 100644 --- a/tests/Api/MetricPointTest.php +++ b/tests/Api/MetricPointTest.php @@ -11,6 +11,8 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\MetricPoint; use Carbon\Carbon; /** @@ -21,70 +23,107 @@ */ class MetricPointTest extends AbstractApiTestCase { - public function testGetMetricPoint() + public function test_can_get_all_metric_points() { - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint', 3)->create([ + $metric = factory(Metric::class)->create(); + $metricPoint = factory(MetricPoint::class, 3)->create([ 'metric_id' => $metric->id, ]); - $this->get("/api/v1/metrics/{$metric->id}/points"); + $response = $this->json('GET', "/api/v1/metrics/{$metric->id}/points"); - $this->seeJson(['id' => $metricPoint[0]->id]); - $this->seeJson(['id' => $metricPoint[1]->id]); - $this->seeJson(['id' => $metricPoint[2]->id]); + $response->assertJsonFragment(['id' => $metricPoint[0]->id]); + $response->assertJsonFragment(['id' => $metricPoint[1]->id]); + $response->assertJsonFragment(['id' => $metricPoint[2]->id]); - $this->assertResponseOk(); + $response->assertStatus(200); } - public function testPostMetricPointUnauthorized() + public function test_can_get_all_metric_points_in_order_by_latests() { - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->create([ + $metric = factory(Metric::class)->create(); + $metricPoint1 = factory(MetricPoint::class)->create([ + 'metric_id' => $metric->id, + 'created_at' => Carbon::parse('2016-12-01 2:00pm'), + 'updated_at' => Carbon::parse('2016-12-01 2:00pm'), + ]); + $metricPoint2 = factory(MetricPoint::class)->create([ + 'metric_id' => $metric->id, + 'created_at' => Carbon::parse('2016-12-01 1:00pm'), + 'updated_at' => Carbon::parse('2016-12-01 1:00pm'), + ]); + $metricPoint3 = factory(MetricPoint::class)->create([ + 'metric_id' => $metric->id, + 'created_at' => Carbon::parse('2016-12-01 4:00pm'), + 'updated_at' => Carbon::parse('2016-12-01 4:00pm'), + ]); + + $response = $this->json('GET', "/api/v1/metrics/{$metric->id}/points"); + + $response->assertJson([ + 'data' => [ + ['id' => $metricPoint3->id], + ['id' => $metricPoint1->id], + ['id' => $metricPoint2->id], + ], + ]); + + $response->assertStatus(200); + } + + public function test_cannot_create_metric_point_without_authorization() + { + $metric = factory(Metric::class)->create(); + $metricPoint = factory(MetricPoint::class)->create([ 'metric_id' => $metric->id, ]); - $this->post("/api/v1/metrics/{$metric->id}/points"); + $response = $this->json('POST', "/api/v1/metrics/{$metric->id}/points"); - $this->assertResponseStatus(401); + $response->assertStatus(401); } - public function testPostMetricPoint() + public function test_can_create_metric_point() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->make([ + $metric = factory(Metric::class)->create(); + $metricPoint = factory(MetricPoint::class)->make([ 'metric_id' => $metric->id, ]); - $this->post("/api/v1/metrics/{$metric->id}/points", $metricPoint->toArray()); - - $this->seeJson(['value' => $metricPoint->value]); - - $this->assertResponseOk(); + $response = $this->json('POST', "/api/v1/metrics/{$metric->id}/points", $metricPoint->toArray()); + $response->assertStatus(200); + $response->assertJsonFragment(['value' => $metricPoint->value]); } - public function testPostMetricPointTimestamp() + public function test_can_create_metric_point_with_timestamp() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $timestamp = 1434369116; - $datetime = '2015-06-15 11:51:56'; - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->make([ + // prevent tests breaking due to rolling into the next second + Carbon::setTestNow(Carbon::now()); + + $metric = factory(Metric::class)->create(); + $createdAt = Carbon::now(); + $metricPoint = factory(MetricPoint::class)->make([ 'metric_id' => $metric->id, ]); $postData = $metricPoint->toArray(); - $postData['timestamp'] = $timestamp; + $postData['timestamp'] = $createdAt->timestamp; - $this->post("/api/v1/metrics/{$metric->id}/points", $postData); + $response = $this->json('POST', "/api/v1/metrics/{$metric->id}/points", $postData); - $this->seeJson(['value' => $metricPoint->value, 'created_at' => $datetime]); + // Round value to match ours + $timestamp = 30 * round($createdAt->timestamp / 30); - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonFragment([ + 'value' => $metricPoint->value, + 'created_at' => Carbon::createFromFormat('U', $timestamp)->setTimezone(config('cachet.timezone'))->toDateTimeString(), + ]); } - public function testPostMetricPointTimestampTimezone() + public function test_can_create_metric_point_with_timestamp_timezone() { $this->beUser(); @@ -92,48 +131,52 @@ public function testPostMetricPointTimestampTimezone() Carbon::setTestNow(Carbon::now()); $timezone = 'America/Mexico_City'; - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $datetime = Carbon::now()->timezone($timezone); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->make([ + $metric = factory(Metric::class)->create(); + $createdAt = Carbon::now()->timezone($timezone); + $metricPoint = factory(MetricPoint::class)->make([ 'metric_id' => $metric->id, ]); $postData = $metricPoint->toArray(); - $postData['timestamp'] = $datetime->timestamp; + $postData['timestamp'] = $createdAt->timestamp; - $this->post("/api/v1/metrics/{$metric->id}/points", $postData, ['Time-Zone' => $timezone]); + $response = $this->json('POST', "/api/v1/metrics/{$metric->id}/points", $postData, ['Time-Zone' => $timezone]); - $this->seeJson(['value' => $metricPoint->value, 'created_at' => $datetime->toDateTimeString()]); + // Round value to match ours + $timestamp = 30 * round($createdAt->timestamp / 30); - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonFragment([ + 'value' => $metricPoint->value, + 'created_at' => Carbon::createFromFormat('U', $timestamp)->setTimezone($timezone)->toDateTimeString(), + ]); } - public function testPutMetricPoint() + public function test_can_update_metric_point() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->create([ + $metric = factory(Metric::class)->create(); + $metricPoint = factory(MetricPoint::class)->create([ 'metric_id' => $metric->id, ]); - $this->put("/api/v1/metrics/{$metric->id}/points/{$metricPoint->id}", [ + $response = $this->json('PUT', "/api/v1/metrics/{$metric->id}/points/{$metricPoint->id}", [ 'value' => 999, ]); - $this->seeJson(['value' => 999]); - - $this->assertResponseOk(); + $response->assertStatus(200); + $response->assertJsonFragment(['value' => 999]); } - public function testDeleteMetricPoint() + public function test_can_delete_metric_point() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); - $metricPoint = factory('CachetHQ\Cachet\Models\MetricPoint')->create([ + $metric = factory(Metric::class)->create(); + $metricPoint = factory(MetricPoint::class)->create([ 'metric_id' => $metric->id, ]); - $this->delete("/api/v1/metrics/{$metric->id}/points/{$metricPoint->id}"); + $response = $this->json('DELETE', "/api/v1/metrics/{$metric->id}/points/{$metricPoint->id}"); - $this->assertResponseStatus(204); + $response->assertStatus(204); } } diff --git a/tests/Api/MetricTest.php b/tests/Api/MetricTest.php index e65adc81e09b..000eddd40af3 100644 --- a/tests/Api/MetricTest.php +++ b/tests/Api/MetricTest.php @@ -11,6 +11,8 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Models\Metric; + /** * This is the metric test class. * @@ -19,42 +21,43 @@ */ class MetricTest extends AbstractApiTestCase { - public function testGetMetrics() + public function test_can_get_all_metrics() { - $metrics = factory('CachetHQ\Cachet\Models\Metric', 3)->create(); + $metrics = factory(Metric::class, 3)->create(); + + $response = $this->json('GET', '/api/v1/metrics'); - $this->get('/api/v1/metrics'); - $this->seeJson(['id' => $metrics[0]->id]); - $this->seeJson(['id' => $metrics[1]->id]); - $this->seeJson(['id' => $metrics[2]->id]); - $this->assertResponseOk(); + $response->assertJsonFragment(['id' => $metrics[0]->id]); + $response->assertJsonFragment(['id' => $metrics[1]->id]); + $response->assertJsonFragment(['id' => $metrics[2]->id]); + $response->assertStatus(200); } - public function testGetInvalidMetric() + public function test_cannot_get_invalid_metric() { - $this->get('/api/v1/metrics/0'); - $this->assertResponseStatus(404); + $response = $this->json('GET', '/api/v1/metrics/0'); + $response->assertStatus(404); } - public function testPostMetricUnauthorized() + public function test_cannot_create_metric_without_authorization() { - $this->post('/api/v1/metrics'); - $this->assertResponseStatus(401); + $response = $this->json('POST', '/api/v1/metrics'); + $response->assertStatus(401); } - public function testPostMetricNoData() + public function test_cannot_create_metric_without_data() { $this->beUser(); - $this->post('/api/v1/metrics'); - $this->assertResponseStatus(400); + $response = $this->json('POST', '/api/v1/metrics'); + $response->assertStatus(400); } - public function testPostMetric() + public function test_can_create_metric() { $this->beUser(); - $this->post('/api/v1/metrics', [ + $response = $this->json('POST', '/api/v1/metrics', [ 'name' => 'Foo', 'suffix' => 'foo\'s per second', 'description' => 'Lorem ipsum dolor', @@ -65,38 +68,42 @@ public function testPostMetric() 'threshold' => 5, 'order' => 1, ]); - $this->seeJson(['name' => 'Foo']); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo']); } - public function testGetNewMetric() + public function test_can_get_newly_created_metric() { - $incident = factory('CachetHQ\Cachet\Models\Metric')->create(); + $incident = factory(Metric::class)->create(); - $this->get('/api/v1/metrics/1'); - $this->seeJson(['name' => $incident->name]); - $this->assertResponseOk(); + $response = $this->json('GET', '/api/v1/metrics/1'); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => $incident->name]); } - public function testPutMetric() + public function test_can_update_metric() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); + $metric = factory(Metric::class)->create(); - $this->put('/api/v1/metrics/1', [ + $response = $this->json('PUT', '/api/v1/metrics/1', [ 'name' => 'Foo', 'view' => 2, ]); - $this->seeJson(['name' => 'Foo', 'default_view' => 2]); - $this->assertResponseOk(); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Foo', 'default_view' => 2]); } - public function testDeleteMetric() + public function test_can_delete_metric() { $this->beUser(); - $metric = factory('CachetHQ\Cachet\Models\Metric')->create(); + $metric = factory(Metric::class)->create(); + + $response = $this->json('DELETE', '/api/v1/metrics/1'); - $this->delete('/api/v1/metrics/1'); - $this->assertResponseStatus(204); + $response->assertStatus(204); } } diff --git a/tests/Api/ScheduleTest.php b/tests/Api/ScheduleTest.php new file mode 100644 index 000000000000..99b67b6458a0 --- /dev/null +++ b/tests/Api/ScheduleTest.php @@ -0,0 +1,88 @@ + + */ +class ScheduleTest extends AbstractApiTestCase +{ + public function test_can_get_all_schedules() + { + $schedules = factory(Schedule::class, 3)->create(); + + $response = $this->json('GET', '/api/v1/schedules'); + + $response->assertStatus(200); + $response->assertJsonFragment(['id' => $schedules[0]->id]); + $response->assertJsonFragment(['id' => $schedules[1]->id]); + $response->assertJsonFragment(['id' => $schedules[2]->id]); + } + + public function test_can_get_single_schedule() + { + $schedule = factory(Schedule::class)->create(); + + $response = $this->json('GET', '/api/v1/schedules/'.$schedule->id); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => $schedule->name]); + } + + public function test_can_create_schedule() + { + $this->beUser(); + + $schedule = [ + 'name' => 'Test Schedule', + 'message' => 'Foo bar, baz.', + 'status' => 1, + 'scheduled_at' => date('Y-m-d H:i'), + ]; + + $response = $this->json('POST', '/api/v1/schedules/', $schedule); + + Arr::forget($schedule, 'scheduled_at'); + + $response->assertStatus(200); + $response->assertJsonFragment($schedule); + } + + public function test_can_update_schedule() + { + $this->beUser(); + + $schedule = factory(Schedule::class)->create(); + + $response = $this->json('PUT', '/api/v1/schedules/'.$schedule->id, [ + 'name' => 'Updated schedule', + ]); + + $response->assertStatus(200); + $response->assertJsonFragment(['name' => 'Updated schedule']); + } + + public function test_can_delete_schedule() + { + $this->beUser(); + factory(Schedule::class)->create(); + + $response = $this->json('DELETE', '/api/v1/schedules/1'); + + $response->assertStatus(204); + } +} diff --git a/tests/Api/SubscriberTest.php b/tests/Api/SubscriberTest.php index 85eae916ff45..3a53252273e9 100644 --- a/tests/Api/SubscriberTest.php +++ b/tests/Api/SubscriberTest.php @@ -11,6 +11,12 @@ namespace CachetHQ\Tests\Cachet\Api; +use CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasSubscribedEvent; +use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\Subscriber; +use CachetHQ\Cachet\Models\Subscription; +use Illuminate\Support\Facades\Notification; + /** * This is the subscriber test class. * @@ -19,87 +25,104 @@ */ class SubscriberTest extends AbstractApiTestCase { - public function testGetSubscribersUnauthenticated() + public function test_can_get_all_subscribers() { - $this->get('/api/v1/subscribers'); - $this->assertResponseStatus(401); - $this->seeHeader('Content-Type', 'application/json'); + $this->beUser(); + + $subscriber = factory(Subscriber::class)->create(); + + $response = $this->json('GET', '/api/v1/subscribers'); + + $response->assertStatus(200); + $response->assertHeader('Content-Type', 'application/json'); } - public function testGetSubscribers() + public function test_cannot_get_subscribers_without_authorization() { - $this->beUser(); - - $subscriber = factory('CachetHQ\Cachet\Models\Subscriber')->create(); + $response = $this->json('GET', '/api/v1/subscribers'); - $this->get('/api/v1/subscribers'); - $this->seeHeader('Content-Type', 'application/json'); - $this->assertResponseOk(); + $response->assertStatus(401); + $response->assertHeader('Content-Type', 'application/json'); } - public function testCreateSubscriber() + public function test_can_create_subscriber() { $this->beUser(); - $this->expectsEvents('CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasSubscribedEvent'); + Notification::fake(); - $this->post('/api/v1/subscribers', [ + $this->expectsEvents(SubscriberHasSubscribedEvent::class); + + $response = $this->json('POST', '/api/v1/subscribers', [ 'email' => 'support@alt-three.com', ]); - $this->assertResponseOk(); - $this->seeHeader('Content-Type', 'application/json'); - $this->seeJson(['email' => 'support@alt-three.com']); + + $response->assertStatus(200); + $response->assertHeader('Content-Type', 'application/json'); + $response->assertJsonFragment(['email' => 'support@alt-three.com']); } - public function testCreateSubscriberAutoVerified() + public function test_can_create_subscriber_automatically_verified() { $this->beUser(); - $this->post('/api/v1/subscribers', [ + Notification::fake(); + + $this->expectsEvents(SubscriberHasSubscribedEvent::class); + + $response = $this->json('POST', '/api/v1/subscribers', [ 'email' => 'support@alt-three.com', 'verify' => true, ]); - $this->assertResponseOk(); - $this->seeHeader('Content-Type', 'application/json'); - $this->seeJson(['email' => 'support@alt-three.com']); + + $response->assertStatus(200); + $response->assertHeader('Content-Type', 'application/json'); + $response->assertJsonFragment(['email' => 'support@alt-three.com']); } - public function testCreateSubscriberWithSubscriptions() + public function test_can_create_subscriber_with_subscription() { $this->beUser(); - factory('CachetHQ\Cachet\Models\Component', 3)->create(); + factory(Component::class, 3)->create(); - $this->post('/api/v1/subscribers', [ - 'email' => 'support@alt-three.com', - 'verify' => true, - 'subscriptions' => [ + $response = $this->json('POST', '/api/v1/subscribers', [ + 'email' => 'support@alt-three.com', + 'verify' => true, + 'components' => [ 1, - 2, 3, ], ]); - $this->assertResponseOk(); - $this->seeHeader('Content-Type', 'application/json'); - $this->seeJson(['email' => 'support@alt-three.com']); - $this->seeJsonStructure(['data' => ['subscriptions' => []]]); + + $response->assertStatus(200); + $response->assertHeader('Content-Type', 'application/json'); + $response->assertJsonFragment(['email' => 'support@alt-three.com']); + + $data = $response->decodeResponseJson(); + $this->assertCount(2, $data['data']['subscriptions']); + $this->assertEquals(1, $data['data']['subscriptions'][0]['component_id']); + $this->assertEquals(3, $data['data']['subscriptions'][1]['component_id']); } - public function testDeleteSubscriber() + public function test_can_delete_subscriber() { $this->beUser(); - $subscriber = factory('CachetHQ\Cachet\Models\Subscriber')->create(); - $this->delete("/api/v1/subscribers/{$subscriber->id}"); - $this->assertResponseStatus(204); + $subscriber = factory(Subscriber::class)->create(); + $response = $this->json('DELETE', "/api/v1/subscribers/{$subscriber->id}"); + + $response->assertStatus(204); } - public function testDeleteSubscription() + public function test_can_delete_subscription() { $this->beUser(); - $subscription = factory('CachetHQ\Cachet\Models\Subscription')->create(); - $this->delete("/api/v1/subscriptions/{$subscription->id}"); - $this->assertResponseStatus(204); + $subscription = factory(Subscription::class)->create(); + + $response = $this->json('DELETE', "/api/v1/subscriptions/{$subscription->id}"); + + $response->assertStatus(204); } } diff --git a/tests/Bus/Commands/CommandExistenceTest.php b/tests/Bus/Commands/CommandExistenceTest.php index 62106fbac303..0ad29ac37b6a 100644 --- a/tests/Bus/Commands/CommandExistenceTest.php +++ b/tests/Bus/Commands/CommandExistenceTest.php @@ -12,12 +12,13 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands; use AltThree\TestBench\ExistenceTrait; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; /** * This is the command existence test class. * * @author Graham Campbell + * @author James Brooks */ class CommandExistenceTest extends TestCase { diff --git a/tests/Bus/Commands/Component/AddComponentCommandTest.php b/tests/Bus/Commands/Component/CreateComponentCommandTest.php similarity index 69% rename from tests/Bus/Commands/Component/AddComponentCommandTest.php rename to tests/Bus/Commands/Component/CreateComponentCommandTest.php index 9adb22bdc5c5..a2f3e2725cda 100644 --- a/tests/Bus/Commands/Component/AddComponentCommandTest.php +++ b/tests/Bus/Commands/Component/CreateComponentCommandTest.php @@ -12,17 +12,17 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\Component; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\Component\AddComponentCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\Component\AddComponentCommandHandler; +use CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\Component\CreateComponentCommandHandler; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add component command test class. + * This is the create component command test class. * * @author James Brooks * @author Graham Campbell */ -class AddComponentCommandTest extends AbstractTestCase +class CreateComponentCommandTest extends AbstractTestCase { use CommandTrait; @@ -36,15 +36,19 @@ protected function getObjectAndParams() 'order' => 0, 'group_id' => 0, 'enabled' => true, + 'meta' => null, + 'tags' => 'Foo, Bar', ]; - $object = new AddComponentCommand( + $object = new CreateComponentCommand( $params['name'], $params['description'], $params['status'], $params['link'], $params['order'], $params['group_id'], - $params['enabled'] + $params['enabled'], + $params['meta'], + $params['tags'] ); return compact('params', 'object'); @@ -57,6 +61,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return AddComponentCommandHandler::class; + return CreateComponentCommandHandler::class; } } diff --git a/tests/Bus/Commands/Component/UpdateComponentCommandTest.php b/tests/Bus/Commands/Component/UpdateComponentCommandTest.php index edcb432c3e18..4360b28f8bb6 100644 --- a/tests/Bus/Commands/Component/UpdateComponentCommandTest.php +++ b/tests/Bus/Commands/Component/UpdateComponentCommandTest.php @@ -38,6 +38,9 @@ protected function getObjectAndParams() 'order' => 0, 'group_id' => 0, 'enabled' => true, + 'meta' => null, + 'tags' => null, + 'silent' => false, ]; $object = new UpdateComponentCommand( @@ -48,7 +51,10 @@ protected function getObjectAndParams() $params['link'], $params['order'], $params['group_id'], - $params['enabled'] + $params['enabled'], + $params['meta'], + $params['tags'], + $params['silent'] ); return compact('params', 'object'); diff --git a/tests/Bus/Commands/ComponentGroup/AddComponentGroupCommandTest.php b/tests/Bus/Commands/ComponentGroup/CreateComponentGroupCommandTest.php similarity index 73% rename from tests/Bus/Commands/ComponentGroup/AddComponentGroupCommandTest.php rename to tests/Bus/Commands/ComponentGroup/CreateComponentGroupCommandTest.php index 7bf7bcdb44cb..5a4560954446 100644 --- a/tests/Bus/Commands/ComponentGroup/AddComponentGroupCommandTest.php +++ b/tests/Bus/Commands/ComponentGroup/CreateComponentGroupCommandTest.php @@ -12,18 +12,18 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\ComponentGroup; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\ComponentGroup\AddComponentGroupCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\ComponentGroup\AddComponentGroupCommandHandler; +use CachetHQ\Cachet\Bus\Commands\ComponentGroup\CreateComponentGroupCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\ComponentGroup\CreateComponentGroupCommandHandler; use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add component group command test class. + * This is the create component group command test class. * * @author James Brooks * @author Graham Campbell */ -class AddComponentGroupCommandTest extends AbstractTestCase +class CreateComponentGroupCommandTest extends AbstractTestCase { use CommandTrait; @@ -36,7 +36,7 @@ protected function getObjectAndParams() 'visible' => ComponentGroup::VISIBLE_AUTHENTICATED, ]; - $object = new AddComponentGroupCommand( + $object = new CreateComponentGroupCommand( $params['name'], $params['order'], $params['collapsed'], @@ -53,6 +53,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return AddComponentGroupCommandHandler::class; + return CreateComponentGroupCommandHandler::class; } } diff --git a/tests/Bus/Commands/Incident/ReportIncidentCommandTest.php b/tests/Bus/Commands/Incident/CreateIncidentCommandTest.php similarity index 74% rename from tests/Bus/Commands/Incident/ReportIncidentCommandTest.php rename to tests/Bus/Commands/Incident/CreateIncidentCommandTest.php index 6cffe52cb96d..ee84d3865a5f 100644 --- a/tests/Bus/Commands/Incident/ReportIncidentCommandTest.php +++ b/tests/Bus/Commands/Incident/CreateIncidentCommandTest.php @@ -12,17 +12,17 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\Incident; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\Incident\ReportIncidentCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\Incident\ReportIncidentCommandHandler; +use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\Incident\CreateIncidentCommandHandler; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add incident command test class. + * This is the create incident command test class. * * @author James Brooks * @author Graham Campbell */ -class ReportIncidentCommandTest extends AbstractTestCase +class CreateIncidentCommandTest extends AbstractTestCase { use CommandTrait; @@ -37,12 +37,13 @@ protected function getObjectAndParams() 'component_status' => 1, 'notify' => false, 'stickied' => false, - 'incident_date' => null, + 'occurred_at' => null, 'template' => null, 'template_vars' => [], + 'meta' => [], ]; - $object = new ReportIncidentCommand( + $object = new CreateIncidentCommand( $params['name'], $params['status'], $params['message'], @@ -51,9 +52,10 @@ protected function getObjectAndParams() $params['component_status'], $params['notify'], $params['stickied'], - $params['incident_date'], + $params['occurred_at'], $params['template'], - $params['template_vars'] + $params['template_vars'], + $params['meta'] ); return compact('params', 'object'); @@ -66,6 +68,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return ReportIncidentCommandHandler::class; + return CreateIncidentCommandHandler::class; } } diff --git a/tests/Bus/Commands/Incident/ReportMaintenanceCommandTest.php b/tests/Bus/Commands/Incident/ReportMaintenanceCommandTest.php deleted file mode 100644 index f3ee9427c9bb..000000000000 --- a/tests/Bus/Commands/Incident/ReportMaintenanceCommandTest.php +++ /dev/null @@ -1,57 +0,0 @@ - - * @author Graham Campbell - */ -class ReportMaintenanceCommandTest extends AbstractTestCase -{ - use CommandTrait; - - protected function getObjectAndParams() - { - $params = [ - 'name' => 'Test', - 'message' => 'Foo bar baz', - 'notify' => false, - 'timestamp' => '2020-12-30 00:00:01', - ]; - - $object = new ReportMaintenanceCommand( - $params['name'], - $params['message'], - $params['notify'], - $params['timestamp'] - ); - - return compact('params', 'object'); - } - - protected function objectHasRules() - { - return true; - } - - protected function getHandlerClass() - { - return ReportMaintenanceCommandHandler::class; - } -} diff --git a/tests/Bus/Commands/Incident/UpdateIncidentCommandTest.php b/tests/Bus/Commands/Incident/UpdateIncidentCommandTest.php index 0294eb56f6d3..c09ca3aa67f0 100644 --- a/tests/Bus/Commands/Incident/UpdateIncidentCommandTest.php +++ b/tests/Bus/Commands/Incident/UpdateIncidentCommandTest.php @@ -39,7 +39,7 @@ protected function getObjectAndParams() 'component_status' => 1, 'notify' => false, 'stickied' => false, - 'incident_date' => null, + 'occurred_at' => null, 'template' => null, 'template_vars' => [], ]; @@ -54,7 +54,7 @@ protected function getObjectAndParams() $params['component_status'], $params['notify'], $params['stickied'], - $params['incident_date'], + $params['occurred_at'], $params['template'], $params['template_vars'] ); diff --git a/tests/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommandTest.php b/tests/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommandTest.php similarity index 68% rename from tests/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommandTest.php rename to tests/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommandTest.php index 3a81fd188aa6..468a3ef15502 100644 --- a/tests/Bus/Commands/IncidentUpdate/ReportIncidentUpdateCommandTest.php +++ b/tests/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommandTest.php @@ -12,18 +12,18 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\IncidentUpdate; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\ReportIncidentUpdateCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\IncidentUpdate\ReportIncidentUpdateCommandHandler; +use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\CreateIncidentUpdateCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\IncidentUpdate\CreateIncidentUpdateCommandHandler; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\User; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the report incident update command test class. + * This is the create incident update command test class. * * @author James Brooks */ -class ReportIncidentUpdateCommandTest extends AbstractTestCase +class CreateIncidentUpdateCommandTest extends AbstractTestCase { use CommandTrait; @@ -35,7 +35,7 @@ protected function getObjectAndParams() 'message' => 'Foo', 'user' => new User(), ]; - $object = new ReportIncidentUpdateCommand($params['incident'], $params['status'], $params['message'], $params['user']); + $object = new CreateIncidentUpdateCommand($params['incident'], $params['status'], $params['message'], null, null, $params['user']); return compact('params', 'object'); } @@ -47,6 +47,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return ReportIncidentUpdateCommandHandler::class; + return CreateIncidentUpdateCommandHandler::class; } } diff --git a/tests/Bus/Commands/Metric/AddMetricCommandTest.php b/tests/Bus/Commands/Metric/CreateMetricCommandTest.php similarity index 77% rename from tests/Bus/Commands/Metric/AddMetricCommandTest.php rename to tests/Bus/Commands/Metric/CreateMetricCommandTest.php index 0107d6e889d0..7595f54bcce0 100644 --- a/tests/Bus/Commands/Metric/AddMetricCommandTest.php +++ b/tests/Bus/Commands/Metric/CreateMetricCommandTest.php @@ -12,17 +12,17 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\Metric; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\Metric\AddMetricCommandHandler; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\Metric\CreateMetricCommandHandler; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add metric command test class. + * This is the create metric command test class. * * @author James Brooks * @author Graham Campbell */ -class AddMetricCommandTest extends AbstractTestCase +class CreateMetricCommandTest extends AbstractTestCase { use CommandTrait; @@ -39,9 +39,10 @@ protected function getObjectAndParams() 'default_view' => 0, 'threshold' => 0, 'order' => 0, + 'visible' => 1, ]; - $object = new AddMetricCommand( + $object = new CreateMetricCommand( $params['name'], $params['suffix'], $params['description'], @@ -51,7 +52,8 @@ protected function getObjectAndParams() $params['places'], $params['default_view'], $params['threshold'], - $params['order'] + $params['order'], + $params['visible'] ); return compact('params', 'object'); @@ -64,6 +66,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return AddMetricCommandHandler::class; + return CreateMetricCommandHandler::class; } } diff --git a/tests/Bus/Commands/Metric/AddMetricPointCommandTest.php b/tests/Bus/Commands/Metric/CreateMetricPointCommandTest.php similarity index 66% rename from tests/Bus/Commands/Metric/AddMetricPointCommandTest.php rename to tests/Bus/Commands/Metric/CreateMetricPointCommandTest.php index 77c08e9e183c..c2aa8ba72f0d 100644 --- a/tests/Bus/Commands/Metric/AddMetricPointCommandTest.php +++ b/tests/Bus/Commands/Metric/CreateMetricPointCommandTest.php @@ -12,25 +12,25 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\Metric; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\Metric\AddMetricPointCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\Metric\AddMetricPointCommandHandler; +use CachetHQ\Cachet\Bus\Commands\Metric\CreateMetricPointCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\Metric\CreateMetricPointCommandHandler; use CachetHQ\Cachet\Models\Metric; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add metric point command test class. + * This is the create metric point command test class. * * @author James Brooks * @author Graham Campbell */ -class AddMetricPointCommandTest extends AbstractTestCase +class CreateMetricPointCommandTest extends AbstractTestCase { use CommandTrait; protected function getObjectAndParams() { $params = ['metric' => new Metric(), 'value' => 1, 'created_at' => '2020-12-30 12:00:00']; - $object = new AddMetricPointCommand($params['metric'], $params['value'], $params['created_at']); + $object = new CreateMetricPointCommand($params['metric'], $params['value'], $params['created_at']); return compact('params', 'object'); } @@ -42,6 +42,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return AddMetricPointCommandHandler::class; + return CreateMetricPointCommandHandler::class; } } diff --git a/tests/Bus/Commands/Metric/UpdateMetricCommandTest.php b/tests/Bus/Commands/Metric/UpdateMetricCommandTest.php index 048a4ec27f5f..2c9907892706 100644 --- a/tests/Bus/Commands/Metric/UpdateMetricCommandTest.php +++ b/tests/Bus/Commands/Metric/UpdateMetricCommandTest.php @@ -41,6 +41,7 @@ protected function getObjectAndParams() 'default_view' => 0, 'threshold' => 0, 'order' => 0, + 'visible' => 1, ]; $object = new UpdateMetricCommand( @@ -54,7 +55,8 @@ protected function getObjectAndParams() $params['places'], $params['default_view'], $params['threshold'], - $params['order'] + $params['order'], + $params['visible'] ); return compact('params', 'object'); diff --git a/tests/Bus/Commands/Schedule/CreateScheduleCommandTest.php b/tests/Bus/Commands/Schedule/CreateScheduleCommandTest.php new file mode 100644 index 000000000000..3377bef9e01f --- /dev/null +++ b/tests/Bus/Commands/Schedule/CreateScheduleCommandTest.php @@ -0,0 +1,61 @@ + + */ +class CreateScheduleCommandTest extends AbstractTestCase +{ + use CommandTrait; + + protected function getObjectAndParams() + { + $params = [ + 'name' => 'Test', + 'message' => 'Foo', + 'status' => 1, + 'scheduled_at' => date('Y-m-d H:i'), + 'completed_at' => date('Y-m-d H:i'), + 'components' => [], + 'notify' => 1, + ]; + $object = new CreateScheduleCommand( + $params['name'], + $params['message'], + $params['status'], + $params['scheduled_at'], + $params['completed_at'], + $params['components'], + $params['notify'] + ); + + return compact('params', 'object'); + } + + protected function objectHasRules() + { + return true; + } + + protected function getHandlerClass() + { + return CreateScheduleCommandHandler::class; + } +} diff --git a/tests/Bus/Commands/Schedule/DeleteScheduleCommandTest.php b/tests/Bus/Commands/Schedule/DeleteScheduleCommandTest.php new file mode 100644 index 000000000000..0d5ad61f77da --- /dev/null +++ b/tests/Bus/Commands/Schedule/DeleteScheduleCommandTest.php @@ -0,0 +1,50 @@ + + */ +class DeleteScheduleCommandTest extends AbstractTestCase +{ + use CommandTrait; + + protected function getObjectAndParams() + { + $params = [ + 'schedule' => new Schedule(), + ]; + $object = new DeleteScheduleCommand( + $params['schedule'] + ); + + return compact('params', 'object'); + } + + protected function objectHasRules() + { + return true; + } + + protected function getHandlerClass() + { + return DeleteScheduleCommandHandler::class; + } +} diff --git a/tests/Bus/Commands/Schedule/UpdateScheduleCommandTest.php b/tests/Bus/Commands/Schedule/UpdateScheduleCommandTest.php new file mode 100644 index 000000000000..583f6ef76b41 --- /dev/null +++ b/tests/Bus/Commands/Schedule/UpdateScheduleCommandTest.php @@ -0,0 +1,62 @@ + + */ +class UpdateScheduleCommandTest extends AbstractTestCase +{ + use CommandTrait; + + protected function getObjectAndParams() + { + $params = [ + 'schedule' => new Schedule(), + 'name' => 'Foo', + 'message' => 'Bar', + 'status' => 1, + 'scheduled_at' => date('Y-m-d H:i'), + 'completed_at' => date('Y-m-d H:i'), + 'components' => [], + ]; + $object = new UpdateScheduleCommand( + $params['schedule'], + $params['name'], + $params['message'], + $params['status'], + $params['scheduled_at'], + $params['completed_at'], + $params['components'] + ); + + return compact('params', 'object'); + } + + protected function objectHasRules() + { + return true; + } + + protected function getHandlerClass() + { + return UpdateScheduleCommandHandler::class; + } +} diff --git a/tests/Bus/Commands/System/Config/UpdateConfigCommandTest.php b/tests/Bus/Commands/System/Config/UpdateConfigCommandTest.php new file mode 100644 index 000000000000..6d0f5009740d --- /dev/null +++ b/tests/Bus/Commands/System/Config/UpdateConfigCommandTest.php @@ -0,0 +1,49 @@ + + */ +class UpdateConfigCommandTest extends AbstractTestCase +{ + use CommandTrait; + + protected function getObjectAndParams() + { + $params = [ + 'values' => [ + 'FOO' => 'bar', + ], + ]; + $object = new UpdateConfigCommand($params['values']); + + return compact('params', 'object'); + } + + protected function objectHasRules() + { + return false; + } + + protected function getHandlerClass() + { + return UpdateConfigCommandHandler::class; + } +} diff --git a/tests/Bus/Commands/User/AddUserCommandTest.php b/tests/Bus/Commands/User/CreateUserCommandTest.php similarity index 72% rename from tests/Bus/Commands/User/AddUserCommandTest.php rename to tests/Bus/Commands/User/CreateUserCommandTest.php index 83ee9e7eb917..7f5a195015d2 100644 --- a/tests/Bus/Commands/User/AddUserCommandTest.php +++ b/tests/Bus/Commands/User/CreateUserCommandTest.php @@ -12,17 +12,17 @@ namespace CachetHQ\Tests\Cachet\Bus\Commands\User; use AltThree\TestBench\CommandTrait; -use CachetHQ\Cachet\Bus\Commands\User\AddUserCommand; -use CachetHQ\Cachet\Bus\Handlers\Commands\User\AddUserCommandHandler; +use CachetHQ\Cachet\Bus\Commands\User\CreateUserCommand; +use CachetHQ\Cachet\Bus\Handlers\Commands\User\CreateUserCommandHandler; use CachetHQ\Tests\Cachet\AbstractTestCase; /** - * This is the add user command test class. + * This is the create user command test class. * * @author James Brooks * @author Graham Campbell */ -class AddUserCommandTest extends AbstractTestCase +class CreateUserCommandTest extends AbstractTestCase { use CommandTrait; @@ -31,11 +31,11 @@ protected function getObjectAndParams() $params = [ 'username' => 'Test', 'password' => 'fooey', - 'email' => 'test@test.com', + 'email' => 'test@example.com', 'level' => 1, ]; - $object = new AddUserCommand( + $object = new CreateUserCommand( $params['username'], $params['password'], $params['email'], @@ -52,6 +52,6 @@ protected function objectHasRules() protected function getHandlerClass() { - return AddUserCommandHandler::class; + return CreateUserCommandHandler::class; } } diff --git a/tests/Bus/Commands/User/SignupUserCommandTest.php b/tests/Bus/Commands/User/SignupUserCommandTest.php index 5ef7e06da657..187ef5060d73 100644 --- a/tests/Bus/Commands/User/SignupUserCommandTest.php +++ b/tests/Bus/Commands/User/SignupUserCommandTest.php @@ -30,7 +30,7 @@ protected function getObjectAndParams() $params = [ 'username' => 'Test', 'password' => 'fooey', - 'email' => 'test@test.com', + 'email' => 'test@example.com', 'level' => 1, ]; diff --git a/tests/Bus/Events/Beacon/BeaconFailedToSendEventTest.php b/tests/Bus/Events/Beacon/BeaconFailedToSendEventTest.php index 5c785ef2ad5d..977e3ac36602 100644 --- a/tests/Bus/Events/Beacon/BeaconFailedToSendEventTest.php +++ b/tests/Bus/Events/Beacon/BeaconFailedToSendEventTest.php @@ -22,7 +22,7 @@ class BeaconFailedToSendEventTest extends AbstractBeaconEventTestCase { protected function objectHasHandlers() { - return false; + return true; } protected function getObjectAndParams() diff --git a/tests/Bus/Events/Component/ComponentStatusWasUpdatedEventTest.php b/tests/Bus/Events/Component/ComponentStatusWasChangedEventTest.php similarity index 57% rename from tests/Bus/Events/Component/ComponentStatusWasUpdatedEventTest.php rename to tests/Bus/Events/Component/ComponentStatusWasChangedEventTest.php index 4747ca3b073a..a6a15ddaf6dd 100644 --- a/tests/Bus/Events/Component/ComponentStatusWasUpdatedEventTest.php +++ b/tests/Bus/Events/Component/ComponentStatusWasChangedEventTest.php @@ -11,22 +11,26 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\Component; -use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasUpdatedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; use Illuminate\Foundation\Testing\DatabaseMigrations; use MailThief\Testing\InteractsWithMail; /** - * This is the component status was updated event test. + * This is the component status was changed event test. * * @author James Brooks */ -class ComponentStatusWasUpdatedEventTest extends AbstractComponentEventTestCase +class ComponentStatusWasChangedEventTest extends AbstractComponentEventTestCase { - use DatabaseMigrations, InteractsWithMail; + use DatabaseMigrations; + use InteractsWithMail; public function testComponentUpdateEmailWasSent() { + $user = factory('CachetHQ\Cachet\Models\User')->create(); + $component = factory('CachetHQ\Cachet\Models\Component')->create([ 'status' => 2, ]); @@ -37,10 +41,10 @@ public function testComponentUpdateEmailWasSent() $subscriber->subscriptions()->create(['component_id' => $component->id]); - $this->app['events']->fire(new ComponentStatusWasUpdatedEvent($component, 1, 2)); + $this->app['events']->fire(new ComponentStatusWasChangedEvent($user, $component, 1, 2, false)); $this->seeMessageFor($subscriber->email); - $this->seeMessageWithSubject(trans('cachet.subscriber.email.component.subject')); + $this->seeMessageWithSubject(trans('notifications.component.status_update.mail.subject')); $message = $this->getMailer()->lastMessage(); @@ -55,8 +59,20 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['component' => new Component(), 'original_status' => 1, 'new_status' => 2]; - $object = new ComponentStatusWasUpdatedEvent($params['component'], $params['original_status'], $params['new_status']); + $params = [ + 'user' => new User(), + 'component' => new Component(), + 'original_status' => 1, + 'new_status' => 2, + 'silent' => false, + ]; + $object = new ComponentStatusWasChangedEvent( + $params['user'], + $params['component'], + $params['original_status'], + $params['new_status'], + $params['silent'] + ); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Component/ComponentWasAddedEventTest.php b/tests/Bus/Events/Component/ComponentWasCreatedEventTest.php similarity index 59% rename from tests/Bus/Events/Component/ComponentWasAddedEventTest.php rename to tests/Bus/Events/Component/ComponentWasCreatedEventTest.php index 1584669268c2..532f09c25b0a 100644 --- a/tests/Bus/Events/Component/ComponentWasAddedEventTest.php +++ b/tests/Bus/Events/Component/ComponentWasCreatedEventTest.php @@ -11,10 +11,11 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\Component; -use CachetHQ\Cachet\Bus\Events\Component\ComponentWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\Component\ComponentWasCreatedEvent; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; -class ComponentWasAddedEventTest extends AbstractComponentEventTestCase +class ComponentWasCreatedEventTest extends AbstractComponentEventTestCase { protected function objectHasHandlers() { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['component' => new Component()]; - $object = new ComponentWasAddedEvent($params['component']); + $params = ['user' => new User(), 'component' => new Component()]; + $object = new ComponentWasCreatedEvent($params['user'], $params['component']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Component/ComponentWasRemovedEventTest.php b/tests/Bus/Events/Component/ComponentWasRemovedEventTest.php index 642a98b13c5c..d70b30f762ef 100644 --- a/tests/Bus/Events/Component/ComponentWasRemovedEventTest.php +++ b/tests/Bus/Events/Component/ComponentWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Component\ComponentWasRemovedEvent; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; class ComponentWasRemovedEventTest extends AbstractComponentEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['component' => new Component()]; - $object = new ComponentWasRemovedEvent($params['component']); + $params = ['user' => new User(), 'component' => new Component()]; + $object = new ComponentWasRemovedEvent($params['user'], $params['component']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Component/ComponentWasUpdatedEventTest.php b/tests/Bus/Events/Component/ComponentWasUpdatedEventTest.php index 54d6a0fdf310..7555fdae7d85 100644 --- a/tests/Bus/Events/Component/ComponentWasUpdatedEventTest.php +++ b/tests/Bus/Events/Component/ComponentWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\User; class ComponentWasUpdatedEventTest extends AbstractComponentEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['component' => new Component()]; - $object = new ComponentWasUpdatedEvent($params['component']); + $params = ['user' => new User(), 'component' => new Component()]; + $object = new ComponentWasUpdatedEvent($params['user'], $params['component']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/ComponentGroup/ComponentGroupWasAddedEventTest.php b/tests/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEventTest.php similarity index 58% rename from tests/Bus/Events/ComponentGroup/ComponentGroupWasAddedEventTest.php rename to tests/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEventTest.php index 91ba5e2d1de0..a0bedb11ac9d 100644 --- a/tests/Bus/Events/ComponentGroup/ComponentGroupWasAddedEventTest.php +++ b/tests/Bus/Events/ComponentGroup/ComponentGroupWasCreatedEventTest.php @@ -11,10 +11,11 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\ComponentGroup; -use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasCreatedEvent; use CachetHQ\Cachet\Models\ComponentGroup; +use CachetHQ\Cachet\Models\User; -class ComponentGroupWasAddedEventTest extends AbstractComponentGroupEventTestCase +class ComponentGroupWasCreatedEventTest extends AbstractComponentGroupEventTestCase { protected function objectHasHandlers() { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['group' => new ComponentGroup()]; - $object = new ComponentGroupWasAddedEvent($params['group']); + $params = ['user' => new User(), 'group' => new ComponentGroup()]; + $object = new ComponentGroupWasCreatedEvent($params['user'], $params['group']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEventTest.php b/tests/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEventTest.php index c96aaf50717b..1a9903e43a7c 100644 --- a/tests/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEventTest.php +++ b/tests/Bus/Events/ComponentGroup/ComponentGroupWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasRemovedEvent; use CachetHQ\Cachet\Models\ComponentGroup; +use CachetHQ\Cachet\Models\User; class ComponentGroupWasRemovedEventTest extends AbstractComponentGroupEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['group' => new ComponentGroup()]; - $object = new ComponentGroupWasRemovedEvent($params['group']); + $params = ['user' => new User(), 'group' => new ComponentGroup()]; + $object = new ComponentGroupWasRemovedEvent($params['user'], $params['group']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEventTest.php b/tests/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEventTest.php index 6b28bcb9756d..e1be2705e0b6 100644 --- a/tests/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEventTest.php +++ b/tests/Bus/Events/ComponentGroup/ComponentGroupWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\ComponentGroup\ComponentGroupWasUpdatedEvent; use CachetHQ\Cachet\Models\ComponentGroup; +use CachetHQ\Cachet\Models\User; class ComponentGroupWasUpdatedEventTest extends AbstractComponentGroupEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['group' => new ComponentGroup()]; - $object = new ComponentGroupWasUpdatedEvent($params['group']); + $params = ['user' => new User(), 'group' => new ComponentGroup()]; + $object = new ComponentGroupWasUpdatedEvent($params['user'], $params['group']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/EventExistenceTest.php b/tests/Bus/Events/EventExistenceTest.php index 47983a7f3bf7..6229a49d5948 100644 --- a/tests/Bus/Events/EventExistenceTest.php +++ b/tests/Bus/Events/EventExistenceTest.php @@ -12,7 +12,7 @@ namespace CachetHQ\Tests\Cachet\Bus\Events; use AltThree\TestBench\ExistenceTrait; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; /** * This is the event existence test class. diff --git a/tests/Bus/Events/Incident/MaintenanceWasScheduledEventTest.php b/tests/Bus/Events/Incident/IncidentWasCreatedEventTest.php similarity index 53% rename from tests/Bus/Events/Incident/MaintenanceWasScheduledEventTest.php rename to tests/Bus/Events/Incident/IncidentWasCreatedEventTest.php index bf273cf06510..5fd7d72027ab 100644 --- a/tests/Bus/Events/Incident/MaintenanceWasScheduledEventTest.php +++ b/tests/Bus/Events/Incident/IncidentWasCreatedEventTest.php @@ -11,15 +11,16 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\Incident; -use CachetHQ\Cachet\Bus\Events\Incident\MaintenanceWasScheduledEvent; +use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\User; /** - * This is the maintenance was scheduled event test class. + * This is the incident was created event test class. * * @author James Brooks */ -class MaintenanceWasScheduledEventTest extends AbstractIncidentEventTestCase +class IncidentWasCreatedEventTest extends AbstractIncidentEventTestCase { protected function objectHasHandlers() { @@ -28,8 +29,12 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['incident' => new Incident()]; - $object = new MaintenanceWasScheduledEvent($params['incident']); + $params = [ + 'user' => new User(), + 'incident' => new Incident(), + 'notify' => true, + ]; + $object = new IncidentWasCreatedEvent($params['user'], $params['incident'], $params['notify']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Incident/IncidentWasRemovedEventTest.php b/tests/Bus/Events/Incident/IncidentWasRemovedEventTest.php index aadb73985816..63ff848c729d 100644 --- a/tests/Bus/Events/Incident/IncidentWasRemovedEventTest.php +++ b/tests/Bus/Events/Incident/IncidentWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\User; /** * This is the incident was removed event test class. @@ -28,8 +29,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['incident' => new Incident()]; - $object = new IncidentWasRemovedEvent($params['incident']); + $params = ['user' => new User(), 'incident' => new Incident()]; + $object = new IncidentWasRemovedEvent($params['user'], $params['incident']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Incident/IncidentWasReportedEventTest.php b/tests/Bus/Events/Incident/IncidentWasReportedEventTest.php deleted file mode 100644 index c6f880f6e680..000000000000 --- a/tests/Bus/Events/Incident/IncidentWasReportedEventTest.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ -class IncidentWasReportedEventTest extends AbstractIncidentEventTestCase -{ - protected function objectHasHandlers() - { - return true; - } - - protected function getObjectAndParams() - { - $params = ['incident' => new Incident()]; - $object = new IncidentWasReportedEvent($params['incident']); - - return compact('params', 'object'); - } -} diff --git a/tests/Bus/Events/Incident/IncidentWasUpdatedEventTest.php b/tests/Bus/Events/Incident/IncidentWasUpdatedEventTest.php index 732de05c6f30..7fb95637f0d1 100644 --- a/tests/Bus/Events/Incident/IncidentWasUpdatedEventTest.php +++ b/tests/Bus/Events/Incident/IncidentWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent; use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\User; /** * This is the incident was updated event test class. @@ -28,8 +29,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['incident' => new Incident()]; - $object = new IncidentWasUpdatedEvent($params['incident']); + $params = ['user' => new User(), 'incident' => new Incident()]; + $object = new IncidentWasUpdatedEvent($params['user'], $params['incident']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEventTest.php b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEventTest.php index cdc04296f0ae..faac63768b9a 100644 --- a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEventTest.php +++ b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasRemovedEvent; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; class IncidentUpdateWasRemovedEventTest extends AbstractIncidentUpdateEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['update' => new IncidentUpdate()]; - $object = new IncidentUpdateWasRemovedEvent($params['update']); + $params = ['user' => new User(), 'update' => new IncidentUpdate()]; + $object = new IncidentUpdateWasRemovedEvent($params['user'], $params['update']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEventTest.php b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEventTest.php index f7d014781823..cd4369921ad0 100644 --- a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEventTest.php +++ b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasReportedEventTest.php @@ -13,18 +13,19 @@ use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasReportedEvent; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; class IncidentUpdateWasReportedEventTest extends AbstractIncidentUpdateEventTestCase { protected function objectHasHandlers() { - return false; + return true; } protected function getObjectAndParams() { - $params = ['update' => new IncidentUpdate()]; - $object = new IncidentUpdateWasReportedEvent($params['update']); + $params = ['user' => new User(), 'update' => new IncidentUpdate()]; + $object = new IncidentUpdateWasReportedEvent($params['user'], $params['update']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEventTest.php b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEventTest.php index c576beeb9435..36b45683c58e 100644 --- a/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEventTest.php +++ b/tests/Bus/Events/IncidentUpdate/IncidentUpdateWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasUpdatedEvent; use CachetHQ\Cachet\Models\IncidentUpdate; +use CachetHQ\Cachet\Models\User; class IncidentUpdateWasUpdatedEventTest extends AbstractIncidentUpdateEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['update' => new IncidentUpdate()]; - $object = new IncidentUpdateWasUpdatedEvent($params['update']); + $params = ['user' => new User(), 'update' => new IncidentUpdate()]; + $object = new IncidentUpdateWasUpdatedEvent($params['user'], $params['update']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricPointWasAddedEventTest.php b/tests/Bus/Events/Metric/MetricPointWasCreatedEventTest.php similarity index 57% rename from tests/Bus/Events/Metric/MetricPointWasAddedEventTest.php rename to tests/Bus/Events/Metric/MetricPointWasCreatedEventTest.php index 99fe8be33593..4c903e0ce13c 100644 --- a/tests/Bus/Events/Metric/MetricPointWasAddedEventTest.php +++ b/tests/Bus/Events/Metric/MetricPointWasCreatedEventTest.php @@ -11,15 +11,16 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\Metric; -use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasCreatedEvent; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\User; /** - * This is the metric point was added event test class. + * This is the metric point was created event test class. * * @author James Brooks */ -class MetricPointWasAddedEventTest extends AbstractMetricEventTestCase +class MetricPointWasCreatedEventTest extends AbstractMetricEventTestCase { protected function objectHasHandlers() { @@ -28,8 +29,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metricPoint' => new MetricPoint()]; - $object = new MetricPointWasAddedEvent($params['metricPoint']); + $params = ['user' => new User(), 'metricPoint' => new MetricPoint()]; + $object = new MetricPointWasCreatedEvent($params['user'], $params['metricPoint']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricPointWasRemovedEventTest.php b/tests/Bus/Events/Metric/MetricPointWasRemovedEventTest.php index 4c2a8c4f2ee2..f55ee3cd4621 100644 --- a/tests/Bus/Events/Metric/MetricPointWasRemovedEventTest.php +++ b/tests/Bus/Events/Metric/MetricPointWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasRemovedEvent; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\User; /** * This is the metric point was removed event test class. @@ -28,8 +29,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metricPoint' => new MetricPoint()]; - $object = new MetricPointWasRemovedEvent($params['metricPoint']); + $params = ['user' => new User(), 'metricPoint' => new MetricPoint()]; + $object = new MetricPointWasRemovedEvent($params['user'], $params['metricPoint']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricPointWasUpdatedEventTest.php b/tests/Bus/Events/Metric/MetricPointWasUpdatedEventTest.php index fd5b30997c40..4f411dd68186 100644 --- a/tests/Bus/Events/Metric/MetricPointWasUpdatedEventTest.php +++ b/tests/Bus/Events/Metric/MetricPointWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Metric\MetricPointWasUpdatedEvent; use CachetHQ\Cachet\Models\MetricPoint; +use CachetHQ\Cachet\Models\User; /** * This is the metric point was updated event test class. @@ -28,8 +29,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metricPoint' => new MetricPoint()]; - $object = new MetricPointWasUpdatedEvent($params['metricPoint']); + $params = ['user' => new User(), 'metricPoint' => new MetricPoint()]; + $object = new MetricPointWasUpdatedEvent($params['user'], $params['metricPoint']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricWasAddedEventTest.php b/tests/Bus/Events/Metric/MetricWasCreatedEventTest.php similarity index 60% rename from tests/Bus/Events/Metric/MetricWasAddedEventTest.php rename to tests/Bus/Events/Metric/MetricWasCreatedEventTest.php index 63da8cfc304b..2f81383f044d 100644 --- a/tests/Bus/Events/Metric/MetricWasAddedEventTest.php +++ b/tests/Bus/Events/Metric/MetricWasCreatedEventTest.php @@ -11,10 +11,11 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\Metric; -use CachetHQ\Cachet\Bus\Events\Metric\MetricWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\Metric\MetricWasCreatedEvent; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\User; -class MetricWasAddedEventTest extends AbstractMetricEventTestCase +class MetricWasCreatedEventTest extends AbstractMetricEventTestCase { protected function objectHasHandlers() { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metric' => new Metric()]; - $object = new MetricWasAddedEvent($params['metric']); + $params = ['user' => new User(), 'metric' => new Metric()]; + $object = new MetricWasCreatedEvent($params['user'], $params['metric']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricWasRemovedEventTest.php b/tests/Bus/Events/Metric/MetricWasRemovedEventTest.php index a5aa90d14ee5..3759ee05e6c6 100644 --- a/tests/Bus/Events/Metric/MetricWasRemovedEventTest.php +++ b/tests/Bus/Events/Metric/MetricWasRemovedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Metric\MetricWasRemovedEvent; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\User; class MetricWasRemovedEventTest extends AbstractMetricEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metric' => new Metric()]; - $object = new MetricWasRemovedEvent($params['metric']); + $params = ['user' => new User(), 'metric' => new Metric()]; + $object = new MetricWasRemovedEvent($params['user'], $params['metric']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Metric/MetricWasUpdatedEventTest.php b/tests/Bus/Events/Metric/MetricWasUpdatedEventTest.php index 8f8cba556f4b..0e6cbc4eb763 100644 --- a/tests/Bus/Events/Metric/MetricWasUpdatedEventTest.php +++ b/tests/Bus/Events/Metric/MetricWasUpdatedEventTest.php @@ -13,6 +13,7 @@ use CachetHQ\Cachet\Bus\Events\Metric\MetricWasUpdatedEvent; use CachetHQ\Cachet\Models\Metric; +use CachetHQ\Cachet\Models\User; class MetricWasUpdatedEventTest extends AbstractMetricEventTestCase { @@ -23,8 +24,8 @@ protected function objectHasHandlers() protected function getObjectAndParams() { - $params = ['metric' => new Metric()]; - $object = new MetricWasUpdatedEvent($params['metric']); + $params = ['user' => new User(), 'metric' => new Metric()]; + $object = new MetricWasUpdatedEvent($params['user'], $params['metric']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/Schedule/AbstractScheduleEventTestCase.php b/tests/Bus/Events/Schedule/AbstractScheduleEventTestCase.php new file mode 100644 index 000000000000..66b805a16b6b --- /dev/null +++ b/tests/Bus/Events/Schedule/AbstractScheduleEventTestCase.php @@ -0,0 +1,26 @@ + new User(), 'schedule' => new Schedule()]; + $object = new ScheduleWasCreatedEvent($params['user'], $params['schedule']); + + return compact('params', 'object'); + } +} diff --git a/tests/Bus/Events/Schedule/ScheduleWasRemovedEventTest.php b/tests/Bus/Events/Schedule/ScheduleWasRemovedEventTest.php new file mode 100644 index 000000000000..112828852993 --- /dev/null +++ b/tests/Bus/Events/Schedule/ScheduleWasRemovedEventTest.php @@ -0,0 +1,32 @@ + new User(), 'schedule' => new Schedule()]; + $object = new ScheduleWasRemovedEvent($params['user'], $params['schedule']); + + return compact('params', 'object'); + } +} diff --git a/tests/Bus/Events/Schedule/ScheduleWasUpdatedEventTest.php b/tests/Bus/Events/Schedule/ScheduleWasUpdatedEventTest.php new file mode 100644 index 000000000000..ec5f8df4564b --- /dev/null +++ b/tests/Bus/Events/Schedule/ScheduleWasUpdatedEventTest.php @@ -0,0 +1,32 @@ + new User(), 'schedule' => new Schedule()]; + $object = new ScheduleWasUpdatedEvent($params['user'], $params['schedule']); + + return compact('params', 'object'); + } +} diff --git a/tests/Bus/Events/Subscriber/SubscriberHasSubscribedEventTest.php b/tests/Bus/Events/Subscriber/SubscriberHasSubscribedEventTest.php index 0bf1e6617799..52a88b924ab9 100644 --- a/tests/Bus/Events/Subscriber/SubscriberHasSubscribedEventTest.php +++ b/tests/Bus/Events/Subscriber/SubscriberHasSubscribedEventTest.php @@ -18,7 +18,7 @@ class SubscriberHasSubscribedEventTest extends AbstractSubscriberEventTestCase { protected function objectHasHandlers() { - return true; + return false; } protected function getObjectAndParams() diff --git a/tests/Bus/Events/User/UserAcceptedInviteEventTest.php b/tests/Bus/Events/User/UserAcceptedInviteEventTest.php new file mode 100644 index 000000000000..e948fc76ce35 --- /dev/null +++ b/tests/Bus/Events/User/UserAcceptedInviteEventTest.php @@ -0,0 +1,40 @@ + + */ +class UserAcceptedInviteEventTest extends AbstractUserEventTestCase +{ + protected function objectHasHandlers() + { + return false; + } + + protected function getObjectAndParams() + { + $params = [ + 'user' => new User(), + 'invite' => new Invite(), + ]; + $object = new UserAcceptedInviteEvent($params['user'], $params['invite']); + + return compact('params', 'object'); + } +} diff --git a/tests/Bus/Events/User/UserWasAddedEventTest.php b/tests/Bus/Events/User/UserWasCreatedEventTest.php similarity index 67% rename from tests/Bus/Events/User/UserWasAddedEventTest.php rename to tests/Bus/Events/User/UserWasCreatedEventTest.php index 0a9340cbf622..574567d26a45 100644 --- a/tests/Bus/Events/User/UserWasAddedEventTest.php +++ b/tests/Bus/Events/User/UserWasCreatedEventTest.php @@ -11,15 +11,16 @@ namespace CachetHQ\Tests\Cachet\Bus\Events\User; -use CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent; +use CachetHQ\Cachet\Bus\Events\User\UserWasCreatedEvent; use CachetHQ\Cachet\Models\User; /** - * This is the user was added event test class. + * This is the user was created event test class. * * @author Graham Campbell + * @author James Brooks */ -class UserWasAddedEventTest extends AbstractUserEventTestCase +class UserWasCreatedEventTest extends AbstractUserEventTestCase { protected function objectHasHandlers() { @@ -29,7 +30,7 @@ protected function objectHasHandlers() protected function getObjectAndParams() { $params = ['user' => new User()]; - $object = new UserWasAddedEvent($params['user']); + $object = new UserWasCreatedEvent($params['user']); return compact('params', 'object'); } diff --git a/tests/Bus/Events/User/UserWasInvitedEventTest.php b/tests/Bus/Events/User/UserWasInvitedEventTest.php index acdfbd71e053..af63507e407b 100644 --- a/tests/Bus/Events/User/UserWasInvitedEventTest.php +++ b/tests/Bus/Events/User/UserWasInvitedEventTest.php @@ -23,7 +23,7 @@ class UserWasInvitedEventTest extends AbstractUserEventTestCase { protected function objectHasHandlers() { - return true; + return false; } protected function getObjectAndParams() diff --git a/tests/Bus/Jobs/JobExistenceTest.php b/tests/Bus/Jobs/JobExistenceTest.php index f271ef4cb92e..2767200dfd36 100644 --- a/tests/Bus/Jobs/JobExistenceTest.php +++ b/tests/Bus/Jobs/JobExistenceTest.php @@ -12,7 +12,7 @@ namespace CachetHQ\Tests\Cachet\Bus\Jobs; use AltThree\TestBench\ExistenceTrait; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; /** * This is the job existence test class. diff --git a/tests/Bus/Traits/StoresMetaTest.php b/tests/Bus/Traits/StoresMetaTest.php new file mode 100644 index 000000000000..641878f89936 --- /dev/null +++ b/tests/Bus/Traits/StoresMetaTest.php @@ -0,0 +1,133 @@ +markTestSkipped('This test requires Mockery'); + } + + $this->metaModel = Mockery::mock(Meta::class)->makePartial(); + $this->app->instance(Meta::class, $this->metaModel); + } + + /** + * Our Mockery expectations should count as assertions to prevent warnings from PHPUnit. + */ + public function tearDown() + { + $this->addToAssertionCount(Mockery::getContainer()->mockery_getExpectationCount()); + parent::tearDown(); + } + + /** + * Each array value passed to the MetaValues should result in a new model instance. + */ + public function testStoresMetaWithSimpleMultipleArrays() + { + $mock = $this->getMockForTrait(StoresMeta::class); + $metaData = [ + 'somekey1' => 'somevalue', + 'somekey2' => 'somevalue', + 'somekey3' => 'somevalue', + ]; + + $this->metaModel->shouldReceive('firstOrNew')->times(3)->andReturn($this->metaModel); + $this->metaModel->shouldReceive('save')->times(3); + $this->metaModel->shouldReceive('setAttribute')->times(3)->andReturnUsing(function ($key, $value) { + $this->assertEquals('value', $key); + $this->assertEquals('somevalue', $value); + + return $this->metaModel; + }); + + $mock->storeMeta($metaData, 'some_class', 1, $this->metaModel); + } + + /** + * It will pass nested arrays to the value property of the Meta model. + */ + public function testStoresNestedArraysAsSingleValue() + { + $mock = $this->getMockForTrait(StoresMeta::class); + $metaData = ['somekey1' => ['subkey' => ['second' => 'key']]]; + + $this->metaModel->shouldReceive('firstOrNew')->once()->andReturn($this->metaModel); + $this->metaModel->shouldReceive('save')->once(); + $this->metaModel->shouldReceive('setAttribute')->once()->andReturnUsing(function ($key, $value) { + $this->assertEquals('value', $key); + $this->assertEquals(['subkey' => ['second' => 'key']], $value); + + return $this->metaModel; + }); + + $mock->storeMeta($metaData, 'some_class', 1, $this->metaModel); + } + + /** + * If a value is empty or null it will be removed. + */ + public function testEmptyValuesWillBeDeleted() + { + $mock = $this->getMockForTrait(StoresMeta::class); + $metaData = ['somekey1' => '']; + + $this->metaModel->exists = true; + $this->metaModel->shouldReceive('firstOrNew')->once()->andReturn($this->metaModel); + $this->metaModel->shouldReceive('delete')->once(); + $this->metaModel->shouldReceive('setAttribute')->never(); + $this->metaModel->shouldReceive('save')->never(); + + $mock->storeMeta($metaData, 'some_class', 1, $this->metaModel); + } + + /** + * If a value is empty or null in a nested array it will be removed. + */ + public function testEmptyNestedArrayKeysAreRemoved() + { + $mock = $this->getMockForTrait(StoresMeta::class); + $metaData = ['somekey1' => ['keyWithValue' => 'value123', 'keyWithoutValue' => null]]; + + $this->metaModel->exists = true; + $this->metaModel->shouldReceive('firstOrNew')->once()->andReturn($this->metaModel); + $this->metaModel->shouldReceive('setAttribute')->once()->andReturnUsing(function ($key, $value) { + $this->assertEquals('value', $key); + $this->assertEquals(['keyWithValue' => 'value123'], $value); + + return $this->metaModel; + }); + $this->metaModel->shouldReceive('save')->once(); + $this->metaModel->shouldReceive('delete')->never(); + + $mock->storeMeta($metaData, 'some_class', 1, $this->metaModel); + } +} diff --git a/tests/CreatesApplicationTrait.php b/tests/CreatesApplicationTrait.php new file mode 100644 index 000000000000..3e6c0a636323 --- /dev/null +++ b/tests/CreatesApplicationTrait.php @@ -0,0 +1,36 @@ + + */ +trait CreatesApplicationTrait +{ + /** + * Creates the application. + * + * @return \Illuminate\Foundation\Application + */ + public function createApplication() + { + $app = require __DIR__.'/../bootstrap/app.php'; + + $app->make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Foundation/Providers/EventServiceProviderTest.php b/tests/Foundation/Providers/EventServiceProviderTest.php deleted file mode 100644 index bca5fc820b0f..000000000000 --- a/tests/Foundation/Providers/EventServiceProviderTest.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ -class EventServiceProviderTest extends AbstractTestCase -{ - use EventServiceProviderTrait; -} diff --git a/tests/Foundation/Providers/ModuleServiceProviderTest.php b/tests/Foundation/Providers/ModuleServiceProviderTest.php deleted file mode 100644 index b8ff49e674b2..000000000000 --- a/tests/Foundation/Providers/ModuleServiceProviderTest.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ -class ModuleServiceProviderTest extends AbstractTestCase -{ - use ServiceProviderTrait; -} diff --git a/tests/Functional/AppCommandTest.php b/tests/Functional/AppCommandTest.php deleted file mode 100644 index 9e596c224148..000000000000 --- a/tests/Functional/AppCommandTest.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @author James Brooks - */ -class AppCommandTest extends AbstractTestCase -{ - public function testInstall() - { - $this->assertSame(0, $this->app->make(Kernel::class)->call('app:install')); - } - - public function testReset() - { - $this->assertSame(0, $this->app->make(Kernel::class)->call('app:reset')); - } - - public function testUpdate() - { - $this->assertSame(0, $this->app->make(Kernel::class)->call('app:reset')); - } -} diff --git a/tests/Functional/ArtisanCommandTest.php b/tests/Functional/ArtisanCommandTest.php index 94d2536cb051..1c69d33de49e 100644 --- a/tests/Functional/ArtisanCommandTest.php +++ b/tests/Functional/ArtisanCommandTest.php @@ -39,4 +39,9 @@ public function testBeacon() { $this->assertSame(0, $this->app->make(Kernel::class)->call('cachet:beacon')); } + + public function testVersion() + { + $this->assertSame(0, $this->app->make(Kernel::class)->call('cachet:version')); + } } diff --git a/tests/Functional/Incident/MetaSeoTest.php b/tests/Functional/Incident/MetaSeoTest.php new file mode 100644 index 000000000000..42edb362060d --- /dev/null +++ b/tests/Functional/Incident/MetaSeoTest.php @@ -0,0 +1,192 @@ + + * @author Graham Campbell + */ +class MetaSeoTest extends AbstractTestCase +{ + use DatabaseMigrations; + + /** + * @var \Faker\Generator + */ + protected $fakerFactory; + + /** + * @var string + */ + protected $appName; + + /** + * @var array[]|null + */ + protected $incidents; + + /** + * CreateIncidentCommandTest constructor. + * + * @param null $name + * @param array $data + * @param string $dataName + */ + public function __construct($name = null, array $data = [], $dataName = '') + { + parent::__construct($name, $data, $dataName); + $this->fakerFactory = \Faker\Factory::create(); + $this->appName = 'MetaSeoTest'; + } + + /** + * Setup the application. + */ + public function setUp() + { + parent::setUp(); + $this->app->make(SettingsRepository::class)->set('app_name', $this->appName); + $this->app->config->set('setting.app_name', $this->appName); + $this->incidents = [ + ['title' => 'Foo '.Str::random(16), 'description' => 'Foo Bar Baz '.Str::random(32)], + ['title' => 'Foe '.Str::random(16), 'description' => 'Foe Baz Bar '.Str::random(32)], + ]; + } + + /** + * When using a custom meta description in an incident it will be + * showed in two meta tags on the incident details page. + */ + public function testCustomSeoDescriptionOnIncidentPage() + { + $expectedDescription = $this->incidents[0]['description']; + + $incident = $this->createIncidentWithMeta($this->incidents[1], ['seo' => ['description' => $expectedDescription]]); + $page = $this->get(sprintf('/incidents/%d', $incident->id)); + + $this->assertContains( + sprintf('', $expectedDescription), + $page->content() + ); + $this->assertContains( + sprintf('', $expectedDescription), + $page->content() + ); + } + + /** + * When using a custom meta title in an incident it will be + * showed in two meta tags on the incident details page. + */ + public function testCustomSeoTitleOnIncidentPage() + { + $title = $this->incidents[0]['title']; + + $incident = $this->createIncidentWithMeta($this->incidents[1], ['seo' => ['title' => $title]]); + $page = $this->get(sprintf('/incidents/%d', $incident->id)); + + $this->assertContains( + sprintf('', $title, $this->appName), + $page->content() + ); + $this->assertContains( + sprintf('%s | %s', $title, $this->appName), + $page->content() + ); + } + + /** + * When using no custom meta description in an incident, the application + * default generated description will be used on the incident details page. + */ + public function testNoCustomSeoDescriptionOnIncidentPage() + { + $incident = $this->createIncidentWithMeta($this->incidents[1]); + $presenter = $this->app->make(IncidentPresenter::class); + $presenter->setWrappedObject($incident); + + $expectedDescription = sprintf( + 'Details and updates about the %s incident that occurred on %s', + $incident->name, + $presenter->occurred_at_formatted + ); + + $page = $this->get(sprintf('/incidents/%d', $incident->id)); + + $this->assertContains( + sprintf('', $expectedDescription), + $page->content() + ); + $this->assertContains( + sprintf('', $expectedDescription), + $page->content() + ); + } + + /** + * When using no custom meta description in an incident, the application + * default generated description will be used on the incident details page. + */ + public function testNoCustomSeoTitleOnIncidentPage() + { + $incident = $this->createIncidentWithMeta($this->incidents[1]); + $expectedTitle = sprintf('%s | %s', $incident->name, $this->appName); + + $page = $this->get(sprintf('/incidents/%d', $incident->id)); + + $this->assertContains( + sprintf('', $expectedTitle), + $page->content() + ); + $this->assertContains(sprintf('%s', $expectedTitle), $page->content()); + } + + /** + * @param array $incident + * @param array $meta + * + * @return Incident + */ + protected function createIncidentWithMeta(array $incident, array $meta = []) + { + $this->signIn(); + $name = $incident['title']; + $message = $incident['description']; + + dispatch(new CreateIncidentCommand( + $name, + $this->fakerFactory->numberBetween(0, 3), + $message, + $this->fakerFactory->boolean, + null, + null, + false, + $this->fakerFactory->boolean, + $this->fakerFactory->date('Y-m-d H:i'), + null, + [], + $meta + )); + + return Incident::where('name', '=', $name)->where('message', '=', $message)->firstOrFail(); + } +} diff --git a/tests/Functional/Notifications/MailTest.php b/tests/Functional/Notifications/MailTest.php new file mode 100644 index 000000000000..59c5d0900896 --- /dev/null +++ b/tests/Functional/Notifications/MailTest.php @@ -0,0 +1,193 @@ +fakerFactory = \Faker\Factory::create(); + $this->appName = 'MailTest'; + } + + /** + * Setup the application. + */ + public function setUp() + { + parent::setUp(); + $this->app->make(SettingsRepository::class)->set('app_name', $this->appName); + $this->app->config->set('setting.app_name', $this->appName); + $this->incidents = [ + ['title' => 'Foo '.Str::random(16), 'description' => 'Foo Bar Baz '.Str::random(32)], + ['title' => 'Foe '.Str::random(16), 'description' => 'Foe Baz Bar '.Str::random(32)], + ]; + } + + /** + * Create a new subscriber. + */ + public function createSubscriber($subscriberEmail) + { + dispatch(new SubscribeSubscriberCommand( + $subscriberEmail, + true + )); + + return Subscriber::where('email', '=', $subscriberEmail)->firstOrFail(); + } + + /** + * @param array $incident + * @param array $meta + * + * @return Incident + */ + protected function createIncident(array $incident) + { + $name = $incident['title']; + $message = $incident['description']; + + dispatch(new CreateIncidentCommand( + $name, + $this->fakerFactory->numberBetween(0, 3), + $message, + true, + null, + null, + true, + true, + $this->fakerFactory->date('Y-m-d H:i'), + null, + [] + )); + + return Incident::where('name', '=', $name)->where('message', '=', $message)->firstOrFail(); + } + + /** + * Send an email notification to subscribers when a new incident + * is added. + */ + public function testEmailNotificationSentForNewIncident() + { + Notification::fake(); + + $this->signIn(); + + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + + $response = $this->post('dashboard/incidents/create', [ + 'name' => $this->fakerFactory->word, + 'status' => 1, + 'visible' => 1, + 'message' => $this->fakerFactory->paragraph, + 'notify' => 1, + ]); + + Notification::assertSentTo( + [$subscriber], + NewIncidentNotification::class + ); + } + + /** + * Do not send an email if notify not checked. + */ + public function testEmailNotificationNotSentWhenNotifyNotCheckedForNewIncident() + { + Notification::fake(); + + $this->signIn(); + + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + + $response = $this->post('dashboard/incidents/create', [ + 'name' => $this->fakerFactory->word, + 'status' => 1, + 'visible' => 1, + 'message' => $this->fakerFactory->paragraph, + 'notify' => 0, + ]); + + Notification::assertNotSentTo( + [$subscriber], + NewIncidentNotification::class + ); + } + + /** + * Send an email notification to subscribers when an incident + * update is added. + */ + public function testEmailNotificationSentForIncidentUpdate() + { + Notification::fake(); + + $this->signIn(); + + $incident = $this->createIncident($this->incidents[1]); + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + + $response = $this->post('dashboard/incidents/'.$incident->id.'/updates/create', [ + 'status' => 1, + 'message' => $this->fakerFactory->paragraph, + ]); + + Notification::assertSentTo( + [$subscriber], + IncidentUpdatedNotification::class + ); + } +} diff --git a/tests/Http/Controllers/Dashboard/DashboardControllerTest.php b/tests/Http/Controllers/Dashboard/DashboardControllerTest.php deleted file mode 100644 index d05096c6c34e..000000000000 --- a/tests/Http/Controllers/Dashboard/DashboardControllerTest.php +++ /dev/null @@ -1,84 +0,0 @@ -setupPublicAndNonPublicComponentGroups() - ->setupConfig(); - } - - /** @test */ - public function on_dashboard_all_component_groups_are_displayed() - { - $this->signIn(); - - $this->visit('/dashboard') - ->see(self::COMPONENT_GROUP_1_NAME) - ->see(self::COMPONENT_GROUP_2_NAME); - } - - /** - * Set up the needed data for the components groups tests. - * - * @return TestCase - */ - protected function setupPublicAndNonPublicComponentGroups() - { - $this->createAComponentGroupAndAddAComponent(self::COMPONENT_GROUP_1_NAME, ComponentGroup::VISIBLE_GUEST) - ->createAComponentGroupAndAddAComponent(self::COMPONENT_GROUP_2_NAME, ComponentGroup::VISIBLE_AUTHENTICATED); - - factory(Setting::class)->create(); - - return $this; - } - - /** - * Create a component group and add one component to it. - * - * @param string $name - * @param string $visible - * - * @return TestCase - */ - protected function createAComponentGroupAndAddAComponent($name, $visible) - { - factory(ComponentGroup::class) - ->create(['name' => $name, 'visible' => $visible]) - ->components() - ->save(factory(Component::class)->create()); - - return $this; - } -} diff --git a/tests/Http/Controllers/StatusPageControllerTest.php b/tests/Http/Controllers/StatusPageControllerTest.php deleted file mode 100644 index 9c36494a2ed3..000000000000 --- a/tests/Http/Controllers/StatusPageControllerTest.php +++ /dev/null @@ -1,89 +0,0 @@ -setupPublicAndNonPublicComponentGroups() - ->setupConfig(); - } - - public function testIndexShowsOnlyPublicComponentGroupsToGues() - { - $this->visit('/') - ->see(self::COMPONENT_GROUP_1_NAME) - ->dontSee(self::COMPONENT_GROUP_2_NAME); - } - - public function testIndexShowsAllComponentGroupsToLoggedInUsers() - { - $this->signIn(); - - $this->visit('/') - ->see(self::COMPONENT_GROUP_1_NAME) - ->see(self::COMPONENT_GROUP_2_NAME); - } - - /** - * Set up the needed data for the components groups tests. - * - * @return AbstractTestCase - */ - protected function setupPublicAndNonPublicComponentGroups() - { - $this->createAComponentGroupAndAddAComponent(self::COMPONENT_GROUP_1_NAME, ComponentGroup::VISIBLE_GUEST) - ->createAComponentGroupAndAddAComponent(self::COMPONENT_GROUP_2_NAME, ComponentGroup::VISIBLE_AUTHENTICATED); - - factory(Setting::class)->create(); - - return $this; - } - - /** - * Create a component group and add one component to it. - * - * @param string $name - * @param string $visible - * - * @return AbstractTestCase - */ - protected function createAComponentGroupAndAddAComponent($name, $visible) - { - factory(ComponentGroup::class) - ->create(['name' => $name, 'visible' => $visible]) - ->components() - ->save(factory(Component::class)->create()); - - return $this; - } -} diff --git a/tests/Models/ActionTest.php b/tests/Models/ActionTest.php new file mode 100644 index 000000000000..cda704ab24d9 --- /dev/null +++ b/tests/Models/ActionTest.php @@ -0,0 +1,31 @@ + + */ +class ActionTest extends AbstractTestCase +{ + use ValidationTrait; + + public function testValidation() + { + $this->checkRules(new Action()); + } +} diff --git a/tests/Models/IncidentComponentTest.php b/tests/Models/IncidentComponentTest.php new file mode 100644 index 000000000000..fd2816fdfc32 --- /dev/null +++ b/tests/Models/IncidentComponentTest.php @@ -0,0 +1,31 @@ + + */ +class IncidentComponentTest extends AbstractTestCase +{ + use ValidationTrait; + + public function testValidation() + { + $this->checkRules(new IncidentComponent()); + } +} diff --git a/tests/Models/InviteTest.php b/tests/Models/InviteTest.php index 7d590a6a6366..f270eeb438a9 100644 --- a/tests/Models/InviteTest.php +++ b/tests/Models/InviteTest.php @@ -23,6 +23,6 @@ class InviteTest extends AbstractTestCase { public function testValidation() { - $this->assertFalse(property_exists(new Invite(), 'rules')); + $this->assertClassNotHasAttribute('rules', Invite::class); } } diff --git a/tests/Models/MetaTest.php b/tests/Models/MetaTest.php new file mode 100644 index 000000000000..72bc47f440a2 --- /dev/null +++ b/tests/Models/MetaTest.php @@ -0,0 +1,31 @@ + + */ +class MetaTest extends AbstractTestCase +{ + use ValidationTrait; + + public function testValidation() + { + $this->checkRules(new Meta()); + } +} diff --git a/tests/Models/ModelExistenceTest.php b/tests/Models/ModelExistenceTest.php index ed9f42fc3fc7..3bfbb3bcfffa 100644 --- a/tests/Models/ModelExistenceTest.php +++ b/tests/Models/ModelExistenceTest.php @@ -12,12 +12,13 @@ namespace CachetHQ\Tests\Cachet\Models; use AltThree\TestBench\ExistenceTrait; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; /** * This is the model existence test class. * * @author Graham Campbell + * @author James Brooks */ class ModelExistenceTest extends TestCase { diff --git a/tests/Models/ScheduleComponentTest.php b/tests/Models/ScheduleComponentTest.php new file mode 100644 index 000000000000..020412af636c --- /dev/null +++ b/tests/Models/ScheduleComponentTest.php @@ -0,0 +1,31 @@ + + */ +class ScheduleComponentTest extends AbstractTestCase +{ + use ValidationTrait; + + public function testValidation() + { + $this->checkRules(new ScheduleComponent()); + } +} diff --git a/tests/Models/ScheduleTest.php b/tests/Models/ScheduleTest.php new file mode 100644 index 000000000000..cf679557ae87 --- /dev/null +++ b/tests/Models/ScheduleTest.php @@ -0,0 +1,31 @@ + + */ +class ScheduleTest extends AbstractTestCase +{ + use ValidationTrait; + + public function testValidation() + { + $this->checkRules(new Schedule()); + } +} diff --git a/tests/Models/SettingTest.php b/tests/Models/SettingTest.php index 5d88b3ac882e..bedeba55d758 100644 --- a/tests/Models/SettingTest.php +++ b/tests/Models/SettingTest.php @@ -23,6 +23,6 @@ class SettingTest extends AbstractTestCase { public function testValidation() { - $this->assertFalse(property_exists(new Setting(), 'rules')); + $this->assertClassNotHasAttribute('rules', Setting::class); } } diff --git a/tests/Models/TagTest.php b/tests/Models/TagTest.php index 2a07d52cc07b..f86a3697225e 100644 --- a/tests/Models/TagTest.php +++ b/tests/Models/TagTest.php @@ -23,6 +23,6 @@ class TagTest extends AbstractTestCase { public function testValidation() { - $this->assertFalse(property_exists(new Tag(), 'rules')); + $this->assertClassNotHasAttribute('rules', Tag::class); } } diff --git a/tests/Foundation/Providers/AppServiceProviderTest.php b/tests/Providers/AppServiceProviderTest.php similarity index 81% rename from tests/Foundation/Providers/AppServiceProviderTest.php rename to tests/Providers/AppServiceProviderTest.php index ed931ff88871..2abf9bdc4ada 100644 --- a/tests/Foundation/Providers/AppServiceProviderTest.php +++ b/tests/Providers/AppServiceProviderTest.php @@ -9,16 +9,17 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; -use CachetHQ\Cachet\Dates\DateFactory; +use CachetHQ\Cachet\Services\Dates\DateFactory; use CachetHQ\Tests\Cachet\AbstractTestCase; /** * This is the app service provider test class. * * @author Graham Campbell + * @author James Brooks */ class AppServiceProviderTest extends AbstractTestCase { diff --git a/tests/Foundation/Providers/ComposerServiceProviderTest.php b/tests/Providers/ComposerServiceProviderTest.php similarity index 90% rename from tests/Foundation/Providers/ComposerServiceProviderTest.php rename to tests/Providers/ComposerServiceProviderTest.php index 8e4d11cf4b42..aca05ee1f786 100644 --- a/tests/Foundation/Providers/ComposerServiceProviderTest.php +++ b/tests/Providers/ComposerServiceProviderTest.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; use CachetHQ\Tests\Cachet\AbstractTestCase; diff --git a/tests/Foundation/Providers/ConfigServiceProviderTest.php b/tests/Providers/ConfigServiceProviderTest.php similarity index 93% rename from tests/Foundation/Providers/ConfigServiceProviderTest.php rename to tests/Providers/ConfigServiceProviderTest.php index 45345d50e78b..cd7293959efc 100644 --- a/tests/Foundation/Providers/ConfigServiceProviderTest.php +++ b/tests/Providers/ConfigServiceProviderTest.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; use CachetHQ\Cachet\Settings\Cache; diff --git a/tests/Foundation/Providers/ConsoleServiceProviderTest.php b/tests/Providers/ConsoleServiceProviderTest.php similarity index 90% rename from tests/Foundation/Providers/ConsoleServiceProviderTest.php rename to tests/Providers/ConsoleServiceProviderTest.php index 0050c8a4b8fb..6df555d1a6c6 100644 --- a/tests/Foundation/Providers/ConsoleServiceProviderTest.php +++ b/tests/Providers/ConsoleServiceProviderTest.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; use CachetHQ\Tests\Cachet\AbstractTestCase; diff --git a/tests/Providers/EventServiceProviderTest.php b/tests/Providers/EventServiceProviderTest.php new file mode 100644 index 000000000000..e4f2005dceda --- /dev/null +++ b/tests/Providers/EventServiceProviderTest.php @@ -0,0 +1,41 @@ + + * @author James Brooks + */ +class EventServiceProviderTest extends AbstractTestCase +{ + use EventServiceProviderTrait; + + public function testIsAnEventServiceProvider() + { + $class = $this->getServiceProviderClass($this->app); + + $reflection = new ReflectionClass($class); + + $provider = new ReflectionClass(ServiceProvider::class); + + $msg = "Expected class '$class' to be a service provider."; + + $this->assertTrue($reflection->isSubclassOf($provider), $msg); + } +} diff --git a/tests/Foundation/Providers/IntegrationServiceProviderTest.php b/tests/Providers/IntegrationServiceProviderTest.php similarity index 96% rename from tests/Foundation/Providers/IntegrationServiceProviderTest.php rename to tests/Providers/IntegrationServiceProviderTest.php index d3d5f95a2993..a6177f64424b 100644 --- a/tests/Foundation/Providers/IntegrationServiceProviderTest.php +++ b/tests/Providers/IntegrationServiceProviderTest.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; use CachetHQ\Cachet\Integrations\Contracts\Beacon; diff --git a/tests/Foundation/Providers/RepositoryServiceProviderTest.php b/tests/Providers/RepositoryServiceProviderTest.php similarity index 92% rename from tests/Foundation/Providers/RepositoryServiceProviderTest.php rename to tests/Providers/RepositoryServiceProviderTest.php index 585a7ab7dd8a..feb4f6f7077e 100644 --- a/tests/Foundation/Providers/RepositoryServiceProviderTest.php +++ b/tests/Providers/RepositoryServiceProviderTest.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace CachetHQ\Tests\Cachet\Foundation\Providers; +namespace CachetHQ\Tests\Cachet\Providers; use AltThree\TestBench\ServiceProviderTrait; use CachetHQ\Cachet\Repositories\Metric\MetricRepository; diff --git a/tests/Providers/RouteServiceProviderTest.php b/tests/Providers/RouteServiceProviderTest.php new file mode 100644 index 000000000000..1a6e4aa0631c --- /dev/null +++ b/tests/Providers/RouteServiceProviderTest.php @@ -0,0 +1,217 @@ + + */ +class RouteServiceProviderTest extends AbstractTestCase +{ + use ServiceProviderTrait; + + /** + * The login routes should always be available regardless of the always authenticate setting. + */ + public function testWhenAlwaysAuthenticateIsEnabledLoginRoutesAreWhiteListed() + { + $loginRoutes = [ + 'core::get:auth.login', + 'core::post:auth.login', + 'core::post:auth.two-factor', + 'core::get:auth.logout', + 'core::get:signup.invite', + 'core::post:signup.invite', + ]; + + $this->assertRoutesDontHaveAuthMiddleware($loginRoutes, $this->bootRouter(true)); + } + + /** + * The setup routes should always be available regardless of the always authenticate setting. + */ + public function testWhenAlwaysAuthenticateIsEnabledSetupRoutesAreWhiteListed() + { + $loginRoutes = [ + 'core::get:setup', + 'core::post:setup.step1', + 'core::post:setup.step2', + 'core::post:setup.step3', + ]; + + $this->assertRoutesDontHaveAuthMiddleware($loginRoutes, $this->bootRouter(true)); + } + + /** + * It's possible to retrieve the cachet version, status and ping endpoints regardless of the + * always authenticate setting. + */ + public function testWhenAlwaysAuthenticateIsEnabledApiSystemRoutesAreWhiteListed() + { + $routeActions = [ + 'CachetHQ\Cachet\Http\Controllers\Api\GeneralController@ping', + 'CachetHQ\Cachet\Http\Controllers\Api\GeneralController@version', + 'CachetHQ\Cachet\Http\Controllers\Api\GeneralController@status', + ]; + + $router = $this->bootRouter(true); + + foreach ($routeActions as $routeAction) { + $route = $router->getRoutes()->getByAction($routeAction); + $this->assertInstanceOf(Route::class, $route); + + $middleware = $route->gatherMiddleware(); + $this->assertFalse(in_array('auth.api:true', $middleware, true)); + } + } + + /** + * When using always authenticate, normal graceful api routes will require full authentication. + */ + public function testWhenAlwaysAuthenticateIsEnabledApiRoutesAreHardAuthenticated() + { + $routeActions = [ + 'CachetHQ\Cachet\Http\Controllers\Api\ComponentController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\ComponentGroupController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\ComponentGroupController@show', + 'CachetHQ\Cachet\Http\Controllers\Api\ComponentController@show', + 'CachetHQ\Cachet\Http\Controllers\Api\IncidentController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\IncidentController@show', + 'CachetHQ\Cachet\Http\Controllers\Api\IncidentUpdateController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\IncidentUpdateController@show', + 'CachetHQ\Cachet\Http\Controllers\Api\MetricController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\MetricController@show', + 'CachetHQ\Cachet\Http\Controllers\Api\MetricPointController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\ScheduleController@index', + 'CachetHQ\Cachet\Http\Controllers\Api\ScheduleController@show', + ]; + + $router = $this->bootRouter(true); + + foreach ($routeActions as $routeAction) { + $route = $router->getRoutes()->getByAction($routeAction); + $this->assertInstanceOf(Route::class, $route); + + $middleware = $route->gatherMiddleware(); + $this->assertTrue(in_array('auth.api:true', $middleware, true)); + } + } + + /** + * When enabling the always authenticate setting, the core frontpage routes require authentication. + */ + public function testWhenAlwaysAuthenticateIsEnabledAllNormalRoutesAreAuthenticated() + { + $namedRoutes = [ + 'core::get:status-page', + 'core::get:incident', + 'core::get:schedule', + 'core::get:metric', + 'core::get:component_shield', + 'core::get:subscribe', + 'core::post:subscribe', + 'core::get:subscribe.manage', + 'core::post:subscribe.manage', + 'core::get:subscribe.verify', + 'core::get:subscribe.unsubscribe', + ]; + + $this->assertRoutesHaveAuthMiddleware($namedRoutes, $this->bootRouter(true)); + } + + /** + * This test asserts that when always authenticate is disabled, you are allowed to visit the frontpage + * routes without enforced authentication. + */ + public function testWhenAlwaysAuthenticateIsDisabledAllNormalRoutesAreUnauthenticated() + { + $namedRoutes = [ + 'core::get:status-page', + 'core::get:incident', + 'core::get:schedule', + 'core::get:metric', + 'core::get:component_shield', + 'core::get:subscribe', + 'core::post:subscribe', + 'core::get:subscribe.manage', + 'core::post:subscribe.manage', + 'core::get:subscribe.verify', + 'core::get:subscribe.unsubscribe', + ]; + + $this->assertRoutesDontHaveAuthMiddleware($namedRoutes, $this->bootRouter(false)); + } + + /** + * A helper method that will execute the RouteProvider's map function and return a clean router. + * + * @param bool $alwaysAuthenticate + * + * @return Router + */ + private function bootRouter($alwaysAuthenticate) + { + $this->app->config->set('setting.always_authenticate', $alwaysAuthenticate); + $router = $this->app->make(Router::class); + $router->setRoutes(new RouteCollection()); + + $routeServiceProvider = new RouteServiceProvider($this->app); + $routeServiceProvider->map($router); + + return $router; + } + + /** + * Assertion helper that asserts if the authentication middleware has not been injected onto + * the collection of named routes. + * + * @param array $routeNames + * @param Router $router + */ + private function assertRoutesDontHaveAuthMiddleware(array $routeNames, Router $router) + { + foreach ($routeNames as $routeName) { + $route = $router->getRoutes()->getByName($routeName); + $this->assertInstanceOf(Route::class, $route); + + $middleware = $route->gatherMiddleware(); + $this->assertFalse(in_array(Authenticate::class, $middleware, true)); + } + } + + /** + * Assertion helper that asserts if the authentication middleware has been injected onto + * the collection of named routes. + * + * @param array $routeNames + * @param Router $router + */ + private function assertRoutesHaveAuthMiddleware(array $routeNames, Router $router) + { + foreach ($routeNames as $routeName) { + $route = $router->getRoutes()->getByName($routeName); + $this->assertInstanceOf(Route::class, $route); + + $middleware = $route->gatherMiddleware(); + $this->assertTrue(in_array(Authenticate::class, $middleware, true)); + } + } +} diff --git a/tests/Services/Modules/ManagerTest.php b/tests/Services/Modules/ManagerTest.php deleted file mode 100644 index d5b661996de5..000000000000 --- a/tests/Services/Modules/ManagerTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - */ -class ManagerTest extends AbstractTestCase -{ - public function testGroupNoModules() - { - $manager = m::mock('CachetHQ\Cachet\Services\Modules\Manager[groupModules]'); - $manager->shouldReceive('groupModules')->once()->passthru(); - - $grouped = $manager->groupModules([]); - - $this->assertSame([], $grouped); - } - - public function testGroupModulesNoGroups() - { - $manager = m::mock('CachetHQ\Cachet\Services\Modules\Manager[groupModules]'); - $manager->shouldReceive('groupModules')->once()->passthru(); - - $grouped = $manager->groupModules($this->getModules(), []); - - $this->assertSame($this->getGroupedModules(), $grouped); - } - - public function testGroupModules() - { - $manager = m::mock('CachetHQ\Cachet\Services\Modules\Manager[groupModules]'); - $manager->shouldReceive('groupModules')->once()->passthru(); - - $grouped = $manager->groupModules($this->getModules(), $this->getModuleGroups()); - - $this->assertSame($this->getGroupedModulesWithOrders(), $grouped); - } - - public function testOrderModules() - { - $manager = m::mock('CachetHQ\Cachet\Services\Modules\Manager[orderModules]'); - $manager->shouldReceive('orderModules')->once()->passthru(); - - $ordered = $manager->orderModules($this->getGroupedModules()); - - $this->assertSame($this->getOrderedModules(), $ordered); - } - - public function testOrderModulesWithOrders() - { - $manager = m::mock('CachetHQ\Cachet\Services\Modules\Manager[orderModules]'); - $manager->shouldReceive('orderModules')->once()->passthru(); - - $ordered = $manager->orderModules($this->getGroupedModulesWithOrders()); - - $this->assertSame($this->getOrderedModulesWithOrders(), $ordered); - } - - protected function getModules() - { - return [ - ['group' => 'two', 'partial' => 'partials.two.a'], - ['partial' => 'partials.a', 'order' => 8], - ['group' => 'one', 'partial' => 'partials.one.c'], - ['partial' => 'partials.c'], - ['group' => 'one', 'partial' => 'partials.one.a', 'order' => 1], - ['group' => 'one', 'partial' => 'partials.one.b', 'order' => 2], - ['partial' => 'partials.b', 'order' => 15], - ]; - } - - protected function getModuleGroups() - { - return [ - 'one' => 1, - 'two' => 2, - ]; - } - - protected function getGroupedModules() - { - return [ - 'two' => [ - ['group' => 'two', 'partial' => 'partials.two.a'], - ], - [['partial' => 'partials.a', 'order' => 8], 'order' => 8], - 'one' => [ - ['group' => 'one', 'partial' => 'partials.one.c'], - ['group' => 'one', 'partial' => 'partials.one.a', 'order' => 1], - ['group' => 'one', 'partial' => 'partials.one.b', 'order' => 2], - ], - [['partial' => 'partials.c'], 'order' => PHP_INT_MAX - 4], - [['partial' => 'partials.b', 'order' => 15], 'order' => 15], - ]; - } - - protected function getGroupedModulesWithOrders() - { - return [ - 'two' => [ - ['group' => 'two', 'partial' => 'partials.two.a'], - 'order' => 2, - ], - [['partial' => 'partials.a', 'order' => 8], 'order' => 8], - 'one' => [ - ['group' => 'one', 'partial' => 'partials.one.c'], - ['group' => 'one', 'partial' => 'partials.one.a', 'order' => 1], - ['group' => 'one', 'partial' => 'partials.one.b', 'order' => 2], - 'order' => 1, - ], - [['partial' => 'partials.c'], 'order' => PHP_INT_MAX - 4], - [['partial' => 'partials.b', 'order' => 15], 'order' => 15], - ]; - } - - protected function getOrderedModules() - { - return [ - [['partial' => 'partials.a', 'order' => 8], 'order' => 8], - 2 => [['partial' => 'partials.b', 'order' => 15], 'order' => 15], - 1 => [['partial' => 'partials.c'], 'order' => PHP_INT_MAX - 4], - 'two' => [ - ['group' => 'two', 'partial' => 'partials.two.a'], - ], - 'one' => [ - 1 => ['group' => 'one', 'partial' => 'partials.one.a', 'order' => 1], - 2 => ['group' => 'one', 'partial' => 'partials.one.b', 'order' => 2], - 0 => ['group' => 'one', 'partial' => 'partials.one.c'], - ], - ]; - } - - protected function getOrderedModulesWithOrders() - { - return [ - 'one' => [ - 1 => ['group' => 'one', 'partial' => 'partials.one.a', 'order' => 1], - 2 => ['group' => 'one', 'partial' => 'partials.one.b', 'order' => 2], - 0 => ['group' => 'one', 'partial' => 'partials.one.c'], - 'order' => 1, - ], - 'two' => [ - ['group' => 'two', 'partial' => 'partials.two.a'], - 'order' => 2, - ], - [['partial' => 'partials.a', 'order' => 8], 'order' => 8], - 2 => [['partial' => 'partials.b', 'order' => 15], 'order' => 15], - 1 => [['partial' => 'partials.c'], 'order' => PHP_INT_MAX - 4], - ]; - } -} diff --git a/tests/Services/Modules/RendererTest.php b/tests/Services/Modules/RendererTest.php deleted file mode 100644 index 46ca1dac6b05..000000000000 --- a/tests/Services/Modules/RendererTest.php +++ /dev/null @@ -1,143 +0,0 @@ - - */ -class RendererTest extends AbstractTestCase -{ - public function testRenderNoModules() - { - $renderer = m::mock('CachetHQ\Cachet\Services\Modules\Renderer[renderModules]'); - $renderer->shouldReceive('renderModules')->once()->passthru(); - - $output = $renderer->renderModules( - $this->getFactory(), - [], - [], - null - ); - - $this->assertSame('', $output); - } - - public function testRenderNonExistentModulesGroup() - { - $renderer = m::mock('CachetHQ\Cachet\Services\Modules\Renderer[renderModules]'); - $renderer->shouldReceive('renderModules')->once()->passthru(); - - $output = $renderer->renderModules( - $this->getFactory(), - [], - $this->getModules(), - 'non-existent group' - ); - - $this->assertSame('', $output); - } - - public function testRenderModules() - { - $renderer = m::mock('CachetHQ\Cachet\Services\Modules\Renderer[renderModules]'); - $renderer->shouldReceive('renderModules')->once()->passthru(); - - $factory = $this->getFactory([ - 'partial.a', 'partial.b', 'partial.c', - 'partial.one.a', 'partial.one.b', 'partial.one.c', - 'partial.two.a', - 'partial.three.a', 'partial.three.b', - ]); - - $output = $renderer->renderModules( - $factory, - ['a' => 'b', 'c' => 'd'], - $this->getModules(), - null - ); - - $this->assertSame('partial.apartial.one.apartial.one.bpartial.one.cpartial.two.apartial.bpartial.cpartial.three.apartial.three.b', $output); - } - - public function testRenderModuleGroups() - { - $renderer = m::mock('CachetHQ\Cachet\Services\Modules\Renderer[renderModules]'); - $renderer->shouldReceive('renderModules')->once()->passthru(); - - $factory = $this->getFactory([ - 'partial.one.a', 'partial.one.b', 'partial.one.c', - ]); - - $output = $renderer->renderModules( - $factory, - ['a' => 'b', 'c' => 'd'], - $this->getModules(), - 'one' - ); - - $this->assertSame('partial.one.apartial.one.bpartial.one.c', $output); - } - - protected function getModules() - { - return [ - 'two' => [ - 'order' => 3, - ['partial' => 'partial.two.a'], - ], - [ - ['partial' => 'partial.c'], - ['partial' => 'partial.b', 'order' => 1], - ], - [ - 'order' => 1, - ['partial' => 'partial.a'], - ], - 'one' => [ - 'order' => 2, - ['partial' => 'partial.one.c'], - ['partial' => 'partial.one.a', 'order' => 1], - ['partial' => 'partial.one.b', 'order' => 2], - ], - 'three' => [ - ['partial' => 'partial.three.a'], - ['partial' => 'partial.three.b'], - ], - ]; - } - - protected function getFactory($views = []) - { - $factory = m::mock('Illuminate\View\Factory[make]', $this->getFactoryArgs()); - - foreach ($views as $view) { - $factory->shouldReceive('make')->once()->with($view, ['a' => 'b', 'c' => 'd'])->andReturn($mockView = m::mock('StdClass')); - $mockView->shouldReceive('render')->once()->andReturn($view); - } - - return $factory; - } - - protected function getFactoryArgs() - { - return [ - m::mock('Illuminate\View\Engines\EngineResolver'), - m::mock('Illuminate\View\ViewFinderInterface'), - m::mock('Illuminate\Contracts\Events\Dispatcher'), - ]; - } -} diff --git a/tests/SmokeTest.php b/tests/SmokeTest.php new file mode 100644 index 000000000000..d3f91bdd3004 --- /dev/null +++ b/tests/SmokeTest.php @@ -0,0 +1,67 @@ + + */ +class SmokeTest extends AbstractTestCase +{ + use DatabaseMigrations; + + public function test_setup_page() + { + $this->get('/setup')->assertStatus(200); + } + + public function test_status_page() + { + $this->configureApp(); + + $this->get('/')->assertStatus(200); + } + + public function test_single_component_page() + { + $this->configureApp(); + + $this->get('/incidents/1')->assertStatus(200); + } + + public function test_dashboard_auth_page() + { + $this->configureApp(); + + $this->get('/auth/login')->assertStatus(200); + } + + protected function configureApp() + { + factory(Setting::class)->create([ + 'name' => 'app_name', + 'value' => 'Cachet Test Suite', + ]); + + $component = factory(Component::class)->create(); + + $incident = factory(Incident::class)->create([ + 'component_id' => $component->id, + ]); + } +} diff --git a/tests/TestListener.php b/tests/TestListener.php index b92cfb5b9538..170a774631c2 100644 --- a/tests/TestListener.php +++ b/tests/TestListener.php @@ -11,24 +11,79 @@ namespace CachetHQ\Tests\Cachet; -use PHPUnit_Framework_BaseTestListener; -use PHPUnit_Framework_TestSuite; +use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener as PHPUnitTestListener; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Framework\Warning; /** * This is the test listener class. * * @author Connor S. Parks */ -class TestListener extends PHPUnit_Framework_BaseTestListener +class TestListener implements PHPUnitTestListener { + /** + * An error occurred. + */ + public function addError(Test $test, \Throwable $t, float $time): void + { + // + } + + /** + * A warning occurred. + */ + public function addWarning(Test $test, Warning $e, float $time): void + { + // + } + + /** + * A failure occurred. + */ + public function addFailure(Test $test, AssertionFailedError $e, float $time): void + { + // + } + + /** + * Incomplete test. + */ + public function addIncompleteTest(Test $test, \Throwable $t, float $time): void + { + // + } + + /** + * Risky test. + */ + public function addRiskyTest(Test $test, \Throwable $t, float $time): void + { + // + } + + /** + * Skipped test. + */ + public function addSkippedTest(Test $test, \Throwable $t, float $time): void + { + // + } + + /** + * A test suite started. + */ + public function startTestSuite(TestSuite $suite): void + { + // + } + /** * A test suite ended. - * - * @param \PHPUnit_Framework_TestSuite $suite - * - * @return void */ - public function endTestSuite(PHPUnit_Framework_TestSuite $suite) + public function endTestSuite(TestSuite $suite): void { if ($suite->getName() !== 'Cachet Test Suite') { return; @@ -38,4 +93,20 @@ public function endTestSuite(PHPUnit_Framework_TestSuite $suite) unlink($file); } } + + /** + * A test started. + */ + public function startTest(Test $test): void + { + // + } + + /** + * A test ended. + */ + public function endTest(Test $test, float $time): void + { + // + } } diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 000000000000..fa86816070d1 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,45 @@ +let mix = require('laravel-mix'); + +require('laravel-mix-purgecss') + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix + .copyDirectory('node_modules/ionicons/fonts', 'public/fonts') + .sass('resources/assets/sass/dashboard.scss', 'public/dist/css/dashboard') + .sass('resources/assets/sass/app.scss', 'public/dist/css') + .purgeCss() + .options({ + processCssUrls: false + }) + .js('resources/assets/js/app.js', 'public/dist/js').extract(['vue', 'chart.js']) + .scripts([ + 'public/dist/js/app.js', + 'node_modules/es5-shim/es5-shim.js', + 'node_modules/es5-shim/es5-sham.js', + 'node_modules/jquery/dist/jquery.min.js', + 'node_modules/bootstrap-sass/assets/javascripts/bootstrap.min.js', + 'node_modules/moment/min/moment-with-locales.min.js', + 'node_modules/lodash/lodash.min.js', + 'node_modules/messenger/build/js/messenger.min.js', + 'node_modules/sortablejs/Sortable.min.js', + 'node_modules/jquery-minicolors/jquery.minicolors.min.js', + 'node_modules/jquery-sparkline/jquery.sparkline.min.js', + 'node_modules/sweetalert2/dist/sweetalert2.min.js', + 'node_modules/livestamp/livestamp.js', + 'node_modules/jquery-serializeobject/jquery.serializeObject.js', + 'resources/assets/js/cachet.js', + ], 'public/dist/js/all.js') + +if (mix.inProduction()) { + mix.version(); +} diff --git a/yarn.lock b/yarn.lock index ac44aa035f2d..b4de19ffa133 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,2937 +1,7880 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accord@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/accord/-/accord-0.23.0.tgz#2468c78e56412dba9311d383fb873450d2867caf" - dependencies: - convert-source-map "1.x" - fobject "0.0.4" - glob "7.0.3" - indx "0.2.x" - lodash "4.11.2" - resolve "1.x" - semver "^5.1.0" - uglify-js "^2.6.0" - when "3.x" - -acorn@4.X: - version "4.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.0" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33" - -"animate-sass@git+https://github.com/tgdev/animate-sass.git": - version "0.6.6" - resolved "git+https://github.com/tgdev/animate-sass.git#13132d8cf9b0258728d40c3509218dce57f93114" - -ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - -aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -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" - -array-index@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" - dependencies: - debug "^2.2.0" - es6-symbol "^3.0.2" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1, array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -async-done@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.2.2.tgz#ba4280da55a16e15f4bb8bf3a844a91878740e31" - dependencies: - end-of-stream "^1.1.0" - next-tick "^1.0.0" - once "^1.3.2" - stream-exhaust "^1.0.1" - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" - -autoprefixer@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.1.tgz#ae759a5221e709f3da17c2d656230e67c43cbb75" - dependencies: - browserslist "~1.4.0" - caniuse-db "^1.0.30000554" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.4" - postcss-value-parser "^3.2.3" - -autosize@^3.0.15: - version "3.0.17" - resolved "https://registry.yarnpkg.com/autosize/-/autosize-3.0.17.tgz#f5a2cd35b96d864634cffc600c8c628c658d805b" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" - dependencies: - tweetnacl "^0.14.3" - -beeper@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.0.tgz#9ee6fc1ce7f54feaace7ce73588b056037866a2c" - -bl@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.7.0.tgz#3fb0670602ac2878eb770dc2039f1836be62ae5b" - dependencies: - readable-stream "~1.0.2" - -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -bootstrap-sass@^3.3.6: - version "3.3.7" - resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498" - -bootstrap@^3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -browserslist@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.4.0.tgz#9cfdcf5384d9158f5b70da2aa00b30e8ff019049" - dependencies: - caniuse-db "^1.0.30000539" - -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000554: - version "1.0.30000559" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000559.tgz#afbd68916dd23bfd549c26520c78631fb5e2e393" - -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@*, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - 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" - -chart.js@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.3.0.tgz#40460e48e2c417c05fc3325cd84f7b000dc7d7d6" - dependencies: - chartjs-color "^2.0.0" - moment "^2.10.6" - -chartjs-color-string@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.4.0.tgz#57748d4530ae28d8db0a5492182ba06dfdf2f468" - dependencies: - color-name "^1.0.0" - -chartjs-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.0.0.tgz#7f60c7256589b24914814ece757659117381e35b" - dependencies: - chartjs-color-string "^0.4.0" - color-convert "^0.5.3" - -clean-css@^3.4.12: - version "3.4.20" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.20.tgz#c0d8963b5448e030f0bcd3ddd0dac4dfe3dea501" - dependencies: - commander "2.8.x" - source-map "0.4.x" - -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - -cli-usage@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" - dependencies: - marked "^0.3.6" - marked-terminal "^1.6.2" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^1.0.0, clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" - -code-point-at@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb" - dependencies: - number-is-nan "^1.0.0" - -color-convert@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" -color-name@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +"@ampproject/remapping@^2.2.0": + "integrity" "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.22.13": + "integrity" "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + "version" "7.22.13" + dependencies: + "@babel/highlight" "^7.22.13" + "chalk" "^2.4.2" + +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": + "integrity" "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz" + "version" "7.23.2" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.0.0-beta.49", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.2.0", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": + "integrity" "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.2" + "@babel/types" "^7.23.0" + "convert-source-map" "^2.0.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.3" + "semver" "^6.3.1" + +"@babel/generator@^7.23.0": + "integrity" "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + "jsesc" "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + "integrity" "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + "integrity" "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + "integrity" "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + "browserslist" "^4.21.9" + "lru-cache" "^5.1.1" + "semver" "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": + "integrity" "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "semver" "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + "integrity" "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "regexpu-core" "^5.3.1" + "semver" "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.3": + "integrity" "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + "integrity" "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + "version" "7.22.20" + +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + "integrity" "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15": + "integrity" "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + "integrity" "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": + "integrity" "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + "integrity" "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + "integrity" "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + "version" "7.22.5" + +"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": + "integrity" "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + "integrity" "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + "integrity" "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + "integrity" "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + "integrity" "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + "version" "7.22.6" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + "integrity" "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" + "version" "7.22.5" + +"@babel/helper-validator-identifier@^7.22.20": + "integrity" "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + "version" "7.22.20" + +"@babel/helper-validator-option@^7.22.15": + "integrity" "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" + "version" "7.22.15" + +"@babel/helper-wrap-function@^7.22.20": + "integrity" "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.2": + "integrity" "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz" + "version" "7.23.2" dependencies: - delayed-stream "~1.0.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.2" + "@babel/types" "^7.23.0" + +"@babel/highlight@^7.22.13": + "integrity" "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + "chalk" "^2.4.2" + "js-tokens" "^4.0.0" -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" +"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + "integrity" "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + "version" "7.23.0" -commander@2.8.x: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + "integrity" "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz" + "version" "7.22.15" dependencies: - graceful-readlink ">= 1.0.0" + "@babel/helper-plugin-utils" "^7.22.5" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-with-sourcemaps@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + "integrity" "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz" + "version" "7.22.15" dependencies: - source-map "^0.5.1" - -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" - -convert-source-map@1.x, convert-source-map@1.X: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" -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" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" +"@babel/plugin-proposal-object-rest-spread@^7.2.0": + "integrity" "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + "version" "7.20.7" dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + "integrity" "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + "version" "7.21.0-placeholder-for-preset-env.2" -css@2.X: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" +"@babel/plugin-syntax-async-generators@^7.8.4": + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: - inherits "^2.0.1" - source-map "^0.1.38" - source-map-resolve "^0.3.0" - urix "^0.1.0" + "@babel/helper-plugin-utils" "^7.8.0" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" +"@babel/plugin-syntax-class-properties@^7.12.13": + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: - array-find-index "^1.0.1" + "@babel/helper-plugin-utils" "^7.12.13" -d@^0.1.1, d@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" +"@babel/plugin-syntax-class-static-block@^7.14.5": + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: - es5-ext "~0.10.2" + "@babel/helper-plugin-utils" "^7.14.5" -dashdash@^1.12.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + "version" "7.8.3" dependencies: - assert-plus "^1.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -dateformat@^1.0.11: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + "version" "7.8.3" dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - -deap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/deap/-/deap-1.0.0.tgz#b148bf82430a27699b7483a03eb6b67585bfc888" + "@babel/helper-plugin-utils" "^7.8.3" -debug-fabulous@0.0.X: - version "0.0.4" - resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.0.4.tgz#fa071c5d87484685424807421ca4b16b0b1a0763" +"@babel/plugin-syntax-import-assertions@^7.22.5": + "integrity" "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz" + "version" "7.22.5" dependencies: - debug "2.X" - lazy-debug-legacy "0.0.X" - object-assign "4.1.0" + "@babel/helper-plugin-utils" "^7.22.5" -debug@^2.2.0, debug@2.X: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +"@babel/plugin-syntax-import-attributes@^7.22.5": + "integrity" "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz" + "version" "7.22.5" dependencies: - ms "0.7.1" + "@babel/helper-plugin-utils" "^7.22.5" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -defaults@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" +"@babel/plugin-syntax-import-meta@^7.10.4": + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: - clone "^1.0.2" + "@babel/helper-plugin-utils" "^7.10.4" -del@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" +"@babel/plugin-syntax-json-strings@^7.8.3": + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + "@babel/helper-plugin-utils" "^7.8.0" -deprecated@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" - -detect-file@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: - fs-exists-sync "^0.1.0" - -detect-newline@2.X: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + "@babel/helper-plugin-utils" "^7.10.4" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: - readable-stream "~1.1.9" + "@babel/helper-plugin-utils" "^7.8.0" -duplexify@^3.4.2: - version "3.4.6" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.4.6.tgz#1e586a13028caf31d5144a059813f9b071fec557" +"@babel/plugin-syntax-numeric-separator@^7.10.4": + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: - end-of-stream "1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: - jsbn "~0.1.0" + "@babel/helper-plugin-utils" "^7.8.0" -end-of-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: - once "~1.3.0" + "@babel/helper-plugin-utils" "^7.8.0" -end-of-stream@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" +"@babel/plugin-syntax-optional-chaining@^7.8.3": + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: - once "~1.3.0" + "@babel/helper-plugin-utils" "^7.8.0" -end-of-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: - once "~1.3.0" + "@babel/helper-plugin-utils" "^7.14.5" -eonasdan-bootstrap-datetimepicker@~4.17: - version "4.17.42" - resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.42.tgz#6d3c6c1b851a1efabaf5e244f9a3cbadbcc2c0f0" +"@babel/plugin-syntax-top-level-await@^7.14.5": + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: - bootstrap "^3.3" - jquery "^1.8.3 || ^2.0" - moment "^2.10" - moment-timezone "^0.4.0" + "@babel/helper-plugin-utils" "^7.14.5" -errno@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + "integrity" "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: - prr "~0.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" +"@babel/plugin-transform-arrow-functions@^7.22.5": + "integrity" "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz" + "version" "7.22.5" dependencies: - is-arrayish "^0.2.1" + "@babel/helper-plugin-utils" "^7.22.5" -es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.2: - version "0.10.12" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" +"@babel/plugin-transform-async-generator-functions@^7.23.2": + "integrity" "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz" + "version" "7.23.2" dependencies: - es6-iterator "2" - es6-symbol "~3.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" -es6-iterator@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" +"@babel/plugin-transform-async-to-generator@^7.22.5": + "integrity" "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz" + "version" "7.22.5" dependencies: - d "^0.1.1" - es5-ext "^0.10.7" - es6-symbol "3" - -es6-promise@latest: - version "4.0.5" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + "integrity" "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz" + "version" "7.22.5" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" + "@babel/helper-plugin-utils" "^7.22.5" -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -esprima@~2.7.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" +"@babel/plugin-transform-block-scoping@^7.23.0": + "integrity" "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz" + "version" "7.23.0" dependencies: - is-posix-bracket "^0.1.0" + "@babel/helper-plugin-utils" "^7.22.5" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" +"@babel/plugin-transform-class-properties@^7.22.5": + "integrity" "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz" + "version" "7.22.5" dependencies: - fill-range "^2.1.0" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -expand-tilde@^1.2.1, expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" +"@babel/plugin-transform-class-static-block@^7.22.11": + "integrity" "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz" + "version" "7.22.11" dependencies: - os-homedir "^1.0.1" - -extend@^3.0.0, extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" +"@babel/plugin-transform-classes@^7.22.15": + "integrity" "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz" + "version" "7.22.15" dependencies: - is-extglob "^1.0.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" + "globals" "^11.1.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -fancy-log@^1.0.0, fancy-log@^1.1.0, fancy-log@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.2.0.tgz#d5a51b53e9ab22ca07d558f2b67ae55fdb5fcbd8" +"@babel/plugin-transform-computed-properties@^7.22.5": + "integrity" "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz" + "version" "7.22.5" dependencies: - chalk "^1.1.1" - time-stamp "^1.0.0" - -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" +"@babel/plugin-transform-destructuring@^7.23.0": + "integrity" "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz" + "version" "7.23.0" dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -findup-sync@^0.4.0, findup-sync@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.22.5": + "integrity" "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.22.5": + "integrity" "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.22.11": + "integrity" "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + "integrity" "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.22.11": + "integrity" "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.22.15": + "integrity" "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz" + "version" "7.22.15" dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - -fined@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.22.5": + "integrity" "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz" + "version" "7.22.5" dependencies: - expand-tilde "^1.2.1" - lodash.assignwith "^4.0.7" - lodash.isempty "^4.2.1" - lodash.isplainobject "^4.0.4" - lodash.isstring "^4.0.1" - lodash.pick "^4.2.1" - parse-filepath "^1.0.1" - -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" - -flagged-respawn@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" - -fobject@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/fobject/-/fobject-0.0.4.tgz#8399e6b9105d2eb8e6df9dcc41123a171688adfe" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.22.11": + "integrity" "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.22.5": + "integrity" "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": + "integrity" "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.22.5": + "integrity" "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz" + "version" "7.22.5" dependencies: - graceful-fs "^4.1.3" - semver "^5.1.0" - when "^3.7.7" - -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + "@babel/helper-plugin-utils" "^7.22.5" -for-own@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" +"@babel/plugin-transform-modules-amd@^7.23.0": + "integrity" "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz" + "version" "7.23.0" dependencies: - for-in "^0.1.5" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -fork-stream@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70" - -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" +"@babel/plugin-transform-modules-commonjs@^7.23.0": + "integrity" "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz" + "version" "7.23.0" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +"@babel/plugin-transform-modules-systemjs@^7.23.0": + "integrity" "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz" + "version" "7.23.0" dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -gauge@~2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-color "^0.1.7" - 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@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" - dependencies: - globule "~0.1.0" - -gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" - dependencies: - assert-plus "^1.0.0" +"@babel/plugin-transform-modules-umd@^7.22.5": + "integrity" "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -github-markdown-css@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/github-markdown-css/-/github-markdown-css-2.4.1.tgz#b4736d84eea8367a03b3248cf546dda3e8dc55e3" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + "integrity" "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-stream@^3.1.5: - version "3.1.18" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" - dependencies: - glob "^4.3.1" - glob2base "^0.0.12" - minimatch "^2.0.1" - ordered-read-streams "^0.1.0" - through2 "^0.6.1" - unique-stream "^1.0.0" - -glob-watcher@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" - dependencies: - gaze "^0.5.1" - -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" +"@babel/plugin-transform-new-target@^7.22.5": + "integrity" "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -glob@~3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": + "integrity" "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.11": + "integrity" "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz" + "version" "7.22.11" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.15": + "integrity" "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.15" + +"@babel/plugin-transform-object-super@^7.22.5": + "integrity" "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.11": + "integrity" "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz" + "version" "7.22.11" dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - -glob@~7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": + "integrity" "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz" + "version" "7.23.0" dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15": + "integrity" "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + "integrity" "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -glob@7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.3.tgz#0aa235931a4a96ac13d60ffac2fb877bd6ed4f58" +"@babel/plugin-transform-private-property-in-object@^7.22.11": + "integrity" "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz" + "version" "7.22.11" dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - dependencies: - find-index "^0.1.1" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" +"@babel/plugin-transform-property-literals@^7.22.5": + "integrity" "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz" + "version" "7.22.5" dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-prefix@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.4.tgz#05158db1cde2dd491b455e290eb3ab8bfc45c6e1" - dependencies: - ini "^1.3.4" - is-windows "^0.2.0" - osenv "^0.1.3" - which "^1.2.10" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globule@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.0.0.tgz#f22aebaacce02be492453e979c3ae9b6983f1c6c" - dependencies: - glob "~7.0.3" - lodash "~4.9.0" - minimatch "~3.0.0" - -globule@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" - dependencies: - glob "~3.1.21" - lodash "~1.0.1" - minimatch "~0.2.11" - -glogg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" - dependencies: - sparkles "^1.0.0" - -graceful-fs@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@4.X: - version "4.1.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29" - -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growly@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gulp-autoprefixer@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-3.1.1.tgz#75230051cd0d171343d783b7e9b5d1120eeef9b0" - dependencies: - autoprefixer "^6.0.0" - gulp-util "^3.0.0" - postcss "^5.0.4" - through2 "^2.0.0" - vinyl-sourcemaps-apply "^0.2.0" - -gulp-batch@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/gulp-batch/-/gulp-batch-1.0.5.tgz#c40fc9b2303674897b1216d82e1518b73217da59" - dependencies: - async-done "^1.0.0" - stream-array "^1.0.1" - -gulp-concat@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.0.tgz#585cfb115411f348773131140566b6a81c69cb91" - dependencies: - concat-with-sourcemaps "^1.0.0" - gulp-util "^3.0.1" - through2 "^0.6.3" - -gulp-if@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gulp-if/-/gulp-if-2.0.1.tgz#55f3edf82cecdfcf6035aa5d0686979aab0dac28" - dependencies: - gulp-match "^1.0.2" - ternary-stream "^2.0.0" - through2 "^2.0.1" - -gulp-less@^3.0.5: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gulp-less/-/gulp-less-3.1.0.tgz#c54c2ee014ebe6e135bfcb0169db4ddb93506de6" - dependencies: - accord "^0.23.0" - gulp-util "^3.0.7" - less "^2.6.0" - object-assign "^4.0.1" - through2 "^2.0.0" - vinyl-sourcemaps-apply "^0.2.0" - -gulp-load-plugins@^1.2.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-1.3.0.tgz#beacf53f77012eeba0fcd3a263816407cb4ada0c" - dependencies: - array-unique "^0.2.1" - fancy-log "^1.2.0" - findup-sync "^0.4.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - micromatch "^2.3.8" - resolve "^1.1.7" - -gulp-match@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.2.tgz#f94c88e946f9faf8a50cb5a6e1b95cb5eeb33632" - dependencies: - minimatch "^3.0.0" - -gulp-notify@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/gulp-notify/-/gulp-notify-2.2.0.tgz#046c8285c292e97eed4e15a009c26cbbe5cef135" - dependencies: - gulp-util "^3.0.2" - lodash.template "^3.0.0" - node-notifier "^4.1.0" - node.extend "^1.1.3" - through2 "^0.6.3" - -gulp-rename@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" - -gulp-rev-replace@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/gulp-rev-replace/-/gulp-rev-replace-0.4.3.tgz#72b51848f5f093ad4b77b1d2411081eb78acd46e" - dependencies: - gulp-util "^3.0.7" - through2 "^2.0.0" - -gulp-rev@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/gulp-rev/-/gulp-rev-7.1.2.tgz#5e17cc229f6b45c74256f88ad3f2d3e9a3305829" - dependencies: - gulp-util "^3.0.0" - modify-filename "^1.1.0" - object-assign "^4.0.1" - rev-hash "^1.0.0" - rev-path "^1.0.0" - sort-keys "^1.0.0" - through2 "^2.0.0" - vinyl-file "^1.1.0" - -gulp-sass@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-2.3.2.tgz#82b7ab90fe902cdc34c04f180d92f2c34902dd52" - dependencies: - gulp-util "^3.0" - lodash.clonedeep "^4.3.2" - node-sass "^3.4.2" - through2 "^2.0.0" - vinyl-sourcemaps-apply "^0.2.0" - -gulp-shell@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gulp-shell/-/gulp-shell-0.5.2.tgz#a4959ca0651ad1c7bbfe70b2d0adbbb4e1aea98d" - dependencies: - async "^1.5.0" - gulp-util "^3.0.7" - lodash "^4.0.0" - through2 "^2.0.0" - -gulp-sourcemaps@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.8.1.tgz#714bb359ac7dfe50f42aa22f4a8fbcce476da22f" - dependencies: - acorn "4.X" - convert-source-map "1.X" - css "2.X" - debug-fabulous "0.0.X" - detect-newline "2.X" - graceful-fs "4.X" - source-map "0.X" - strip-bom "2.X" - through2 "2.X" - vinyl "1.X" - -gulp-uglify@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.5.4.tgz#524788d87666d09f9d0c21fb2177f90039a658c9" - dependencies: - deap "^1.0.0" - fancy-log "^1.0.0" - gulp-util "^3.0.0" - isobject "^2.0.0" - through2 "^2.0.0" - uglify-js "2.6.4" - uglify-save-license "^0.4.1" - vinyl-sourcemaps-apply "^0.2.0" - -gulp-util@*, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.2, gulp-util@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^1.0.11" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulp@~3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" - dependencies: - archy "^1.0.0" - chalk "^1.0.0" - deprecated "^0.0.1" - gulp-util "^3.0.0" - interpret "^1.0.0" - liftoff "^2.1.0" - minimist "^1.1.0" - orchestrator "^0.3.0" - pretty-hrtime "^1.0.0" - semver "^4.1.0" - tildify "^1.0.0" - v8flags "^2.0.2" - vinyl-fs "^0.3.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^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" - dependencies: - ansi-regex "^2.0.0" - -has-color@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -image-size@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.0.tgz#be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + "@babel/helper-plugin-utils" "^7.22.5" -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" +"@babel/plugin-transform-regenerator@^7.22.10": + "integrity" "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz" + "version" "7.22.10" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "regenerator-transform" "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.22.5": + "integrity" "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@^7.2.0": + "integrity" "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "babel-plugin-polyfill-corejs2" "^0.4.6" + "babel-plugin-polyfill-corejs3" "^0.8.5" + "babel-plugin-polyfill-regenerator" "^0.5.3" + "semver" "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + "integrity" "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + "integrity" "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + "integrity" "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + "integrity" "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + "integrity" "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.10": + "integrity" "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz" + "version" "7.22.10" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + "integrity" "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + "integrity" "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + "integrity" "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.2.0": + "integrity" "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "@babel/compat-data" "^7.23.2" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.23.2" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.23.0" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.15" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.23.0" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-for-of" "^7.22.15" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.23.0" + "@babel/plugin-transform-modules-commonjs" "^7.23.0" + "@babel/plugin-transform-modules-systemjs" "^7.23.0" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.23.0" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.23.0" + "babel-plugin-polyfill-corejs2" "^0.4.6" + "babel-plugin-polyfill-corejs3" "^0.8.5" + "babel-plugin-polyfill-regenerator" "^0.5.3" + "core-js-compat" "^3.31.0" + "semver" "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + "integrity" "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + "version" "0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + "esutils" "^2.0.2" + +"@babel/regjsgen@^0.8.0": + "integrity" "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + "resolved" "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + "version" "0.8.0" + +"@babel/runtime@^7.2.0", "@babel/runtime@^7.8.4": + "integrity" "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "regenerator-runtime" "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.22.5": + "integrity" "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.2": + "integrity" "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" + "debug" "^4.1.0" + "globals" "^11.1.0" + +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": + "integrity" "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + "to-fast-properties" "^2.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + "integrity" "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + "version" "3.1.1" + +"@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" + "version" "0.3.20" + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@mrmlnc/readdir-enhanced@^2.2.1": + "integrity" "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==" + "resolved" "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "call-me-maybe" "^1.0.1" + "glob-to-regexp" "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + "integrity" "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" + "version" "1.1.3" + +"@types/glob@^7.1.1": + "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" + "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json-schema@^7.0.5": + "integrity" "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz" + "version" "7.0.14" + +"@types/minimatch@*": + "integrity" "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + "version" "5.1.2" + +"@types/node@*": + "integrity" "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz" + "version" "20.8.9" + dependencies: + "undici-types" "~5.26.4" + +"@types/q@^1.5.1": + "integrity" "sha512-HBPgtzp44867rkL+IzQ3560/E/BlobwCjeXsuKqogrcE99SKgZR4tvBBCuNJZMhUFMz26M7cjKWZg785lllwpA==" + "resolved" "https://registry.npmjs.org/@types/q/-/q-1.5.7.tgz" + "version" "1.5.7" + +"@vue/compiler-sfc@2.7.15": + "integrity" "sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg==" + "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz" + "version" "2.7.15" + dependencies: + "@babel/parser" "^7.18.4" + "postcss" "^8.4.14" + "source-map" "^0.6.1" + +"@vue/component-compiler-utils@^3.1.0": + "integrity" "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==" + "resolved" "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "consolidate" "^0.15.1" + "hash-sum" "^1.0.2" + "lru-cache" "^4.1.2" + "merge-source-map" "^1.1.0" + "postcss" "^7.0.36" + "postcss-selector-parser" "^6.0.2" + "source-map" "~0.6.1" + "vue-template-es2015-compiler" "^1.9.0" + optionalDependencies: + "prettier" "^1.18.2 || ^2.0.0" + +"@webassemblyjs/ast@1.9.0": + "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-api-error@1.9.0": + "integrity" "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-buffer@1.9.0": + "integrity" "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-code-frame@1.9.0": + "integrity" "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + "integrity" "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-module-context@1.9.0": + "integrity" "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + "integrity" "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/helper-wasm-section@1.9.0": + "integrity" "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + "integrity" "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + "integrity" "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" + "version" "1.9.0" + +"@webassemblyjs/wasm-edit@1.9.0": + "integrity" "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" + "version" "1.9.0" + 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": + "integrity" "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" + dependencies: + "mime-types" "~2.1.34" + "negotiator" "0.6.3" + +"acorn@^6.4.1": + "integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" + "version" "6.4.2" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-errors@^1.0.0": + "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + "version" "1.0.1" + +"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv@^6.1.0", "ajv@^6.10.2", "ajv@^6.12.4", "ajv@^6.9.1", "ajv@>=5.0.0": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + 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": + "integrity" "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" + "resolved" "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" + "version" "1.0.2" + +"animate-sass@^0.8.2": + "integrity" "sha512-6sZ34dusqb1HdZLNpJUNaZc0CuuLgFI8SqlyaxbSSKE9zqfoNtOeO3IpVUCqvaSm/oMNH1VlEAsJlppjg+idKQ==" + "resolved" "https://registry.npmjs.org/animate-sass/-/animate-sass-0.8.2.tgz" + "version" "0.8.2" + +"ansi-colors@^3.0.0": + "integrity" "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" + "version" "3.2.4" + +"ansi-html-community@0.0.8": + "integrity" "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + "resolved" "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + "version" "0.0.8" + +"ansi-regex@^2.0.0": + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^3.0.0": + "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + "version" "3.0.0" + +"ansi-regex@^4.1.0": + "integrity" "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + "version" "4.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-styles@^2.2.1": + "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + "version" "2.2.1" + +"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"anymatch@^2.0.0": + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "micromatch" "^3.1.4" + "normalize-path" "^2.1.1" + +"anymatch@~3.1.2": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"aproba@^1.1.1": + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + "version" "1.2.0" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"arr-diff@^4.0.0": + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + "version" "4.0.0" + +"arr-flatten@^1.1.0": + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + "version" "1.1.0" + +"arr-union@^3.1.0": + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + "version" "3.1.0" + +"array-buffer-byte-length@^1.0.0": + "integrity" "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==" + "resolved" "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "is-array-buffer" "^3.0.1" + +"array-flatten@^2.1.0": + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + "version" "2.1.2" + +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-union@^1.0.1": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-uniq@^1.0.1": + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"array-unique@^0.3.2": + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + "version" "0.3.2" + +"array.prototype.reduce@^1.0.6": + "integrity" "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==" + "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + "es-array-method-boxes-properly" "^1.0.0" + "is-string" "^1.0.7" + +"arraybuffer.prototype.slice@^1.0.2": + "integrity" "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==" + "resolved" "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-buffer-byte-length" "^1.0.0" + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + "get-intrinsic" "^1.2.1" + "is-array-buffer" "^3.0.2" + "is-shared-array-buffer" "^1.0.2" + +"arrify@^1.0.1": + "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"asap@~2.0.3": + "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" + +"asn1.js@^5.2.0": + "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" + "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bn.js" "^4.0.0" + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + "safer-buffer" "^2.1.0" + +"assert@^1.1.1": + "integrity" "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==" + "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "object.assign" "^4.1.4" + "util" "^0.10.4" + +"assign-symbols@^1.0.0": + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + "version" "1.0.0" + +"ast-types@0.9.6": + "integrity" "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==" + "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz" + "version" "0.9.6" + +"async-each@^1.0.1": + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + "version" "1.0.3" + +"async-limiter@~1.0.0": + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + "version" "1.0.1" + +"async@^2.4.1", "async@^2.6.4": + "integrity" "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==" + "resolved" "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + "version" "2.6.4" + dependencies: + "lodash" "^4.17.14" + +"atob@^2.1.1": + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + "version" "2.1.2" + +"autoprefixer@^9.4.2": + "integrity" "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz" + "version" "9.8.8" + dependencies: + "browserslist" "^4.12.0" + "caniuse-lite" "^1.0.30001109" + "normalize-range" "^0.1.2" + "num2fraction" "^1.2.2" + "picocolors" "^0.2.1" + "postcss" "^7.0.32" + "postcss-value-parser" "^4.1.0" + +"available-typed-arrays@^1.0.5": + "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + "version" "1.0.5" + +"axios@^0.19": + "integrity" "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz" + "version" "0.19.0" + dependencies: + "follow-redirects" "1.5.10" + "is-buffer" "^2.0.2" + +"babel-code-frame@^6.26.0": + "integrity" "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==" + "resolved" "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" + "version" "6.26.0" + dependencies: + "chalk" "^1.1.3" + "esutils" "^2.0.2" + "js-tokens" "^3.0.2" + +"babel-loader@^8.0.4": + "integrity" "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==" + "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz" + "version" "8.3.0" + dependencies: + "find-cache-dir" "^3.3.1" + "loader-utils" "^2.0.0" + "make-dir" "^3.1.0" + "schema-utils" "^2.6.5" + +"babel-merge@^2.0.1": + "integrity" "sha512-puTQQxuzS+0JlMyVdfsTVaCgzqjBXKPMv7oUANpYcHFY+7IptWZ4PZDYX+qBxrRMtrriuBA44LkKpS99EJzqVA==" + "resolved" "https://registry.npmjs.org/babel-merge/-/babel-merge-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "@babel/core" "^7.0.0-beta.49" + "deepmerge" "^2.1.0" + "object.omit" "^3.0.0" + +"babel-plugin-polyfill-corejs2@^0.4.6": + "integrity" "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz" + "version" "0.4.6" + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.3" + "semver" "^6.3.1" + +"babel-plugin-polyfill-corejs3@^0.8.5": + "integrity" "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz" + "version" "0.8.6" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.3" + "core-js-compat" "^3.33.1" + +"babel-plugin-polyfill-regenerator@^0.5.3": + "integrity" "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.3" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base@^0.11.1": + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" + "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + "version" "0.11.2" + 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" + +"base64-js@^1.0.2": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"batch@0.6.1": + "integrity" "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + "resolved" "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + "version" "0.6.1" + +"big.js@^5.2.2": + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + "version" "5.2.2" + +"binary-extensions@^1.0.0": + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + "version" "1.13.1" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"bindings@^1.5.0": + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" + "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "file-uri-to-path" "1.0.0" + +"bluebird@^3.1.1", "bluebird@^3.5.5": + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + "version" "3.7.2" + +"bn.js@^4.0.0": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" + +"bn.js@^4.1.0": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" + +"bn.js@^4.11.9": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" + +"bn.js@^5.0.0", "bn.js@^5.2.1": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"body-parser@1.20.1": + "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + "version" "1.20.1" + dependencies: + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.11.0" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" + +"bonjour@^3.5.0": + "integrity" "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==" + "resolved" "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" + "version" "3.5.0" + 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": + "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + "version" "1.0.0" + +"bootstrap-sass@^3.4.3": + "integrity" "sha512-vPgFnGMp1jWZZupOND65WS6mkR8rxhJxndT/AcMbqcq1hHMdkcH4sMPhznLzzoHOHkSCrd6J9F8pWBriPCKP2Q==" + "resolved" "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.3.tgz" + "version" "3.4.3" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^2.3.1", "braces@^2.3.2": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + 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": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"brorand@^1.0.1", "brorand@^1.1.0": + "integrity" "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + "version" "1.1.0" + +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" + "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + "version" "1.2.0" + 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": + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" + "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "browserify-aes" "^1.0.4" + "browserify-des" "^1.0.0" + "evp_bytestokey" "^1.0.0" + +"browserify-des@^1.0.0": + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" + "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + "version" "1.0.2" + 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.1.0": + "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" + "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "bn.js" "^5.0.0" + "randombytes" "^2.0.1" + +"browserify-sign@^4.0.0": + "integrity" "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==" + "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "bn.js" "^5.2.1" + "browserify-rsa" "^4.1.0" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "elliptic" "^6.5.4" + "inherits" "^2.0.4" + "parse-asn1" "^5.1.6" + "readable-stream" "^3.6.2" + "safe-buffer" "^5.2.1" + +"browserify-zlib@^0.2.0": + "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" + "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "pako" "~1.0.5" + +"browserslist@^4.0.0", "browserslist@^4.12.0", "browserslist@^4.21.9", "browserslist@^4.22.1", "browserslist@>= 4.21.0": + "integrity" "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" + "version" "4.22.1" + dependencies: + "caniuse-lite" "^1.0.30001541" + "electron-to-chromium" "^1.4.535" + "node-releases" "^2.0.13" + "update-browserslist-db" "^1.0.13" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer-indexof@^1.0.0": + "integrity" "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "resolved" "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" + "version" "1.1.1" + +"buffer-xor@^1.0.3": + "integrity" "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + "version" "1.0.3" + +"buffer@^4.3.0": + "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + "version" "4.9.2" + dependencies: + "base64-js" "^1.0.2" + "ieee754" "^1.1.4" + "isarray" "^1.0.0" + +"builtin-status-codes@^3.0.0": + "integrity" "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + "version" "3.0.0" + +"bytes@3.0.0": + "integrity" "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + "version" "3.0.0" + +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" + +"cacache@^12.0.2": + "integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" + "version" "12.0.4" + 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": + "integrity" "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz" + "version" "13.0.1" + 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": + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" + "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + "version" "1.0.1" + 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" + +"call-bind@^1.0.0", "call-bind@^1.0.2", "call-bind@^1.0.4", "call-bind@^1.0.5": + "integrity" "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "function-bind" "^1.1.2" + "get-intrinsic" "^1.2.1" + "set-function-length" "^1.1.1" + +"call-me-maybe@^1.0.1": + "integrity" "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + "resolved" "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz" + "version" "1.0.2" + +"caller-callsite@^2.0.0": + "integrity" "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==" + "resolved" "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "callsites" "^2.0.0" + +"caller-path@^2.0.0": + "integrity" "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==" + "resolved" "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "caller-callsite" "^2.0.0" + +"callsites@^2.0.0": + "integrity" "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" + "version" "2.0.0" + +"camel-case@3.0.x": + "integrity" "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==" + "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "no-case" "^2.2.0" + "upper-case" "^1.1.1" + +"camelcase@^5.0.0": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"caniuse-api@^3.0.0": + "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" + "resolved" "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + "version" "3.0.0" + 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.30001541": + "integrity" "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz" + "version" "1.0.30001554" + +"chalk@^1.1.3": + "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + 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.4.1": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"charenc@~0.0.1": + "integrity" "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + "version" "0.0.2" + +"chart.js@^2.9.4": + "integrity" "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==" + "resolved" "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz" + "version" "2.9.4" + dependencies: + "chartjs-color" "^2.1.0" + "moment" "^2.10.2" + +"chartjs-color-string@^0.6.0": + "integrity" "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==" + "resolved" "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "color-name" "^1.0.0" + +"chartjs-color@^2.1.0": + "integrity" "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==" + "resolved" "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "chartjs-color-string" "^0.6.0" + "color-convert" "^1.9.3" + +"chokidar@^2.0.3", "chokidar@^2.1.8": + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + "version" "2.1.8" + 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": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" + optionalDependencies: + "fsevents" "~2.3.2" + +"chokidar@>=3.0.0 <4.0.0": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" + optionalDependencies: + "fsevents" "~2.3.2" + +"chownr@^1.1.1", "chownr@^1.1.2": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" + "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"class-utils@^0.3.5": + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" + "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "arr-union" "^3.1.0" + "define-property" "^0.2.5" + "isobject" "^3.0.0" + "static-extend" "^0.1.1" + +"clean-css@^4.1.3", "clean-css@4.2.x": + "integrity" "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==" + "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" + "version" "4.2.4" + dependencies: + "source-map" "~0.6.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cliui@^4.0.0": + "integrity" "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "string-width" "^2.1.1" + "strip-ansi" "^4.0.0" + "wrap-ansi" "^2.0.0" + +"cliui@^5.0.0": + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "string-width" "^3.1.0" + "strip-ansi" "^5.2.0" + "wrap-ansi" "^5.1.0" + +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"coa@^2.0.2": + "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==" + "resolved" "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "@types/q" "^1.5.1" + "chalk" "^2.4.1" + "q" "^1.1.2" + +"code-point-at@^1.0.0": + "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"collect.js@^4.12.8": + "integrity" "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==" + "resolved" "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz" + "version" "4.36.1" + +"collection-visit@^1.0.0": + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "map-visit" "^1.0.0" + "object-visit" "^1.0.0" + +"color-convert@^1.9.0", "color-convert@^1.9.3": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.0.0", "color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-string@^1.6.0": + "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==" + "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "color-name" "^1.0.0" + "simple-swizzle" "^0.2.2" + +"color@^3.0.0": + "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==" + "resolved" "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.3" + "color-string" "^1.6.0" + +"commander@^2.19.0", "commander@^2.20.0", "commander@^2.9.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@~2.19.0": + "integrity" "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" + "version" "2.19.0" + +"commander@2.17.x": + "integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz" + "version" "2.17.1" + +"commondir@^1.0.1": + "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" + +"component-emitter@^1.2.1": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" + +"compressible@~2.0.16": + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" + "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + "version" "2.0.18" + dependencies: + "mime-db" ">= 1.43.0 < 2" + +"compression@^1.7.4": + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==" + "resolved" "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + "version" "1.7.4" + 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": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.5.0": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"concat@^1.0.3": + "integrity" "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==" + "resolved" "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "commander" "^2.9.0" + +"connect-history-api-fallback@^1.6.0": + "integrity" "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" + "version" "1.6.0" + +"console-browserify@^1.1.0": + "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + "version" "1.2.0" + +"consolidate@^0.15.1": + "integrity" "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==" + "resolved" "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz" + "version" "0.15.1" + dependencies: + "bluebird" "^3.1.1" + +"constants-browserify@^1.0.0": + "integrity" "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + "version" "1.0.0" + +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" + dependencies: + "safe-buffer" "5.2.1" + +"content-type@~1.0.4": + "integrity" "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + "version" "1.0.5" + +"convert-source-map@^2.0.0": + "integrity" "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + "version" "2.0.0" + +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" + +"copy-concurrently@^1.0.0": + "integrity" "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==" + "resolved" "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" + "version" "1.0.5" + 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": + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + "version" "0.1.1" + +"core-js-compat@^3.31.0", "core-js-compat@^3.33.1": + "integrity" "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz" + "version" "3.33.1" + dependencies: + "browserslist" "^4.22.1" + +"core-util-is@~1.0.0": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cosmiconfig@^5.0.0": + "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + "version" "5.2.1" + 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": + "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" + "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + "version" "4.0.4" + 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": + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" + "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + "version" "1.2.0" + 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": + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" + "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + "version" "1.1.7" + 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-env@^5.1": + "integrity" "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==" + "resolved" "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "cross-spawn" "^6.0.5" + "is-windows" "^1.0.0" + +"cross-spawn@^6.0.0", "cross-spawn@^6.0.5": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"crypt@~0.0.1": + "integrity" "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + "version" "0.0.2" + +"crypto-browserify@^3.11.0": + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" + "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + "version" "3.12.0" + 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": + "integrity" "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" + "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" + "version" "0.0.4" + +"css-declaration-sorter@^4.0.1": + "integrity" "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==" + "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.1" + "timsort" "^0.3.0" + +"css-loader@*", "css-loader@^1.0.1": + "integrity" "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==" + "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz" + "version" "1.0.1" + 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-select-base-adapter@^0.1.1": + "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + "resolved" "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + "version" "0.1.1" + +"css-select@^2.0.0": + "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + "version" "2.1.0" + 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": + "integrity" "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==" + "resolved" "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz" + "version" "0.7.3" + dependencies: + "cssesc" "^3.0.0" + "fastparse" "^1.1.2" + +"css-tree@^1.1.2": + "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "mdn-data" "2.0.14" + "source-map" "^0.6.1" + +"css-tree@1.0.0-alpha.37": + "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==" + "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + "version" "1.0.0-alpha.37" + dependencies: + "mdn-data" "2.0.4" + "source-map" "^0.6.1" + +"css-what@^3.2.1": + "integrity" "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + "version" "3.4.2" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"cssnano-preset-default@^4.0.8": + "integrity" "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==" + "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" + "version" "4.0.8" + 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.3" + "postcss-unique-selectors" "^4.0.1" + +"cssnano-util-get-arguments@^4.0.0": + "integrity" "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==" + "resolved" "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" + "version" "4.0.0" + +"cssnano-util-get-match@^4.0.0": + "integrity" "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==" + "resolved" "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" + "version" "4.0.0" + +"cssnano-util-raw-cache@^4.0.1": + "integrity" "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==" + "resolved" "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"cssnano-util-same-parent@^4.0.0": + "integrity" "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + "resolved" "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" + "version" "4.0.1" + +"cssnano@^4.1.10": + "integrity" "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==" + "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz" + "version" "4.1.11" + dependencies: + "cosmiconfig" "^5.0.0" + "cssnano-preset-default" "^4.0.8" + "is-resolvable" "^1.0.0" + "postcss" "^7.0.0" + +"csso@^4.0.2": + "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==" + "resolved" "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "css-tree" "^1.1.2" + +"csstype@^3.1.0": + "integrity" "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" + "version" "3.1.2" + +"cyclist@^1.0.1": + "integrity" "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==" + "resolved" "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz" + "version" "1.0.2" + +"de-indent@^1.0.2": + "integrity" "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" + "resolved" "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz" + "version" "1.0.2" + +"debug@^2.2.0", "debug@^2.3.3", "debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.2.7": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^4.1.0": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"debug@^4.1.1": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"debug@=3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + +"decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decode-uri-component@^0.2.0": + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"deep-equal@^1.0.1": + "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==" + "resolved" "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" + "version" "1.1.1" + 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" + +"deepmerge@^2.1.0": + "integrity" "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz" + "version" "2.2.1" + +"default-gateway@^4.2.0": + "integrity" "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==" + "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "execa" "^1.0.0" + "ip-regex" "^2.1.0" + +"define-data-property@^1.0.1", "define-data-property@^1.1.1": + "integrity" "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==" + "resolved" "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "get-intrinsic" "^1.2.1" + "gopd" "^1.0.1" + "has-property-descriptors" "^1.0.0" + +"define-properties@^1.1.3", "define-properties@^1.1.4", "define-properties@^1.2.0": + "integrity" "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "define-data-property" "^1.0.1" + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" + +"define-property@^0.2.5": + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + "version" "0.2.5" + dependencies: + "is-descriptor" "^0.1.0" + +"define-property@^1.0.0": + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-descriptor" "^1.0.0" + +"define-property@^2.0.2": + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-descriptor" "^1.0.2" + "isobject" "^3.0.1" + +"del@^4.1.1": + "integrity" "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==" + "resolved" "https://registry.npmjs.org/del/-/del-4.1.1.tgz" + "version" "4.1.1" + 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" + +"depd@~1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"des.js@^1.0.0": + "integrity" "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==" + "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" + +"detect-file@^1.0.0": + "integrity" "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + "version" "1.0.0" + +"detect-node@^2.0.4": + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + "version" "2.1.0" + +"diffie-hellman@^5.0.0": + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" + "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + "version" "5.0.3" + dependencies: + "bn.js" "^4.1.0" + "miller-rabin" "^4.0.0" + "randombytes" "^2.0.0" + +"dir-glob@2.0.0": + "integrity" "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "arrify" "^1.0.1" + "path-type" "^3.0.0" + +"dns-equal@^1.0.0": + "integrity" "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + "resolved" "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + "version" "1.0.0" + +"dns-packet@^1.3.1": + "integrity" "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==" + "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" + "version" "1.3.4" + dependencies: + "ip" "^1.1.0" + "safe-buffer" "^5.0.1" + +"dns-txt@^2.0.2": + "integrity" "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==" + "resolved" "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "buffer-indexof" "^1.0.0" + +"dom-serializer@0": + "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "domelementtype" "^2.0.1" + "entities" "^2.0.0" + +"domain-browser@^1.1.1": + "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + "version" "1.2.0" + +"domelementtype@^2.0.1": + "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + "version" "2.3.0" + +"domelementtype@1": + "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + "version" "1.3.1" + +"domutils@^1.7.0": + "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "dom-serializer" "0" + "domelementtype" "1" + +"dot-prop@^5.2.0": + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "is-obj" "^2.0.0" + +"dotenv-expand@^4.2.0": + "integrity" "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" + "resolved" "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz" + "version" "4.2.0" + +"dotenv@^6.2.0": + "integrity" "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz" + "version" "6.2.0" + +"duplexify@^3.4.2", "duplexify@^3.6.0": + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" + "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + "version" "3.7.1" + dependencies: + "end-of-stream" "^1.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + "stream-shift" "^1.0.0" + +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"electron-to-chromium@^1.4.535": + "integrity" "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz" + "version" "1.4.568" + +"elliptic@^6.5.3", "elliptic@^6.5.4": + "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" + "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + "version" "6.5.4" + 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": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emojis-list@^3.0.0": + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + "version" "3.0.0" + +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"enhanced-resolve@^4.1.1", "enhanced-resolve@^4.5.0": + "integrity" "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "graceful-fs" "^4.1.2" + "memory-fs" "^0.5.0" + "tapable" "^1.0.0" + +"entities@^2.0.0": + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + "version" "2.2.0" + +"errno@^0.1.3", "errno@~0.1.7": + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" + "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + "version" "0.1.8" + dependencies: + "prr" "~1.0.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"error-stack-parser@^2.0.0": + "integrity" "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==" + "resolved" "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "stackframe" "^1.0.4" + +"es-abstract@^1.17.2", "es-abstract@^1.22.1": + "integrity" "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" + "version" "1.22.3" + dependencies: + "array-buffer-byte-length" "^1.0.0" + "arraybuffer.prototype.slice" "^1.0.2" + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.5" + "es-set-tostringtag" "^2.0.1" + "es-to-primitive" "^1.2.1" + "function.prototype.name" "^1.1.6" + "get-intrinsic" "^1.2.2" + "get-symbol-description" "^1.0.0" + "globalthis" "^1.0.3" + "gopd" "^1.0.1" + "has-property-descriptors" "^1.0.0" + "has-proto" "^1.0.1" + "has-symbols" "^1.0.3" + "hasown" "^2.0.0" + "internal-slot" "^1.0.5" + "is-array-buffer" "^3.0.2" + "is-callable" "^1.2.7" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-typed-array" "^1.1.12" + "is-weakref" "^1.0.2" + "object-inspect" "^1.13.1" + "object-keys" "^1.1.1" + "object.assign" "^4.1.4" + "regexp.prototype.flags" "^1.5.1" + "safe-array-concat" "^1.0.1" + "safe-regex-test" "^1.0.0" + "string.prototype.trim" "^1.2.8" + "string.prototype.trimend" "^1.0.7" + "string.prototype.trimstart" "^1.0.7" + "typed-array-buffer" "^1.0.0" + "typed-array-byte-length" "^1.0.0" + "typed-array-byte-offset" "^1.0.0" + "typed-array-length" "^1.0.4" + "unbox-primitive" "^1.0.2" + "which-typed-array" "^1.1.13" + +"es-array-method-boxes-properly@^1.0.0": + "integrity" "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + "version" "1.0.0" + +"es-set-tostringtag@^2.0.1": + "integrity" "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==" + "resolved" "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "get-intrinsic" "^1.2.2" + "has-tostringtag" "^1.0.0" + "hasown" "^2.0.0" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +"es5-shim@^4.5.14": + "integrity" "sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg==" + "resolved" "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.14.tgz" + "version" "4.5.14" + +"es6-templates@^0.2.3": + "integrity" "sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w==" + "resolved" "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz" + "version" "0.2.3" + dependencies: + "recast" "~0.11.12" + "through" "~2.3.6" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"eslint-scope@^4.0.3": + "integrity" "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esprima@~3.1.0": + "integrity" "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" + "version" "3.1.3" + +"esrecurse@^4.1.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"esutils@^2.0.2": + "integrity" "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + "version" "2.0.2" + +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"eventemitter3@^4.0.0": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + +"events@^3.0.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"eventsource@^2.0.2": + "integrity" "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" + "resolved" "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz" + "version" "2.0.2" + +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" + "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "md5.js" "^1.3.4" + "safe-buffer" "^5.1.1" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + 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" + +"expand-brackets@^2.1.4": + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + "version" "2.1.4" + 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" + +"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": + "integrity" "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==" + "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "homedir-polyfill" "^1.0.1" + +"express@^4.17.1": + "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + "version" "4.18.2" + dependencies: + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.1" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.11.0" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"extend-shallow@^2.0.1": + "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend-shallow@^3.0.0": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend-shallow@^3.0.2": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extglob@^2.0.4": + "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + "version" "2.0.4" + 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" + +"extract-text-webpack-plugin@v4.0.0-beta.0": + "integrity" "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==" + "resolved" "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz" + "version" "4.0.0-beta.0" + dependencies: + "async" "^2.4.1" + "loader-utils" "^1.1.0" + "schema-utils" "^0.4.5" + "webpack-sources" "^1.1.0" + +"fast-deep-equal@^3.1.1": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^2.0.2": + "integrity" "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz" + "version" "2.2.7" + 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": + "integrity" "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz" + "version" "2.0.0" + +"fastparse@^1.1.1", "fastparse@^1.1.2": + "integrity" "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + "resolved" "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" + "version" "1.1.2" + +"faye-websocket@^0.11.3", "faye-websocket@^0.11.4": + "integrity" "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==" + "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + "version" "0.11.4" + dependencies: + "websocket-driver" ">=0.5.1" + +"figgy-pudding@^3.5.1": + "integrity" "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "resolved" "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" + "version" "3.5.2" + +"file-loader@^2.0.0": + "integrity" "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==" + "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "loader-utils" "^1.0.2" + "schema-utils" "^1.0.0" + +"file-type@^10.7.0": + "integrity" "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" + "resolved" "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz" + "version" "10.11.0" + +"file-uri-to-path@1.0.0": + "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + "version" "1.0.0" + +"fill-range@^4.0.0": + "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + "version" "4.0.0" + 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": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" + +"find-cache-dir@^2.1.0": + "integrity" "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "commondir" "^1.0.1" + "make-dir" "^2.0.0" + "pkg-dir" "^3.0.0" + +"find-cache-dir@^3.3.1": + "integrity" "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "commondir" "^1.0.1" + "make-dir" "^3.0.2" + "pkg-dir" "^4.1.0" + +"find-up@^3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"findup-sync@^3.0.0": + "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" + "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "detect-file" "^1.0.0" + "is-glob" "^4.0.0" + "micromatch" "^3.0.4" + "resolve-dir" "^1.0.1" + +"flatpickr@^4.5.7": + "integrity" "sha512-JqPfihUc9A/j9QAsh6otoARmMyUauPE17vRBEG+ThJwbl8zAq4ssGpxlPK3wWM/i8EFxkHg9UuVo0ds7XluKxw==" + "resolved" "https://registry.npmjs.org/flatpickr/-/flatpickr-4.5.7.tgz" + "version" "4.5.7" + +"flush-write-stream@^1.0.0": + "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" + "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "inherits" "^2.0.3" + "readable-stream" "^2.3.6" + +"follow-redirects@^1.0.0", "follow-redirects@1.5.10": + "integrity" "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz" + "version" "1.5.10" + dependencies: + "debug" "=3.1.0" + +"for-each@^0.3.3": + "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" + "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "is-callable" "^1.1.3" + +"for-in@^1.0.2": + "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + "version" "1.0.2" + +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" + +"fragment-cache@^0.2.1": + "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "map-cache" "^0.2.2" + +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"friendly-errors-webpack-plugin@^1.6.1": + "integrity" "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==" + "resolved" "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "chalk" "^1.1.3" + "error-stack-parser" "^2.0.0" + "string-width" "^2.0.0" + +"from2@^2.1.0": + "integrity" "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==" + "resolved" "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + +"fs-extra@^7.0.1": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-write-stream-atomic@^1.0.8": + "integrity" "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==" + "resolved" "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "graceful-fs" "^4.1.2" + "iferr" "^0.1.5" + "imurmurhash" "^0.1.4" + "readable-stream" "1 || 2" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@^1.2.7": + "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "bindings" "^1.5.0" + "nan" "^2.12.1" + +"fsevents@~2.3.2": + "integrity" "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + "version" "2.3.3" + +"function-bind@^1.1.2": + "integrity" "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + "version" "1.1.2" + +"function.prototype.name@^1.1.6": + "integrity" "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + "version" "1.1.6" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + "functions-have-names" "^1.2.3" + +"functions-have-names@^1.2.3": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.1": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3", "get-intrinsic@^1.2.0", "get-intrinsic@^1.2.1", "get-intrinsic@^1.2.2": + "integrity" "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "function-bind" "^1.1.2" + "has-proto" "^1.0.1" + "has-symbols" "^1.0.3" + "hasown" "^2.0.0" + +"get-stream@^4.0.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +"get-value@^2.0.3", "get-value@^2.0.6": + "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + "version" "2.0.6" + +"github-markdown-css@^2.3.0": + "integrity" "sha512-RX5VUC54uX6Lvrm226M9kMzsNeOa81MnKyxb3J0G5KLjyoOySOZgwyKFkUpv6iUhooiUZdogk+OTwQPJ4WttYg==" + "resolved" "https://registry.npmjs.org/github-markdown-css/-/github-markdown-css-2.10.0.tgz" + "version" "2.10.0" + +"glob-all@^3.1.0": + "integrity" "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=" + "resolved" "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "glob" "^7.0.5" + "yargs" "~1.2.6" + +"glob-parent@^3.1.0": + "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-glob" "^3.1.0" + "path-dirname" "^1.0.0" + +"glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-to-regexp@^0.3.0": + "integrity" "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz" + "version" "0.3.0" + +"glob@^7.0.3", "glob@^7.0.5", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" + 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" + +"global-modules@^1.0.0": + "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "global-prefix" "^1.0.1" + "is-windows" "^1.0.1" + "resolve-dir" "^1.0.0" + +"global-modules@^2.0.0": + "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "global-prefix" "^3.0.0" + +"global-prefix@^1.0.1": + "integrity" "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "expand-tilde" "^2.0.2" + "homedir-polyfill" "^1.0.1" + "ini" "^1.3.4" + "is-windows" "^1.0.1" + "which" "^1.2.14" + +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globalthis@^1.0.3": + "integrity" "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==" + "resolved" "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "define-properties" "^1.1.3" + +"globby@^6.1.0": + "integrity" "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + "version" "6.1.0" + 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@^8.0.1": + "integrity" "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==" + "resolved" "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "array-union" "^1.0.1" + "dir-glob" "2.0.0" + "fast-glob" "^2.0.2" + "glob" "^7.1.2" + "ignore" "^3.3.5" + "pify" "^3.0.0" + "slash" "^1.0.0" + +"gopd@^1.0.1": + "integrity" "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==" + "resolved" "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "get-intrinsic" "^1.1.3" + +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.2": + "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + "version" "4.2.11" + +"growly@^1.3.0": + "integrity" "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" + "version" "1.3.0" + +"handle-thing@^2.0.0": + "integrity" "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "resolved" "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + "version" "2.0.1" + +"has-ansi@^2.0.0": + "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-regex" "^2.0.0" + +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-property-descriptors@^1.0.0": + "integrity" "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "get-intrinsic" "^1.2.2" + +"has-proto@^1.0.1": + "integrity" "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "resolved" "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + "version" "1.0.1" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has-value@^0.3.1": + "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "get-value" "^2.0.3" + "has-values" "^0.1.4" + "isobject" "^2.0.0" + +"has-value@^1.0.0": + "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-value" "^2.0.6" + "has-values" "^1.0.0" + "isobject" "^3.0.0" + +"has-values@^0.1.4": + "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + "version" "0.1.4" + +"has-values@^1.0.0": + "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-number" "^3.0.0" + "kind-of" "^4.0.0" + +"has@^1.0.0": + "integrity" "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.4.tgz" + "version" "1.0.4" + +"hash-base@^3.0.0": + "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" + "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"hash-sum@^1.0.2": + "integrity" "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" + "resolved" "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz" + "version" "1.0.2" + +"hash.js@^1.0.0", "hash.js@^1.0.3": + "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.1" + +"hasown@^2.0.0": + "integrity" "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==" + "resolved" "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "function-bind" "^1.1.2" + +"he@^1.2.0", "he@1.2.x": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" + +"hex-color-regex@^1.1.0": + "integrity" "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + "resolved" "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" + "version" "1.1.0" + +"hmac-drbg@^1.0.1": + "integrity" "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==" + "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"homedir-polyfill@^1.0.1": + "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" + "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "parse-passwd" "^1.0.0" + +"hpack.js@^2.1.6": + "integrity" "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==" + "resolved" "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + "version" "2.1.6" + dependencies: + "inherits" "^2.0.1" + "obuf" "^1.0.0" + "readable-stream" "^2.0.1" + "wbuf" "^1.1.0" + +"hsl-regex@^1.0.0": + "integrity" "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" + "resolved" "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" + "version" "1.0.0" + +"hsla-regex@^1.0.0": + "integrity" "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" + "resolved" "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" + "version" "1.0.0" + +"html-entities@^1.3.1": + "integrity" "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" + "version" "1.4.0" + +"html-loader@^0.5.5": + "integrity" "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==" + "resolved" "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz" + "version" "0.5.5" + dependencies: + "es6-templates" "^0.2.3" + "fastparse" "^1.1.1" + "html-minifier" "^3.5.8" + "loader-utils" "^1.1.0" + "object-assign" "^4.1.1" + +"html-minifier@^3.5.8": + "integrity" "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==" + "resolved" "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz" + "version" "3.5.21" + 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" + +"http-deceiver@^1.2.7": + "integrity" "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + "resolved" "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + "version" "1.2.7" + +"http-errors@~1.6.2": + "integrity" "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.0" + "statuses" ">= 1.4.0 < 2" + +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" + +"http-parser-js@>=0.5.1": + "integrity" "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "resolved" "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + "version" "0.5.8" + +"http-proxy-middleware@0.19.1": + "integrity" "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==" + "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" + "version" "0.19.1" + dependencies: + "http-proxy" "^1.17.0" + "is-glob" "^4.0.0" + "lodash" "^4.17.11" + "micromatch" "^3.1.10" + +"http-proxy@^1.17.0": + "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" + "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + "version" "1.18.1" + dependencies: + "eventemitter3" "^4.0.0" + "follow-redirects" "^1.0.0" + "requires-port" "^1.0.0" + +"https-browserify@^1.0.0": + "integrity" "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + "version" "1.0.0" + +"iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"icss-replace-symbols@^1.1.0": + "integrity" "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + "resolved" "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz" + "version" "1.1.0" + +"icss-utils@^2.1.0": + "integrity" "sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==" + "resolved" "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "postcss" "^6.0.1" + +"ieee754@^1.1.4": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"iferr@^0.1.5": + "integrity" "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" + "resolved" "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" + "version" "0.1.5" + +"ignore@^3.3.5": + "integrity" "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" + "version" "3.3.10" + +"imagemin@^5.0.0 || ^6.0.0", "imagemin@^6.0.0": + "integrity" "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==" + "resolved" "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "file-type" "^10.7.0" + "globby" "^8.0.1" + "make-dir" "^1.0.0" + "p-pipe" "^1.1.0" + "pify" "^4.0.1" + "replace-ext" "^1.0.0" + +"img-loader@^3.0.0": + "integrity" "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==" + "resolved" "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "loader-utils" "^1.1.0" + +"immutable@^4.0.0": + "integrity" "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz" + "version" "4.3.4" + +"import-cwd@^2.0.0": + "integrity" "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==" + "resolved" "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "import-from" "^2.1.0" + +"import-fresh@^2.0.0": + "integrity" "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "caller-path" "^2.0.0" + "resolve-from" "^3.0.0" + +"import-from@^2.1.0": + "integrity" "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==" + "resolved" "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "resolve-from" "^3.0.0" + +"import-local@^2.0.0": + "integrity" "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "pkg-dir" "^3.0.0" + "resolve-cwd" "^2.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"indexes-of@^1.0.1": + "integrity" "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" + "resolved" "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" + "version" "1.0.1" + +"infer-owner@^1.0.3", "infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.3": + "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + +"inherits@^2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.4", "ini@^1.3.5": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"internal-ip@^4.3.0": + "integrity" "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==" + "resolved" "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "default-gateway" "^4.2.0" + "ipaddr.js" "^1.9.0" + +"internal-slot@^1.0.5": + "integrity" "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "get-intrinsic" "^1.2.2" + "hasown" "^2.0.0" + "side-channel" "^1.0.4" + +"interpret@^1.4.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"invert-kv@^2.0.0": + "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + "version" "2.0.0" + +"ionicons@~2.0": + "integrity" "sha1-yjmBEyk+qHAkT1OPCqu9S1sgmj4=" + "resolved" "https://registry.npmjs.org/ionicons/-/ionicons-2.0.1.tgz" + "version" "2.0.1" + +"ip-regex@^2.1.0": + "integrity" "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==" + "resolved" "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" + "version" "2.1.0" + +"ip@^1.1.0", "ip@^1.1.5": + "integrity" "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "resolved" "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" + "version" "1.1.8" + +"ipaddr.js@^1.9.0", "ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-absolute-url@^2.0.0": + "integrity" "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==" + "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" + "version" "2.1.0" + +"is-absolute-url@^3.0.3": + "integrity" "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" + "version" "3.0.3" + +"is-accessor-descriptor@^0.1.6": + "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "kind-of" "^3.0.2" + +"is-accessor-descriptor@^1.0.0": + "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-arguments@^1.0.4": + "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" + "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-array-buffer@^3.0.1", "is-array-buffer@^3.0.2": + "integrity" "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==" + "resolved" "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.2.0" + "is-typed-array" "^1.1.10" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-arrayish@^0.3.1": + "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + "version" "0.3.2" + +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-binary-path@^1.0.0": + "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "binary-extensions" "^1.0.0" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-buffer@^1.1.5", "is-buffer@~1.1.1": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + +"is-buffer@^2.0.2": + "integrity" "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz" + "version" "2.0.3" + +"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": + "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + "version" "1.2.7" + +"is-color-stop@^1.0.0": + "integrity" "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==" + "resolved" "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" + "version" "1.1.0" + 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.13.0": + "integrity" "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + "version" "2.13.1" + dependencies: + "hasown" "^2.0.0" -indx@0.2.x: - version "0.2.3" - resolved "https://registry.yarnpkg.com/indx/-/indx-0.2.3.tgz#15dcf56ee9cf65c0234c513c27fbd580e70fbc50" +"is-data-descriptor@^0.1.4": + "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" + +"is-data-descriptor@^1.0.0": + "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-date-object@^1.0.1": + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-descriptor@^0.1.0": + "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + "version" "0.1.6" + 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": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" + +"is-directory@^0.3.1": + "integrity" "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" + "resolved" "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" + "version" "0.3.1" + +"is-extendable@^0.1.0", "is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" +"is-extendable@^1.0.0": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + "is-plain-object" "^2.0.4" -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" +"is-extendable@^1.0.1": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-plain-object" "^2.0.4" -ini@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +"is-extglob@^2.1.0", "is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" -interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" -ionicons@~2.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ionicons/-/ionicons-2.0.1.tgz#ca398113293ea870244f538f0aabbd4b5b209a3e" - -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" +"is-glob@^3.1.0": + "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + "version" "3.1.0" dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + "is-extglob" "^2.1.0" -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" dependencies: - builtin-modules "^1.0.0" + "is-extglob" "^2.1.1" -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" +"is-number-object@^1.0.4": + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + "has-tostringtag" "^1.0.0" -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" +"is-number@^3.0.0": + "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + "version" "3.0.0" dependencies: - number-is-nan "^1.0.0" + "kind-of" "^3.0.2" -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" - dependencies: - number-is-nan "^1.0.0" +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" -is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" +"is-path-cwd@^2.0.0": + "integrity" "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + "version" "2.2.0" -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" +"is-path-in-cwd@^2.0.0": + "integrity" "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" + "version" "2.1.0" dependencies: - kind-of "^3.0.2" + "is-path-inside" "^2.1.0" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" +"is-path-inside@^2.1.0": + "integrity" "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" + "version" "2.1.0" dependencies: - is-path-inside "^1.0.0" + "path-is-inside" "^1.0.2" -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" +"is-plain-object@^2.0.1", "is-plain-object@^2.0.3", "is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" dependencies: - path-is-inside "^1.0.1" - -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" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + "isobject" "^3.0.1" -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" +"is-regex@^1.0.4", "is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" dependencies: - is-unc-path "^0.1.1" + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" +"is-resolvable@^1.0.0": + "integrity" "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + "version" "1.1.0" -is-unc-path@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.1.tgz#ab2533d77ad733561124c3dc0f5cd8b90054c86b" +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" dependencies: - unc-path-regex "^0.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + "call-bind" "^1.0.2" -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" +"is-stream@^1.1.0": + "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" -is@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is/-/is-3.1.0.tgz#2945d205d691cbfe4833e3f8a11c8ae94673f2a7" - -isarray@~1.0.0, isarray@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -jquery-minicolors@^2.1.10: - version "2.1.10" - resolved "https://registry.yarnpkg.com/jquery-minicolors/-/jquery-minicolors-2.1.10.tgz#b29eea541d9a32b4e26923168fb2c16271867379" - dependencies: - jquery ">= 1.7.x" - -jquery-serializeobject@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jquery-serializeobject/-/jquery-serializeobject-1.0.0.tgz#7336d7c505e18bb2378446eb195db9fb4331aea6" - -jquery-sparkline@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/jquery-sparkline/-/jquery-sparkline-2.3.2.tgz#00cb91fee58a4c4651235b70f59f7e903e07b9e7" - -"jquery@^1.8.3 || ^2.0", jquery@~2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" - -"jquery@>= 1.7.x": - version "3.1.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.1.1.tgz#347c1c21c7e004115e0a4da32cece041fad3c8a3" - -js-base64@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" - -jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -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" - -jsonpointer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" - -jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" - dependencies: - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kind-of@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" - dependencies: - is-buffer "^1.0.2" - -laravel-elixir@~6.0.0-9: - version "6.0.0-11" - resolved "https://registry.yarnpkg.com/laravel-elixir/-/laravel-elixir-6.0.0-11.tgz#107c6be07d2e8f10612bf656d7ded51355a8f59b" - dependencies: - clean-css "^3.4.12" - cli-table "^0.3.1" - del "^2.2.0" - glob "^7.0.3" - gulp-autoprefixer "^3.1.0" - gulp-batch "^1.0.5" - gulp-concat "^2.6.0" - gulp-if "^2.0.0" - gulp-less "^3.0.5" - gulp-load-plugins "^1.2.2" - gulp-notify "^2.2.0" - gulp-rename "^1.2.2" - gulp-rev "^7.0.0" - gulp-rev-replace "^0.4.3" - gulp-sass "^2.3.1" - gulp-shell "^0.5.2" - gulp-sourcemaps "^1.6.0" - gulp-uglify "^1.5.3" - gulp-util "^3.0.7" - parse-filepath "^1.0.1" - path "^0.12.7" - q "^1.4.1" - require-dir "^0.3.0" - run-sequence "^1.1.5" - underscore "^1.8.3" - vinyl-map "^1.0.1" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lazy-debug-legacy@0.0.X: - version "0.0.1" - resolved "https://registry.yarnpkg.com/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz#537716c0776e4cf79e3ed1b621f7658c2911b1b1" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -less@^2.6.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.1.tgz#6cbfea22b3b830304e9a5fb371d54fa480c9d7cf" + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-typed-array@^1.1.10", "is-typed-array@^1.1.12", "is-typed-array@^1.1.9": + "integrity" "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==" + "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + "version" "1.1.12" + dependencies: + "which-typed-array" "^1.1.11" + +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-windows@^1.0.0", "is-windows@^1.0.1", "is-windows@^1.0.2": + "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + "version" "1.0.2" + +"is-wsl@^1.1.0": + "integrity" "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + "version" "1.1.0" + +"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@^2.0.5": + "integrity" "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + "version" "2.0.5" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^2.0.0": + "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "isarray" "1.0.0" + +"isobject@^3.0.0", "isobject@^3.0.1": + "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"jest-worker@^25.4.0": + "integrity" "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz" + "version" "25.5.0" + dependencies: + "merge-stream" "^2.0.0" + "supports-color" "^7.0.0" + +"jquery-minicolors@^2.1.10": + "integrity" "sha1-sp7qVB2aMrTiaSMWj7LBYnGGc3k=" + "resolved" "https://registry.npmjs.org/jquery-minicolors/-/jquery-minicolors-2.1.10.tgz" + "version" "2.1.10" + dependencies: + "jquery" ">= 1.7.x" + +"jquery-serializeobject@^1.0.0": + "integrity" "sha1-czbXxQXhi7I3hEbrGV25+0MxrqY=" + "resolved" "https://registry.npmjs.org/jquery-serializeobject/-/jquery-serializeobject-1.0.0.tgz" + "version" "1.0.0" + +"jquery-sparkline@^2.4.0": + "integrity" "sha1-G+i3twTdOFcVJwiu+x1KSzpp+zM=" + "resolved" "https://registry.npmjs.org/jquery-sparkline/-/jquery-sparkline-2.4.0.tgz" + "version" "2.4.0" + +"jquery@^3.4.0", "jquery@>= 1.7.x": + "integrity" "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + "resolved" "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz" + "version" "3.4.1" + +"js-tokens@^3.0.2": + "integrity" "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + "version" "3.0.2" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"jsesc@~0.5.0": + "integrity" "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" + +"json-parse-better-errors@^1.0.1", "json-parse-better-errors@^1.0.2": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"json5@^2.1.2": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" + +"json5@^2.2.3": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" + +"jsonfile@^4.0.0": + "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - mime "^1.2.11" - mkdirp "^0.5.0" - promise "^7.1.1" - source-map "^0.5.3" - -liftoff@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" - dependencies: - extend "^3.0.0" - findup-sync "^0.4.2" - fined "^1.0.1" - flagged-respawn "^0.3.2" - lodash.isplainobject "^4.0.4" - lodash.isstring "^4.0.1" - lodash.mapvalues "^4.4.0" - rechoir "^0.6.2" - resolve "^1.1.7" + "graceful-fs" "^4.1.6" + +"killable@^1.0.1": + "integrity" "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "resolved" "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" + "version" "1.0.1" + +"kind-of@^3.0.2", "kind-of@^3.0.3", "kind-of@^3.2.0": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^4.0.0": + "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^5.0.0": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^6.0.0": + "integrity" "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz" + "version" "6.0.2" + +"kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"laravel-mix-purgecss@^4.2.0": + "integrity" "sha512-hzphHnhK3xPiv19QhCnhuvSUK4vmPB/76S6EHDb3WPa6Oz7aOlBREXLhg57ejiisy9GdVKw5DZjYwk3JLjAkYA==" + "resolved" "https://registry.npmjs.org/laravel-mix-purgecss/-/laravel-mix-purgecss-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "glob-all" "^3.1.0" + "purgecss-webpack-plugin" "^1.3.0" + +"laravel-mix@^4.0.0||^5.0.0", "laravel-mix@^5.0.9": + "integrity" "sha512-1WCJiHimTRW3KlxcabRTco0q+bo4uKPaFTkc6cJ/bLEq4JT1aPkojoauUK7+PyiIlDJncw0Nt2MtDrv5C6j5IQ==" + "resolved" "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.9.tgz" + "version" "5.0.9" + dependencies: + "@babel/core" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-runtime" "^7.2.0" + "@babel/preset-env" "^7.2.0" + "@babel/runtime" "^7.2.0" + "autoprefixer" "^9.4.2" + "babel-loader" "^8.0.4" + "babel-merge" "^2.0.1" + "chokidar" "^2.0.3" + "clean-css" "^4.1.3" + "collect.js" "^4.12.8" + "concat" "^1.0.3" + "css-loader" "^1.0.1" + "dotenv" "^6.2.0" + "dotenv-expand" "^4.2.0" + "extract-text-webpack-plugin" "v4.0.0-beta.0" + "file-loader" "^2.0.0" + "friendly-errors-webpack-plugin" "^1.6.1" + "fs-extra" "^7.0.1" + "glob" "^7.1.2" + "html-loader" "^0.5.5" + "imagemin" "^6.0.0" + "img-loader" "^3.0.0" + "lodash" "^4.17.15" + "md5" "^2.2.1" + "optimize-css-assets-webpack-plugin" "^5.0.1" + "postcss-loader" "^3.0.0" + "style-loader" "^0.23.1" + "terser" "^3.11.0" + "terser-webpack-plugin" "^2.2.3" + "vue-loader" "^15.4.2" + "webpack" "^4.36.1" + "webpack-cli" "^3.1.2" + "webpack-dev-server" "^3.1.14" + "webpack-merge" "^4.1.0" + "webpack-notifier" "^1.5.1" + "yargs" "^15.4.1" + +"last-call-webpack-plugin@^3.0.0": + "integrity" "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==" + "resolved" "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "lodash" "^4.17.5" + "webpack-sources" "^1.1.0" + +"lcid@^2.0.0": + "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" + "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "invert-kv" "^2.0.0" "livestamp@git+https://github.com/mattbradley/livestampjs.git#develop": - version "2.0.0" - resolved "git+https://github.com/mattbradley/livestampjs.git#7572242af2fd89f602485d1ef4ea4a6fadeff080" - -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" - 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" - -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.assignwith@^4.0.7: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" - -lodash.clonedeep@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isempty@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - -lodash.isplainobject@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.mapvalues@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - -lodash@^4.0.0, lodash@^4.12.0: - version "4.16.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" - -lodash@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" - -lodash@~4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" - -lodash@4.11.2: - version "4.11.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.11.2.tgz#d6b4338b110a58e21dae5cebcfdbbfd2bc4cdb3b" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.1.tgz#1343955edaf2e37d9b9e7ee7241e27c4b9fb72be" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -map-cache@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -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" - -marked-terminal@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.6.2.tgz#44c128d69b5d9776c848314cdf69d4ec96322973" - dependencies: - cardinal "^1.0.0" - chalk "^1.0.0" - cli-table "^0.3.1" - lodash.assign "^4.2.0" - node-emoji "^1.3.1" - -marked@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - 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-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.0.tgz#9cfd156fef35421e2b5403ce11dc6eb1962b026e" - dependencies: - readable-stream "^2.0.1" - -"messenger@git+https://github.com/HubSpot/messenger.git": - version "1.5.0" - resolved "git+https://github.com/HubSpot/messenger.git#8fbf20e5e01070e65d6ca4f2314ab0928e8682fe" - -micromatch@^2.3.7, micromatch@^2.3.8: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.24.0: - version "1.24.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" - -mime-types@^2.1.11, mime-types@~2.1.7: - version "2.1.12" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" - dependencies: - mime-db "~1.24.0" - -mime@^1.2.11: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -minimatch@^2.0.1: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.0, "minimatch@2 || 3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimatch@~0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0": - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -modify-filename@^1.0.0, modify-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" - -moment-timezone@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06" - dependencies: - moment ">= 2.6.0" - -moment@^2.10, moment@^2.10.6, moment@^2.13.0, "moment@>= 2.6.0": - version "2.15.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.15.1.tgz#e979c2a29e22888e60f396f2220a6118f85cd94c" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - -nan@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" - -natives@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" - -new-from@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/new-from/-/new-from-0.0.3.tgz#1c4ad13613de3e15d6321b70ed5c23937ea25e67" - dependencies: - readable-stream "~1.1.8" - -next-tick@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - -node-emoji@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.4.1.tgz#c9fa0cf91094335bcb967a6f42b2305c15af2ebc" - dependencies: - string.prototype.codepointat "^0.2.0" - -node-gyp@^3.3.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3" - osenv "0" - path-array "^1.0.0" - request "2" - rimraf "2" - semver "2.x || 3.x || 4 || 5" - tar "^2.0.0" - which "1" - -node-notifier@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" - dependencies: - cli-usage "^0.1.1" - growly "^1.2.0" - lodash.clonedeep "^3.0.0" - minimist "^1.1.1" - semver "^5.1.0" - shellwords "^0.1.0" - which "^1.0.5" - -node-sass@^3.4.2: - version "3.10.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.10.1.tgz#c535b2e1a5439240591e06d7308cb663820d616c" - 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.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "^2.61.0" - sass-graph "^2.1.1" - -node-uuid@~1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - -node.extend@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.6.tgz#a7b882c82d6c93a4863a5504bd5de8ec86258b96" - dependencies: - is "^3.1.0" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -npmlog@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.6.0" - set-blocking "~2.0.0" - -"npmlog@0 || 1 || 2 || 3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.6.0" - set-blocking "~2.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -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" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object.omit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" - dependencies: - for-own "^0.1.3" - is-extendable "^0.1.1" - -once@^1.3.0, once@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - -orchestrator@^0.3.0: - version "0.3.7" - resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.7.tgz#c45064e22c5a2a7b99734f409a95ffedc7d3c3df" - dependencies: - end-of-stream "~0.1.5" - sequencify "~0.0.7" - stream-consume "~0.1.0" - -ordered-read-streams@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.3, osenv@0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -parse-filepath@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" - dependencies: - is-absolute "^0.2.3" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -path-array@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" + "resolved" "git+ssh://git@github.com/mattbradley/livestampjs.git#7572242af2fd89f602485d1ef4ea4a6fadeff080" + "version" "2.0.0" + +"loader-runner@^2.4.0": + "integrity" "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + "version" "2.4.0" + +"loader-utils@^1.0.2", "loader-utils@^1.1.0", "loader-utils@^1.2.3", "loader-utils@^1.4.0": + "integrity" "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + +"loader-utils@^2.0.0": + "integrity" "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" + "version" "2.0.4" dependencies: - array-index "^1.0.0" + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^2.1.2" + +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" dependencies: - pinkie-promise "^2.0.0" - -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" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - dependencies: - path-root-regex "^0.1.0" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + "p-locate" "^4.1.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.memoize@^4.1.2": + "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.uniq@^4.5.0": + "integrity" "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + "version" "4.5.0" + +"lodash@^4.17.11", "lodash@^4.17.13", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.5": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"loglevel@^1.6.8": + "integrity" "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz" + "version" "1.8.1" + +"lower-case@^1.1.1": + "integrity" "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + "version" "1.1.4" + +"lru-cache@^4.1.2": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"make-dir@^1.0.0": + "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "pify" "^3.0.0" + +"make-dir@^2.0.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.2": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"map-age-cleaner@^0.1.1": + "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" + "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "p-defer" "^1.0.0" + +"map-cache@^0.2.2": + "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + "version" "0.2.2" + +"map-visit@^1.0.0": + "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "object-visit" "^1.0.0" + +"md5.js@^1.3.4": + "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" + "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"md5@^2.2.1": + "integrity" "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=" + "resolved" "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "charenc" "~0.0.1" + "crypt" "~0.0.1" + "is-buffer" "~1.1.1" + +"mdn-data@2.0.14": + "integrity" "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + "version" "2.0.14" + +"mdn-data@2.0.4": + "integrity" "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + "version" "2.0.4" + +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"mem@^4.0.0": + "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" + "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + "version" "4.3.0" dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" + "map-age-cleaner" "^0.1.1" + "mimic-fn" "^2.0.0" + "p-is-promise" "^2.0.0" -path@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" +"memory-fs@^0.4.1": + "integrity" "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==" + "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + "version" "0.4.1" dependencies: - process "^0.11.1" - util "^0.10.3" + "errno" "^0.1.3" + "readable-stream" "^2.0.1" -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - 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" - -postcss-value-parser@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss@^5.0.4, postcss@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.4.tgz#8eb4bee3e5c4e091585b116df32d8db24a535f21" +"memory-fs@^0.5.0": + "integrity" "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==" + "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" + "version" "0.5.0" dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.1.2" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + "errno" "^0.1.3" + "readable-stream" "^2.0.1" -pretty-hrtime@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.2.tgz#70ca96f4d0628a443b918758f79416a9a7bc9fa8" +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +"merge-source-map@^1.1.0": + "integrity" "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==" + "resolved" "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "source-map" "^0.6.1" -process@^0.11.1: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.2.3": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" -promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" - dependencies: - asap "~2.0.3" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -q@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" - -randomatic@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" - -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" - dependencies: - find-up "^1.0.0" - read-pkg "^1.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" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@~2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.2: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~1.1.8, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.0, readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - 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" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redeyed@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.0.tgz#6ce25045c9e1f9b28c0ae73ce2960c8cb48184b1" - dependencies: - esprima "~2.7.0" - -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" - dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.5.4" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.5.4.tgz#64ec0c91e0f4b475f90d5b643651e3e6e5b6c2d5" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -request@^2.61.0, request@2: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -require-dir@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-0.3.1.tgz#b5a8e28bae0343bb0d0cc38ab1f531e1931b264a" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-url@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@^1.1.6, resolve@^1.1.7, resolve@1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -rev-hash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rev-hash/-/rev-hash-1.0.0.tgz#96993959ea9bfb1c59b13adf02ac2e34bb373603" - -rev-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rev-path/-/rev-path-1.0.0.tgz#d4ccb436ac3370c4607175ce88eafc5c65c5d653" - dependencies: - modify-filename "^1.0.0" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@^2.2.8, rimraf@2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - dependencies: - glob "^7.0.5" - -run-sequence@^1.1.5: - version "1.2.2" - resolved "https://registry.yarnpkg.com/run-sequence/-/run-sequence-1.2.2.tgz#5095a0bebe98733b0140bd08dd80ec030ddacdeb" - dependencies: - chalk "*" - gulp-util "*" - -sass-graph@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - yargs "^4.7.1" - -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -semver@^5.1.0, "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5": - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -sequencify@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" - -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" - -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" - -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - -signal-exit@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -sortablejs@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.4.2.tgz#10df66054e1d1dcb538d7eaedaeaf692232c8d0d" - -source-map-resolve@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" - dependencies: - atob "~1.1.0" - resolve-url "~0.2.1" - source-map-url "~0.3.0" - urix "~0.1.0" - -source-map-url@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" - -source-map@^0.1.38: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@0.X: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -source-map@0.4.x: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" +"messenger@git+https://github.com/HubSpot/messenger.git": + "resolved" "git+ssh://git@github.com/HubSpot/messenger.git#b1b176185276464f45bf6be3d28c4064a82198c7" + "version" "1.5.0" + +"methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^3.0.4", "micromatch@^3.1.10", "micromatch@^3.1.4": + "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + "version" "3.1.10" + 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": + "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" + "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "bn.js" "^4.0.0" + "brorand" "^1.0.1" + +"mime-db@>= 1.43.0 < 2", "mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@~2.1.17", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mime@^2.4.4": + "integrity" "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + "version" "2.6.0" + +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^2.0.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-crypto-utils@^1.0.1": + "integrity" "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^0.1.0": + "integrity" "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz" + "version" "0.1.0" + +"minimist@^1.2.0", "minimist@^1.2.6": + "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + "version" "1.2.8" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.2": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.1": + "integrity" "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"mississippi@^3.0.0": + "integrity" "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==" + "resolved" "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" + "version" "3.0.0" + 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": + "integrity" "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==" + "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "for-in" "^1.0.2" + "is-extendable" "^1.0.1" + +"mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@^0.5.6", "mkdirp@~0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"moment@^2.10.2", "moment@^2.24.0": + "integrity" "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz" + "version" "2.24.0" + +"move-concurrently@^1.0.1": + "integrity" "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==" + "resolved" "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" + "version" "1.0.1" + 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.1.1": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@2.0.0": + "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"multicast-dns-service-types@^1.1.0": + "integrity" "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" + "resolved" "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" + "version" "1.1.0" + +"multicast-dns@^6.0.1": + "integrity" "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==" + "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" + "version" "6.2.3" + dependencies: + "dns-packet" "^1.3.1" + "thunky" "^1.0.2" + +"nan@^2.12.1": + "integrity" "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz" + "version" "2.18.0" + +"nanoid@^3.3.6": + "integrity" "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" + "version" "3.3.6" + +"nanomatch@^1.2.9": + "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" + "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + "version" "1.2.13" + 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" + +"negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"neo-async@^2.5.0", "neo-async@^2.6.1": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"no-case@^2.2.0": + "integrity" "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==" + "resolved" "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "lower-case" "^1.1.1" + +"node-forge@^0.10.0": + "integrity" "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" + "version" "0.10.0" + +"node-libs-browser@^2.2.1": + "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" + "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + "version" "2.2.1" + 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-notifier@^5.1.2": + "integrity" "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==" + "resolved" "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz" + "version" "5.4.0" + dependencies: + "growly" "^1.3.0" + "is-wsl" "^1.1.0" + "semver" "^5.5.0" + "shellwords" "^0.1.1" + "which" "^1.3.0" + +"node-releases@^2.0.13": + "integrity" "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + "version" "2.0.13" + +"normalize-path@^2.1.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-range@^0.1.2": + "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + "version" "0.1.2" + +"normalize-url@^3.0.0": + "integrity" "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" + "version" "3.3.0" + +"npm-run-path@^2.0.0": + "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"nth-check@^1.0.2": + "integrity" "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "boolbase" "~1.0.0" + +"num2fraction@^1.2.2": + "integrity" "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" + "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" + "version" "1.2.2" + +"number-is-nan@^1.0.0": + "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-copy@^0.1.0": + "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" + "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "copy-descriptor" "^0.1.0" + "define-property" "^0.2.5" + "kind-of" "^3.0.3" + +"object-inspect@^1.13.1", "object-inspect@^1.9.0": + "integrity" "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + "version" "1.13.1" + +"object-is@^1.0.1": + "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" + "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-visit@^1.0.0": + "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "isobject" "^3.0.0" + +"object.assign@^4.1.4": + "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + "version" "4.1.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" + "object-keys" "^1.1.1" + +"object.getownpropertydescriptors@^2.1.0": + "integrity" "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==" + "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz" + "version" "2.1.7" + dependencies: + "array.prototype.reduce" "^1.0.6" + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + "safe-array-concat" "^1.0.0" + +"object.omit@^3.0.0": + "integrity" "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==" + "resolved" "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "is-extendable" "^1.0.0" + +"object.pick@^1.3.0": + "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "isobject" "^3.0.1" + +"object.values@^1.1.0": + "integrity" "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==" + "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + +"obuf@^1.0.0", "obuf@^1.1.2": + "integrity" "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "resolved" "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + "version" "1.1.2" + +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "ee-first" "1.1.1" + +"on-headers@~1.0.2": + "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + "version" "1.0.2" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"opn@^5.5.0": + "integrity" "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==" + "resolved" "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "is-wsl" "^1.1.0" + +"optimize-css-assets-webpack-plugin@^5.0.1": + "integrity" "sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q==" + "resolved" "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz" + "version" "5.0.8" + dependencies: + "cssnano" "^4.1.10" + "last-call-webpack-plugin" "^3.0.0" + +"os-browserify@^0.3.0": + "integrity" "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + "version" "0.3.0" + +"os-locale@^3.1.0": + "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "execa" "^1.0.0" + "lcid" "^2.0.0" + "mem" "^4.0.0" + +"p-defer@^1.0.0": + "integrity" "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + "version" "1.0.0" + +"p-finally@^1.0.0": + "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-is-promise@^2.0.0": + "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + "version" "2.1.0" + +"p-limit@^2.0.0", "p-limit@^2.2.0", "p-limit@^2.3.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-map@^2.0.0": + "integrity" "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" + "version" "2.1.0" + +"p-map@^3.0.0": + "integrity" "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"p-pipe@^1.1.0": + "integrity" "sha512-IA8SqjIGA8l9qOksXJvsvkeQ+VGb0TAzNCzvKvz9wt5wWLqfWbV6fXy43gpR2L4Te8sOq3S+Ql9biAaMKPdbtw==" + "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz" + "version" "1.2.0" + +"p-retry@^3.0.1": + "integrity" "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==" + "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "retry" "^0.12.0" + +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"pako@~1.0.5": + "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + "version" "1.0.11" + +"parallel-transform@^1.1.0": + "integrity" "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==" + "resolved" "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "cyclist" "^1.0.1" + "inherits" "^2.0.3" + "readable-stream" "^2.1.5" + +"param-case@2.1.x": + "integrity" "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==" + "resolved" "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "no-case" "^2.2.0" + +"parse-asn1@^5.0.0", "parse-asn1@^5.1.6": + "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" + "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + "version" "5.1.6" + 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@^4.0.0": + "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + +"parse-passwd@^1.0.0": + "integrity" "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + "version" "1.0.0" + +"parseurl@~1.3.2", "parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"pascalcase@^0.1.1": + "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + "version" "0.1.1" + +"path-browserify@0.0.1": + "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + "version" "0.0.1" + +"path-dirname@^1.0.0": + "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + "version" "1.0.2" + +"path-exists@^3.0.0": + "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.2": + "integrity" "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^3.0.0": + "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "pify" "^3.0.0" + +"pbkdf2@^3.0.3": + "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" + "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + "version" "3.1.2" + 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" + +"picocolors@^0.2.1": + "integrity" "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + "version" "0.2.1" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pify@^2.0.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"pinkie-promise@^2.0.0": + "integrity" "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"pkg-dir@^3.0.0": + "integrity" "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "find-up" "^3.0.0" + +"pkg-dir@^4.1.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"portfinder@^1.0.26": + "integrity" "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==" + "resolved" "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" + "version" "1.0.32" + dependencies: + "async" "^2.6.4" + "debug" "^3.2.7" + "mkdirp" "^0.5.6" + +"posix-character-classes@^0.1.0": + "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + "version" "0.1.1" + +"postcss-calc@^7.0.1": + "integrity" "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==" + "resolved" "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz" + "version" "7.0.5" + dependencies: + "postcss" "^7.0.27" + "postcss-selector-parser" "^6.0.2" + "postcss-value-parser" "^4.0.2" + +"postcss-colormin@^4.0.3": + "integrity" "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==" + "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" + "version" "4.0.3" + 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": + "integrity" "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==" + "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-discard-comments@^4.0.2": + "integrity" "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==" + "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-duplicates@^4.0.2": + "integrity" "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==" + "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-empty@^4.0.1": + "integrity" "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==" + "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-discard-overridden@^4.0.1": + "integrity" "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==" + "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-load-config@^2.0.0": + "integrity" "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==" + "resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "cosmiconfig" "^5.0.0" + "import-cwd" "^2.0.0" + +"postcss-loader@^3.0.0": + "integrity" "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==" + "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz" + "version" "3.0.0" + 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": + "integrity" "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==" + "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" + "version" "4.0.11" + 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": + "integrity" "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==" + "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" + "version" "4.0.3" + 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": + "integrity" "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==" + "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-minify-gradients@^4.0.2": + "integrity" "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==" + "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==" + "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==" + "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==" + "resolved" "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "postcss" "^6.0.1" + +"postcss-modules-local-by-default@^1.2.0": + "integrity" "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==" + "resolved" "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "css-selector-tokenizer" "^0.7.0" + "postcss" "^6.0.1" + +"postcss-modules-scope@^1.1.0": + "integrity" "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==" + "resolved" "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "css-selector-tokenizer" "^0.7.0" + "postcss" "^6.0.1" + +"postcss-modules-values@^1.3.0": + "integrity" "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==" + "resolved" "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "icss-replace-symbols" "^1.1.0" + "postcss" "^6.0.1" + +"postcss-normalize-charset@^4.0.1": + "integrity" "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==" + "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "postcss" "^7.0.0" + +"postcss-normalize-display-values@^4.0.2": + "integrity" "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==" + "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-match" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-positions@^4.0.2": + "integrity" "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==" + "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "has" "^1.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-timing-functions@^4.0.2": + "integrity" "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==" + "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "cssnano-util-get-match" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-unicode@^4.0.1": + "integrity" "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "browserslist" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-normalize-url@^4.0.1": + "integrity" "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" + "version" "4.0.1" + 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": + "integrity" "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-ordered-values@^4.1.2": + "integrity" "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==" + "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "cssnano-util-get-arguments" "^4.0.0" + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + +"postcss-reduce-initial@^4.0.3": + "integrity" "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==" + "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "caniuse-api" "^3.0.0" + "has" "^1.0.0" + "postcss" "^7.0.0" + +"postcss-reduce-transforms@^4.0.2": + "integrity" "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==" + "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" + "version" "3.1.2" + 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": + "integrity" "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" + "version" "6.0.13" + dependencies: + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" + +"postcss-svgo@^4.0.3": + "integrity" "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==" + "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "postcss" "^7.0.0" + "postcss-value-parser" "^3.0.0" + "svgo" "^1.0.0" + +"postcss-unique-selectors@^4.0.1": + "integrity" "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==" + "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "alphanum-sort" "^1.0.0" + "postcss" "^7.0.0" + "uniqs" "^2.0.0" + +"postcss-value-parser@^3.0.0": + "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + "version" "3.3.1" + +"postcss-value-parser@^3.3.0": + "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + "version" "3.3.1" + +"postcss-value-parser@^4.0.2", "postcss-value-parser@^4.1.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" + +"postcss@^6.0.1": + "integrity" "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" + "version" "6.0.23" + dependencies: + "chalk" "^2.4.1" + "source-map" "^0.6.1" + "supports-color" "^5.4.0" + +"postcss@^6.0.23": + "integrity" "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" + "version" "6.0.23" + 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.36": + "integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + "version" "7.0.39" + dependencies: + "picocolors" "^0.2.1" + "source-map" "^0.6.1" + +"postcss@^8.4.14": + "integrity" "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" + "version" "8.4.31" + dependencies: + "nanoid" "^3.3.6" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" + +"prettier@^1.18.2 || ^2.0.0": + "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + "version" "2.8.8" + +"private@~0.1.5": + "integrity" "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + "resolved" "https://registry.npmjs.org/private/-/private-0.1.8.tgz" + "version" "0.1.8" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz" + "version" "2.0.0" + +"process@^0.11.10": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise@^7.3.1": + "integrity" "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" + "version" "7.3.1" + dependencies: + "asap" "~2.0.3" + +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" + +"prr@~1.0.1": + "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + "version" "1.0.1" + +"pseudomap@^1.0.2": + "integrity" "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" + +"public-encrypt@^4.0.0": + "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" + "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + "version" "4.0.3" + 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": + "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" + "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"pumpify@^1.3.3": + "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" + "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "duplexify" "^3.6.0" + "inherits" "^2.0.3" + "pump" "^2.0.0" + +"punycode@^1.2.4", "punycode@^1.4.1": + "integrity" "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "version" "1.4.1" + +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"purgecss-webpack-plugin@^1.3.0": + "integrity" "sha512-ZSU6lok2DuDBuR7VCte5V12eke0Tx8xsCKxMbOnMfuJNPccPGv4jflRUm2Wvr2yGB8lFzKNZaTWaSk9g3kCv5A==" + "resolved" "https://registry.npmjs.org/purgecss-webpack-plugin/-/purgecss-webpack-plugin-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "purgecss" "^1.3.0" + "webpack-sources" "^1.3.0" + +"purgecss@^1.3.0": + "integrity" "sha512-0UMnr8aUsPO7RbzAT72UELRvwMHhadtuunDm7rcgRS6b8pCVO8yglIqikiYFwQk2XP606mk+GpjI1G74Auxgtg==" + "resolved" "https://registry.npmjs.org/purgecss/-/purgecss-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "glob" "^7.1.3" + "postcss" "^7.0.14" + "postcss-selector-parser" "^6.0.0" + "yargs" "^13.2.2" + +"q@^1.1.2": + "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + "version" "1.5.1" + +"qs@^6.11.2": + "integrity" "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" + "version" "6.11.2" + dependencies: + "side-channel" "^1.0.4" + +"qs@6.11.0": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "side-channel" "^1.0.4" + +"querystring-es3@^0.2.0": + "integrity" "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" + "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + "version" "0.2.1" + +"querystringify@^2.1.1": + "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + "version" "2.2.0" + +"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"randomfill@^1.0.3": + "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" + "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "randombytes" "^2.0.5" + "safe-buffer" "^5.1.0" + +"range-parser@^1.2.1", "range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "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", "readable-stream@1 || 2": + "integrity" "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz" + "version" "2.3.6" + 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": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.6.0": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.6.2": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readdirp@^2.2.1": + "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "graceful-fs" "^4.1.11" + "micromatch" "^3.1.10" + "readable-stream" "^2.0.2" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"recast@~0.11.12": + "integrity" "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==" + "resolved" "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz" + "version" "0.11.23" + dependencies: + "ast-types" "0.9.6" + "esprima" "~3.1.0" + "private" "~0.1.5" + "source-map" "~0.5.0" + +"regenerate-unicode-properties@^10.1.0": + "integrity" "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" + "version" "10.1.1" + dependencies: + "regenerate" "^1.4.2" + +"regenerate@^1.4.2": + "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + "version" "1.4.2" + +"regenerator-runtime@^0.14.0": + "integrity" "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" + "version" "0.14.0" + +"regenerator-transform@^0.15.2": + "integrity" "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + "version" "0.15.2" + dependencies: + "@babel/runtime" "^7.8.4" + +"regex-not@^1.0.0", "regex-not@^1.0.2": + "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" + "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "extend-shallow" "^3.0.2" + "safe-regex" "^1.1.0" + +"regexp.prototype.flags@^1.2.0", "regexp.prototype.flags@^1.5.1": + "integrity" "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "set-function-name" "^2.0.0" + +"regexpu-core@^5.3.1": + "integrity" "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" + "version" "5.3.2" + dependencies: + "@babel/regjsgen" "^0.8.0" + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.1.0" + "regjsparser" "^0.9.1" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.1.0" + +"regjsparser@^0.9.1": + "integrity" "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "jsesc" "~0.5.0" + +"relateurl@0.2.x": + "integrity" "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + "resolved" "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + "version" "0.2.7" + +"remove-trailing-separator@^1.0.1": + "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + "version" "1.1.0" + +"repeat-element@^1.1.2": + "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + "version" "1.1.3" + +"repeat-string@^1.6.1": + "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" + +"replace-ext@^1.0.0": + "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + "version" "1.0.1" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"requires-port@^1.0.0": + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resolve-cwd@^2.0.0": + "integrity" "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "resolve-from" "^3.0.0" + +"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": + "integrity" "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==" + "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "expand-tilde" "^2.0.0" + "global-modules" "^1.0.0" + +"resolve-from@^3.0.0": + "integrity" "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + "version" "3.0.0" + +"resolve-url@^0.2.1": + "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + "version" "0.2.1" + +"resolve@^1.14.2": + "integrity" "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + "version" "1.22.8" + dependencies: + "is-core-module" "^2.13.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"ret@~0.1.10": + "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + "version" "0.1.15" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"rgb-regex@^1.0.1": + "integrity" "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" + "resolved" "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" + "version" "1.0.1" + +"rgba-regex@^1.0.0": + "integrity" "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" + "resolved" "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" + "version" "1.0.0" + +"rimraf@^2.5.4", "rimraf@^2.6.3", "rimraf@^2.7.1": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"ripemd160@^2.0.0", "ripemd160@^2.0.1": + "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" + "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + +"run-queue@^1.0.0", "run-queue@^1.0.3": + "integrity" "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==" + "resolved" "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "aproba" "^1.1.1" + +"safe-array-concat@^1.0.0", "safe-array-concat@^1.0.1": + "integrity" "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==" + "resolved" "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.2.1" + "has-symbols" "^1.0.3" + "isarray" "^2.0.5" + +"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@^5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@^5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-regex-test@^1.0.0": + "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" + "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.3" + "is-regex" "^1.1.4" + +"safe-regex@^1.1.0": + "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ret" "~0.1.10" + +"safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sass-loader@^8.0.2": + "integrity" "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==" + "resolved" "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz" + "version" "8.0.2" + 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" + +"sass@^1.3.0", "sass@^1.69.5": + "integrity" "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==" + "resolved" "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz" + "version" "1.69.5" + dependencies: + "chokidar" ">=3.0.0 <4.0.0" + "immutable" "^4.0.0" + "source-map-js" ">=0.6.2 <2.0.0" + +"sax@~1.2.4": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" + +"schema-utils@^0.4.5": + "integrity" "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz" + "version" "0.4.7" + dependencies: + "ajv" "^6.1.0" + "ajv-keywords" "^3.1.0" + +"schema-utils@^1.0.0": + "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "ajv" "^6.1.0" + "ajv-errors" "^1.0.0" + "ajv-keywords" "^3.1.0" + +"schema-utils@^2.6.1": + "integrity" "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "@types/json-schema" "^7.0.5" + "ajv" "^6.12.4" + "ajv-keywords" "^3.5.2" + +"schema-utils@^2.6.5": + "integrity" "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "@types/json-schema" "^7.0.5" + "ajv" "^6.12.4" + "ajv-keywords" "^3.5.2" + +"schema-utils@^2.6.6": + "integrity" "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "@types/json-schema" "^7.0.5" + "ajv" "^6.12.4" + "ajv-keywords" "^3.5.2" + +"select-hose@^2.0.0": + "integrity" "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "resolved" "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + "version" "2.0.0" + +"selfsigned@^1.10.8": + "integrity" "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==" + "resolved" "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz" + "version" "1.10.14" + dependencies: + "node-forge" "^0.10.0" + +"semver@^5.5.0", "semver@^5.6.0": + "integrity" "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz" + "version" "5.7.0" + +"semver@^6.0.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" + dependencies: + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" + +"serialize-javascript@^4.0.0": + "integrity" "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "randombytes" "^2.1.0" + +"serve-index@^1.9.1": + "integrity" "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==" + "resolved" "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "accepts" "~1.3.4" + "batch" "0.6.1" + "debug" "2.6.9" + "escape-html" "~1.0.3" + "http-errors" "~1.6.2" + "mime-types" "~2.1.17" + "parseurl" "~1.3.2" + +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" + +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-function-length@^1.1.1": + "integrity" "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==" + "resolved" "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "define-data-property" "^1.1.1" + "get-intrinsic" "^1.2.1" + "gopd" "^1.0.1" + "has-property-descriptors" "^1.0.0" + +"set-function-name@^2.0.0": + "integrity" "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==" + "resolved" "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "define-data-property" "^1.0.1" + "functions-have-names" "^1.2.3" + "has-property-descriptors" "^1.0.0" + +"set-value@^0.4.3": + "integrity" "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "extend-shallow" "^2.0.1" + "is-extendable" "^0.1.1" + "is-plain-object" "^2.0.1" + "to-object-path" "^0.3.0" + +"set-value@^2.0.0": + "integrity" "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz" + "version" "2.0.0" + 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": + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + +"setprototypeof@1.1.0": + "integrity" "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + "version" "1.1.0" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"sha.js@^2.4.0", "sha.js@^2.4.8": + "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" + "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + "version" "2.4.11" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shebang-command@^1.2.0": + "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shellwords@^0.1.1": + "integrity" "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "resolved" "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" + "version" "0.1.1" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.0": + "integrity" "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + "version" "3.0.2" + +"simple-swizzle@^0.2.2": + "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" + "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "is-arrayish" "^0.3.1" + +"slash@^1.0.0": + "integrity" "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" + "resolved" "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + "version" "1.0.0" + +"snapdragon-node@^2.0.1": + "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" + "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "define-property" "^1.0.0" + "isobject" "^3.0.0" + "snapdragon-util" "^3.0.1" + +"snapdragon-util@^3.0.1": + "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" + "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^3.2.0" + +"snapdragon@^0.8.1": + "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" + "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + "version" "0.8.2" + 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.5.0": + "integrity" "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==" + "resolved" "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz" + "version" "1.6.1" + dependencies: + "debug" "^3.2.7" + "eventsource" "^2.0.2" + "faye-websocket" "^0.11.4" + "inherits" "^2.0.4" + "url-parse" "^1.5.10" + +"sockjs@^0.3.21": + "integrity" "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==" + "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + "version" "0.3.24" + dependencies: + "faye-websocket" "^0.11.3" + "uuid" "^8.3.2" + "websocket-driver" "^0.7.4" + +"sortablejs@^1.8.4": + "integrity" "sha512-Ot6bYJ6PoqPmpsqQYXjn1+RKrY2NWQvQt/o4jfd/UYwVWndyO5EPO8YHbnm5HIykf8ENsm4JUrdAvolPT86yYA==" + "resolved" "https://registry.npmjs.org/sortablejs/-/sortablejs-1.9.0.tgz" + "version" "1.9.0" + +"source-list-map@^2.0.0": + "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + "version" "2.0.1" + +"source-map-js@^1.0.2", "source-map-js@>=0.6.2 <2.0.0": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" + +"source-map-resolve@^0.5.0": + "integrity" "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==" + "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz" + "version" "0.5.2" + dependencies: + "atob" "^2.1.1" + "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.10", "source-map-support@~0.5.12": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-url@^0.4.0": + "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + "version" "0.4.0" + +"source-map@^0.5.6", "source-map@~0.5.0": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.6.1", "source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@~0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"spdy-transport@^3.0.0": + "integrity" "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==" + "resolved" "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + "version" "3.0.0" + 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": + "integrity" "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==" + "resolved" "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + "version" "4.0.2" + 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": + "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" + "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend-shallow" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"ssri@^6.0.1": + "integrity" "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "figgy-pudding" "^3.5.1" + +"ssri@^7.0.0": + "integrity" "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "figgy-pudding" "^3.5.1" + "minipass" "^3.1.1" + +"stable@^0.1.8": + "integrity" "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "resolved" "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + "version" "0.1.8" + +"stackframe@^1.0.4": + "integrity" "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" + "resolved" "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz" + "version" "1.0.4" + +"static-extend@^0.1.1": + "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" + "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "define-property" "^0.2.5" + "object-copy" "^0.1.0" + +"statuses@>= 1.4.0 < 2": + "integrity" "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" + +"stream-browserify@^2.0.1": + "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" + "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "inherits" "~2.0.1" + "readable-stream" "^2.0.2" + +"stream-each@^1.1.0": + "integrity" "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==" + "resolved" "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" + "version" "1.2.3" + dependencies: + "end-of-stream" "^1.1.0" + "stream-shift" "^1.0.0" + +"stream-http@^2.7.2": + "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" + "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + "version" "2.8.3" + 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": + "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + "version" "1.0.1" + +"string_decoder@^1.0.0", "string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-width@^1.0.1": + "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^2.0.0": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^3.0.0", "string-width@^3.1.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + 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": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string.prototype.trim@^1.2.8": + "integrity" "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==" + "resolved" "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + +"string.prototype.trimend@^1.0.7": + "integrity" "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + +"string.prototype.trimstart@^1.0.7": + "integrity" "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.2.0" + "es-abstract" "^1.22.1" + +"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^4.0.0": + "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + +"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-eof@^1.0.0": + "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + +"style-loader@^0.23.1": + "integrity" "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==" + "resolved" "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz" + "version" "0.23.1" + dependencies: + "loader-utils" "^1.1.0" + "schema-utils" "^1.0.0" + +"stylehacks@^4.0.0": + "integrity" "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==" + "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "browserslist" "^4.0.0" + "postcss" "^7.0.0" + "postcss-selector-parser" "^3.0.0" + +"supports-color@^2.0.0": + "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + "version" "2.0.0" + +"supports-color@^5.3.0", "supports-color@^5.4.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^6.1.0": + "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"svgo@^1.0.0": + "integrity" "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==" + "resolved" "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + "version" "1.3.2" + 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" + +"sweetalert2@^6.8.0": + "integrity" "sha512-8Otu1SlWGS/u3e31cOg+uqrwyoQbByEScKp7UupmCfwEZE9St3coO1e6CXv83YzZtzdDgowdK1hBPKPW7SRp4Q==" + "resolved" "https://registry.npmjs.org/sweetalert2/-/sweetalert2-6.11.5.tgz" + "version" "6.11.5" + +"tapable@^1.0.0", "tapable@^1.1.3": + "integrity" "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + "version" "1.1.3" + +"terser-webpack-plugin@^1.4.3": + "integrity" "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz" + "version" "1.4.5" + 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.2.3": + "integrity" "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz" + "version" "2.3.8" + 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@^3.11.0": + "integrity" "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==" + "resolved" "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz" + "version" "3.17.0" + dependencies: + "commander" "^2.19.0" + "source-map" "~0.6.1" + "source-map-support" "~0.5.10" + +"terser@^4.1.2": + "integrity" "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz" + "version" "4.8.1" + dependencies: + "commander" "^2.20.0" + "source-map" "~0.6.1" + "source-map-support" "~0.5.12" + +"terser@^4.6.12": + "integrity" "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz" + "version" "4.8.1" + dependencies: + "commander" "^2.20.0" + "source-map" "~0.6.1" + "source-map-support" "~0.5.12" + +"through@~2.3.6": + "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"thunky@^1.0.2": + "integrity" "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "resolved" "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + "version" "1.1.0" + +"timers-browserify@^2.0.4": + "integrity" "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==" + "resolved" "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" + "version" "2.0.12" + dependencies: + "setimmediate" "^1.0.4" + +"timsort@^0.3.0": + "integrity" "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" + "resolved" "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" + "version" "0.3.0" + +"to-arraybuffer@^1.0.0": + "integrity" "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + "version" "1.0.1" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-object-path@^0.3.0": + "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" + "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "kind-of" "^3.0.2" + +"to-regex-range@^2.1.0": + "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-regex@^3.0.1", "to-regex@^3.0.2": + "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" + "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "regex-not" "^1.0.2" + "safe-regex" "^1.1.0" + +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" + +"tty-browserify@0.0.0": + "integrity" "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" + "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + "version" "0.0.0" + +"type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"typed-array-buffer@^1.0.0": + "integrity" "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==" + "resolved" "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.2.1" + "is-typed-array" "^1.1.10" + +"typed-array-byte-length@^1.0.0": + "integrity" "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==" + "resolved" "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "for-each" "^0.3.3" + "has-proto" "^1.0.1" + "is-typed-array" "^1.1.10" + +"typed-array-byte-offset@^1.0.0": + "integrity" "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==" + "resolved" "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.2" + "for-each" "^0.3.3" + "has-proto" "^1.0.1" + "is-typed-array" "^1.1.10" + +"typed-array-length@^1.0.4": + "integrity" "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==" + "resolved" "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "for-each" "^0.3.3" + "is-typed-array" "^1.1.9" + +"typedarray@^0.0.6": + "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"uglify-js@3.4.x": + "integrity" "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz" + "version" "3.4.10" + dependencies: + "commander" "~2.19.0" + "source-map" "~0.6.1" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" + +"undici-types@~5.26.4": + "integrity" "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "resolved" "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + "version" "5.26.5" + +"unicode-canonical-property-names-ecmascript@^2.0.0": + "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + "version" "2.0.0" + +"unicode-match-property-ecmascript@^2.0.0": + "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" + +"unicode-match-property-value-ecmascript@^2.1.0": + "integrity" "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + "version" "2.1.0" + +"unicode-property-aliases-ecmascript@^2.0.0": + "integrity" "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + "version" "2.1.0" + +"union-value@^1.0.0": + "integrity" "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=" + "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "arr-union" "^3.1.0" + "get-value" "^2.0.6" + "is-extendable" "^0.1.1" + "set-value" "^0.4.3" + +"uniq@^1.0.1": + "integrity" "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" + "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + "version" "1.0.1" + +"uniqs@^2.0.0": + "integrity" "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" + "resolved" "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + "version" "2.0.0" + +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "unique-slug" "^2.0.0" + +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"unquote@~1.1.1": + "integrity" "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + "resolved" "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + "version" "1.1.1" + +"unset-value@^1.0.0": + "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" + "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-value" "^0.3.1" + "isobject" "^3.0.0" + +"upath@^1.1.1": + "integrity" "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + "resolved" "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz" + "version" "1.1.2" + +"update-browserslist-db@^1.0.13": + "integrity" "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + "version" "1.0.13" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"upper-case@^1.1.1": + "integrity" "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + "resolved" "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + "version" "1.1.3" + +"uri-js@^4.2.2": + "integrity" "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "punycode" "^2.1.0" + +"urix@^0.1.0": + "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + "version" "0.1.0" + +"url-parse@^1.5.10": + "integrity" "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==" + "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + "version" "1.5.10" + dependencies: + "querystringify" "^2.1.1" + "requires-port" "^1.0.0" + +"url@^0.11.0": + "integrity" "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==" + "resolved" "https://registry.npmjs.org/url/-/url-0.11.3.tgz" + "version" "0.11.3" + dependencies: + "punycode" "^1.4.1" + "qs" "^6.11.2" + +"use@^3.1.0": + "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + "version" "3.1.1" + +"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util.promisify@~1.0.0": + "integrity" "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==" + "resolved" "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "define-properties" "^1.1.3" + "es-abstract" "^1.17.2" + "has-symbols" "^1.0.1" + "object.getownpropertydescriptors" "^2.1.0" + +"util@^0.10.4": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + +"util@^0.11.0": + "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" + "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + "version" "0.11.1" + dependencies: + "inherits" "2.0.3" + +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"v8-compile-cache@^2.1.1": + "integrity" "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz" + "version" "2.4.0" + +"vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" + +"vendors@^1.0.0": + "integrity" "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + "resolved" "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" + "version" "1.0.4" + +"vm-browserify@^1.0.1": + "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + "version" "1.1.2" + +"vue-hot-reload-api@^2.3.0": + "integrity" "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==" + "resolved" "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz" + "version" "2.3.4" + +"vue-loader@^15.4.2": + "integrity" "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==" + "resolved" "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz" + "version" "15.11.1" + 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": + "integrity" "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==" + "resolved" "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "hash-sum" "^1.0.2" + "loader-utils" "^1.0.2" + +"vue-template-compiler@^2.7.15": + "integrity" "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==" + "resolved" "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz" + "version" "2.7.15" + dependencies: + "de-indent" "^1.0.2" + "he" "^1.2.0" + +"vue-template-es2015-compiler@^1.9.0": + "integrity" "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==" + "resolved" "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz" + "version" "1.9.1" + +"vue@^2.7.15": + "integrity" "sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ==" + "resolved" "https://registry.npmjs.org/vue/-/vue-2.7.15.tgz" + "version" "2.7.15" + dependencies: + "@vue/compiler-sfc" "2.7.15" + "csstype" "^3.1.0" + +"watchpack-chokidar2@^2.0.1": + "integrity" "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==" + "resolved" "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "chokidar" "^2.1.8" + +"watchpack@^1.7.4": + "integrity" "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" + "version" "1.7.5" + dependencies: + "graceful-fs" "^4.1.2" + "neo-async" "^2.5.0" optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stream-array@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/stream-array/-/stream-array-1.1.2.tgz#9e5f7345f2137c30ee3b498b9114e80b52bb7eb5" - dependencies: - readable-stream "~2.1.0" - -stream-consume@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" - -stream-exhaust@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.1.tgz#c0c4455e54ce5a179ca8736e73334b4e7fd67553" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string.prototype.codepointat@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -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" - dependencies: - ansi-regex "^2.0.0" - -strip-bom-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" - dependencies: - first-chunk-stream "^1.0.0" - strip-bom "^2.0.0" - -strip-bom@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" - dependencies: - first-chunk-stream "^1.0.0" - is-utf8 "^0.2.0" - -strip-bom@^2.0.0, strip-bom@2.X: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -sweetalert2@^4.0.4: - version "4.3.3" - resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-4.3.3.tgz#9a7ba4b679f27eeb3daae6a1f688395c6e3ef90f" - dependencies: - es6-promise latest - -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -ternary-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-2.0.0.tgz#569fa9042b01456b7a1277c64f41d643d84570e6" - dependencies: - duplexify "^3.4.2" - fork-stream "^0.0.4" - merge-stream "^1.0.0" - through2 "^2.0.0" - -through2@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" - dependencies: - readable-stream "~1.0.17" - xtend "~2.1.1" - -through2@^0.6.1, through2@^0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -through2@^2.0.0, through2@^2.0.1, through2@2.X: - version "2.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" - dependencies: - readable-stream "~2.0.0" - xtend "~4.0.0" - -tildify@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - dependencies: - os-homedir "^1.0.0" - -time-stamp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" - -tough-cookie@~2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" - -uglify-js@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.3.tgz#39b3a7329b89f5ec507e344c6e22568698ef4868" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-js@2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-save-license@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -unc-path-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - -underscore@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - -unique-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" - -urix@^0.1.0, urix@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -v8flags@^2.0.2: - version "2.0.11" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" - dependencies: - user-home "^1.1.1" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" - -vinyl-file@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-1.3.0.tgz#aa05634d3a867ba91447bedbb34afcb26f44f6e7" - dependencies: - graceful-fs "^4.1.2" - strip-bom "^2.0.0" - strip-bom-stream "^1.0.0" - vinyl "^1.1.0" - -vinyl-fs@^0.3.0: - version "0.3.14" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" - dependencies: - defaults "^1.0.0" - glob-stream "^3.1.5" - glob-watcher "^0.0.6" - graceful-fs "^3.0.0" - mkdirp "^0.5.0" - strip-bom "^1.0.0" - through2 "^0.6.1" - vinyl "^0.4.0" - -vinyl-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vinyl-map/-/vinyl-map-1.0.1.tgz#ccf64572a7be1c0b40190cd797cf5c2079f5ca1d" - dependencies: - bl "^0.7.0" - new-from "0.0.3" - through2 "^0.4.1" - -vinyl-sourcemaps-apply@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" - dependencies: - source-map "^0.5.1" - -vinyl@^0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -vinyl@^1.1.0, vinyl@1.X: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -when@^3.7.7, when@3.x: - version "3.7.7" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.7.tgz#aba03fc3bb736d6c88b091d013d8a8e590d84718" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@^1.0.5, which@^1.2.10, which@^1.2.9, which@1: - version "1.2.11" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b" - dependencies: - isexe "^1.1.1" - -wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" - dependencies: - string-width "^1.0.1" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wrap-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f" - dependencies: - string-width "^1.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" - -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - + "chokidar" "^3.4.1" + "watchpack-chokidar2" "^2.0.1" + +"wbuf@^1.1.0", "wbuf@^1.7.3": + "integrity" "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==" + "resolved" "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + "version" "1.7.3" + dependencies: + "minimalistic-assert" "^1.0.0" + +"webpack-cli@^3.1.2": + "integrity" "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==" + "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz" + "version" "3.3.12" + dependencies: + "chalk" "^2.4.2" + "cross-spawn" "^6.0.5" + "enhanced-resolve" "^4.1.1" + "findup-sync" "^3.0.0" + "global-modules" "^2.0.0" + "import-local" "^2.0.0" + "interpret" "^1.4.0" + "loader-utils" "^1.4.0" + "supports-color" "^6.1.0" + "v8-compile-cache" "^2.1.1" + "yargs" "^13.3.2" + +"webpack-dev-middleware@^3.7.2": + "integrity" "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==" + "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" + "version" "3.7.3" + 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.1.14": + "integrity" "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==" + "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz" + "version" "3.11.3" + dependencies: + "ansi-html-community" "0.0.8" + "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.8" + "semver" "^6.3.0" + "serve-index" "^1.9.1" + "sockjs" "^0.3.21" + "sockjs-client" "^1.5.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-log@^2.0.0": + "integrity" "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==" + "resolved" "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-colors" "^3.0.0" + "uuid" "^3.3.2" + +"webpack-merge@^4.1.0": + "integrity" "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "lodash" "^4.17.5" + +"webpack-notifier@^1.5.1": + "integrity" "sha512-L3UKrl500xk0VDYKkwQxy5/BPhBWsZ2xHsAx2Qe3dVKYUEk9+y690RcNTMIUcVOK2fRgK7KK3PA4ccOq1h+fTg==" + "resolved" "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "node-notifier" "^5.1.2" + "object-assign" "^4.1.0" + "strip-ansi" "^3.0.1" + +"webpack-sources@^1.1.0", "webpack-sources@^1.3.0", "webpack-sources@^1.4.0", "webpack-sources@^1.4.1", "webpack-sources@^1.4.3": + "integrity" "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "source-list-map" "^2.0.0" + "source-map" "~0.6.1" + +"webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4 || ^3", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.36.0 || ^5.0.0", "webpack@^4.36.1", "webpack@>=2", "webpack@4.x.x": + "integrity" "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz" + "version" "4.47.0" + 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.5.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.7.4", "websocket-driver@>=0.5.1": + "integrity" "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==" + "resolved" "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + "version" "0.7.4" + dependencies: + "http-parser-js" ">=0.5.1" + "safe-buffer" ">=5.1.0" + "websocket-extensions" ">=0.1.1" + +"websocket-extensions@>=0.1.1": + "integrity" "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "resolved" "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + "version" "0.1.4" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"which-module@^2.0.0": + "integrity" "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" + "version" "2.0.1" + +"which-typed-array@^1.1.11", "which-typed-array@^1.1.13": + "integrity" "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==" + "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + "version" "1.1.13" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.4" + "for-each" "^0.3.3" + "gopd" "^1.0.1" + "has-tostringtag" "^1.0.0" + +"which@^1.2.14", "which@^1.2.9", "which@^1.3.0", "which@^1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"worker-farm@^1.7.0": + "integrity" "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==" + "resolved" "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "errno" "~0.1.7" + +"wrap-ansi@^2.0.0": + "integrity" "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + +"wrap-ansi@^5.1.0": + "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "string-width" "^3.0.0" + "strip-ansi" "^5.0.0" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"ws@^6.2.1": + "integrity" "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==" + "resolved" "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" + "version" "6.2.2" + dependencies: + "async-limiter" "~1.0.0" + +"xtend@^4.0.0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + +"yallist@^2.1.2": + "integrity" "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + +"yallist@^3.0.2": + "integrity" "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz" + "version" "3.0.3" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@^13.0.0": + "integrity" "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz" + "version" "13.1.0" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^13.1.2": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^18.1.2": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs@^13.2.2": + "integrity" "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz" + "version" "13.2.2" + dependencies: + "cliui" "^4.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "os-locale" "^3.1.0" + "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.0.0" + +"yargs@^13.3.2": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + 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.4.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + 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" + +"yargs@~1.2.6": + "integrity" "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz" + "version" "1.2.6" + dependencies: + "minimist" "^0.1.0"